用new创建并初始化对象步骤:
给对象的实例变量(非“常量”)分配内存空间,默认初始化成员变量;
成员变量声明时的初始化;
初始化块初始化(又称为构造代码块或非静态代码块);
构造方法初始化
下面用简短的一些代码加文字注释说明代码的初始化过程
public class Student{
String name="张三";
//思考:执行非静态代码块时,对象已经创建了吗?对象已经创建,否则this.name会出现错误
{
System.out.println("非静态代码块"+this.name);
}
//思考:调用构造函数时,对象已经存在了吗?已经存在了,否则this.name会出现错误
public Student(String name){
this.name = name;
System.out.println("构造方法"+name);
}
//思考:先调用非静态代码块还是先调用构造方法?程序运行结果先输出张三,然后输出李四,可见一定先调用非静态代码块,再调用构造函数,并且调用非静态代码块时所创建对象的实例属性值为初始化值,或者是默认值(如果没有初始化)
public static void main(String[] args) {
Student student = new Student("李四");
}
}
Java对象的初始话过程可以详细表述为下列过程,下面用代码展示
即为每次初始化Java对象时,按照以下几个过程,在操作代码时可以按照此格式
其中,有参和无参构造方法可以颠倒顺序,如下面的代码块也可以这样写
public Studen(String name) {
System.out.println("有参构造方法");
this.name = "san";
System.out.println(name);
}
public Studen() {
System.out.println("无参构造函数");
}
}
//连接Studen.java主函数
public class TestStudent {
public static void main(String[] args) {
System.out.println("构造方法在构造代码块之后");
Studen student= new Studen("si");
System.out.println(student.name);
}
其中,java中构造方法指的是:
与类名相同,无返回类型的方法,参数可以为空,也可以带参数。
比如一个 Dao 类,private Dao(){}这个就是无参数的构造方法
private Dao(String name){}这个就是带参数的构造方法
作用:用来初始化 java 类,提供类的初始化和实例化,以便调用。
一旦自定义构造方法后,系统将不再自动生成无参数的构造方法
构造方法的作用:在类的实例对象刚产生时,该类中的构造方法将会被自动调用,我们可以再该构造方法中加入需要完成初始化工作的代码。
需要注意的有以下几点:
编写一个类时没有添加无参构造方法,那么编译器会自动添加无参构造方法;(如果自己添加构造函数,无论有参数或是没参数,默认构造函数都将无效)
编写时添加了有参构造方法而未添加无参构造方法,那么编译器只认有参构造方法而不会默认添加无参构造方法!
如果需要使用无参构造方法,一定要在类里面添加