秦疆的Java课程笔记:64 面向对象 构造器详解

发布时间 2023-12-08 17:13:44作者: Acolyte_9527
  • 类中的构造器也称为构造方法,世在进行创建对象的时候必须要调用的。并且构造器有以下两个特点

    • 必须和类的名字相同
    • 必须没有返回类型,也不能写void
  • 构造器必须掌握!

  • 一个类即使什么也没写,也会存在一个方法

//写一个空的Person类=========================
public class Person1 {}
//然后在主程序调用它==========================
public class Application1 {  
    public static void main(String[] args) {  
        Person1 person1 = new Person1();
        System.out.println(person1)  
    }  
}
====运行结果====
OOP.demo.Person1@2f4d3709   //返回这样的内容,是不会报错的
  • 这时我们打开Person的class文件就能看到:
public class Person1 {  
    public Person1() {  
    }  
}
//可以发现编译后自动为我们添加了一个方法
  • 我们也可以显式定义一个无参数构造器,如下
public class Person1 {  
    public Person1() {}  
}
  • 利用构造器实例化初始值
public class Person2 {  
    String name;  
    public Person2() {  
        this.name = "acolyte";  
    }  
}
//==========================================
public class Application2 {  
    public static void main(String[] args) {  
        Person2 person2 = new Person2();  
        System.out.println(person2.name);  
    }  
}
====输出结果====
acolyte
  • 使用new关键字,本质是在调用构造器。

  • 一旦定义了有参构造,无参构造就必须显式定义。

//创建一个有参构造===========================
public class Person3 {  
    String name;  
	public Person3(String name){  
	    this.name = name;
    }  
}
//继续使用刚才无参构造的主程序=================
//稍稍修改一下打印内容========================
public class Application3 {  
    public static void main(String[] args) {  
        Person3 person3 = new Person3();  
        System.out.println(person3.name);  
    }  
}
====运行报错====
无法将类 OOP.demo.Person3中的构造器 Person3应用到给定类型
  • 给上述代码增加一个显式构造。
public class Person3 {  
    String name;  
    public Person3() {} //只需要这么一行
	public Person3(String name){  
	    this.name = name;
    }  
}
//主程序不变======================================
public class Application3 {  
    public static void main(String[] args) {  
        Person3 person3 = new Person3();  
        System.out.println(person3.name);  
    }  
}
====运行结果====
null
//不再报错了,输出null只是因为没有赋值。
  • IDEA中,使用alt+Insert快捷键,可以自动生成构造器。可选“Select None”(无选择),生成无参构造。
  • 我试了一下,如果类中没有定义属性(就是String name;等语句),会自动生成无参构造。如果定义了各种属性,可以在生成构造器时选择各种属性生成构造器。
  • this.…的值一般是当前类中的,而this.…=后面的是参数传进来的值。