java静态代码块/静态属性、构造块、构造方法执行、main方法、普通代码块的顺序

java静态代码块/静态属性、构造块、构造方法执行、main方法、普通代码块的顺序

这也是在笔试中的一个重要的考点,就有一个输出语句让你写出输出的结果。

理论知识:

静态代码块是:属于类的,在类加载时就自动执行。静态代码块定义时不能添加作用域符。

构造块是: 在类中定义的,且定义的位置与该类的其他的属性是相当的,就是不在该类的任何成员方法中,定义时直接用{ }包含即可,不用再添加其他任何的访问作用域符。构造块是每次创建对象都会执行一次构造块。

普通代码块:定义位置实在方法内部,在方法体内用 { } 包含即可。

下面给出测试的代码及测试结果,主要是查看执行的顺序,及多次创建对象时执行的顺序及结果。

[java] view plain copy
  1. public class Test_Static_Class {  
  2.     //静态代码块  
  3.     static {  
  4.          
  5.        System.out.println("静态代码块");  
  6.    }  
  7.    {  
  8.        System.out.println("构造块1");  
  9.    }  
  10.    //构造方法  
  11.    public   Test_Static_Class() {  
  12.        System.out.println("执行了构造方法");  
  13. }  
  14.    //普通的成员方法  
  15.    public void test() {  
  16.        System.out.println("在方法中的普通代码块");  
  17.        //普通的代码块  
  18.        {  
  19.            System.out.println("普通代码块");  
  20.        }  
  21.         
  22. }  
  23.    public static void main(String[] args) {  
  24.     System.out.println("执行了主方法");  
  25.     System.out.println("--------------------");  
  26.     new Test_Static_Class();  
  27.     System.out.println("------第二次创建对象---------------");  
  28.     new Test_Static_Class();  
  29.     System.out.println("------第三次创建对象---------------");  
  30.     new Test_Static_Class().test();  
  31. }  
  32.    //构造块  
  33.    {  
  34.        System.out.println("构造块2");  
  35.    }  
  36. }  
运行的结果:

java静态代码块/静态属性、构造块、构造方法执行、main方法、普通代码块的顺序

多次创建对象,静态代码块只执行一次,且最先执行。

接下来执行的是构造快,构造块会每创建一个对象执行一次,且多个构造块会由上到下的执行。

在接下来执行的是构造方法,构造方法也是每创建一个对象就会执行一次。

在接下来就是调用普通的方法中的代码块,执行的顺序,在方法中没有什么特殊的。

对于静态属性,与静态代码块一样,也是在类加载时就会被自动执行,属于整个类的属性。

静态方法只能访问静态属性,一定不能访问非静态属性,但是注意这种说法的与我们通过对象来访问该静态属性,就是 对象名.非静态属性变量名, 这种方式就是我们通常在main方法中的一种访问方式。 这种访问的方式是可以的,但不能直接 非静态属性变量名 或静态属性方法。

对于静态方法中也不能直接使用this对象。