每日复习------main()方法以及对象的初始化顺序

2023-05-19,,

由于 Java 虚拟机需要调用类的 main()方法,所以该方法的访问权限必须是 public,又因为 Java 虚拟机在执行 main()方法时不必创建对象,所以该方法必须是 static 的,该方法接收一个 String 类型的数组参数,该数组中保存执行 Java 命令时传递给所运行的类的参数。

又因为 main() 方法是静态的,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,这种情况,我们在之前的例子中多次碰到。

main()方法的使用说明

 * 1.main()方法作为程序的入口;

 * 2.main()方法也是一个普通的静态方法

 * 3.main()方法也可以作为我们与控制台交互的方式。(之前,使用 Scanner)

类的成员之四:代码块(或初始化块)

 *

 * 1.代码块的作用:用来初始化类、对象的

 * 2.代码块如果有修饰的话,只能使用 static

 * 3.分类:静态代码块 vs 非静态代码块

 *

 * 4.静态代码块

 * 》内部可以有输出语句

 *  》随着类的加载而执行,而且只执行一次

 *  》作用:初始化类的信息

 *  》如果一个类中,定义了多个静态代码块,则按照声明的先后顺序执行

 *  》静态代码块的执行,优先于非静态代码块的执行

 *  》静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构

 *

 * 5.非静态代码块

 *  >内部可以有输出语句

 *  >随着对象的创建而执行

 *  >每创建一个对象,就执行一次非静态代码块。

 *  >作用:可以在创建对象时,对对象的属性等进行初始化。

 *  >如果一个类中,定义了多个非静态代码块,则按照声明的先后顺序执行

 *  >非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法。

 * 

 * 对属性可以赋值的位置:

 *  默认初始化

 *  显式初始化

 *  构造器中初始化

 *  有了对象以后,可以通过"对象.属性""对象.方法"的方式,进行赋值。

 *  在代码块中赋值

class Father {

static {

System.out.println("11111111111");//1

}

{

System.out.println("22222222222");//5  //10

}

public Father() {

System.out.println("33333333333");//6    //11

}

}

public class Son extends Father {

static {

System.out.println("44444444444");//2

}

{

System.out.println("55555555555");//7

}

public Son() {

System.out.println("66666666666");//8

}

public static void main(String[] args) { // 由父及子 静态先行

System.out.println("77777777777");//3

System.out.println("************************");//4

new Son();

System.out.println("************************");//9

new Father();

}

}

对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法

每日复习------main()方法以及对象的初始化顺序的相关教程结束。

《每日复习------main()方法以及对象的初始化顺序.doc》

下载本文的Word格式文档,以方便收藏与打印。