Java学习——构造方法

构造方法


Java中如何产生一个对象?

我们使用这句话:类名称  对象名称 = new 类名称();

第一个类名称就是说我们要在哪个类中产生对象;对象名称是一个唯一的标记,引用了一块堆内存;new关键字表示开辟新的堆内存空间;而最后一个类名称()就是构造方法。所谓的构造方法就是使用关键字new实例化新对象时来进行调用的操作方法。

构造方法的特点

1. 方法名称必须与类名称相同

2. 构造方法没有返回值类型声明

3. 每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)

4.若类中定义了构造方法,则默认的无参构造将不再生成

构造方法无返回值,为什么没有void声明?

我们可以看现在类中的组成:属性、构造方法、普通方法
1. 属性是在对象开辟堆内存时开辟的空间

2. 构造方法是在使用new后调用的

3. 普通方法是在空间开辟了、构造方法执行之后可以多次调用的

    public Person(){//无参构造方法

    }
    public void Person(){//命名不标准的普通方法

    } 

这样写的程序是可以编译通过也可以执行,因此,编译器是根据程序结构来区分普通方法与构造方法的,所以在构造方法前没有返回值类型声明。如果写了void声明,会被认为是普通方法。


 使用构造方法设置对象属性

构造方法的调用和对象内存分配几乎是同步完成的,因此我们可以利用构造方法来为类中的属性进行初始化操作 ,可以避免多次setter调用。
 

class Person{
    private String name;
    private int age;
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return this.name;
    }
    public void setAge(int age){
        this.age = age;
    }
    public int getAge(){
        return this.age;
    }
}

public class Test{
    public static void main(String[] args) {
        Person person1 = new Person("李四",22);
        System.out.println("姓名" + person1.getName());
        System.out.println("年龄" + person1.getAge());
    }
}

如果我先给Person类中的属性一个初值,在通过构造方法产生一个新对象,那么这个属性的值是什么?是我在Person类中给的初值还是通过构造方法传的参数呢?看下面的代码

class Person{
    private String name = "test";
    private int age;
    public Person(String name){
        this.name = name;
    }
    public String getName(){
        return this.name;
    }
}

public class Test{
    public static void main(String[] args) {
        Person person1 = new Person("李四");
        System.out.println("姓名" + person1.getName());
    }
}

这个代码输出为 姓名李四,这是因为程序编译时会把所有的属性打包放进构造方法里面,而且是放在赋值语句(this.name = name;)之前,先赋初值(private String name = "test";),然后再执行构造方法的赋值语句(this.name = name;),所以输出的是通过构造方法传进去的参数的值。

构造方法重载(参数个数不同)
 

    public Person(){

    }
    public Person(String name){
        this.name = name;
    }
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }

若干构造方法,建议按照参数个数升序或降序 。

猜你喜欢

转载自blog.csdn.net/eve8888888/article/details/83152152