java static语句块,普通语句块,构造函数

原文链接

static语句块、普通语句块和构造函数

      最近忙着投简历找工作,当然得为笔试面试准备一下,把以前学习时欠下的帐补回来。因为当初学Java、Jsp、J2EE课程时都是会用了能做出东西来就行的心态,没有做过笔记,现在很多基础的东西都忘了,哎。从今往后,尽可能把学过的东西都整理成博客,方便复习总结。

     记得以前笔试时有一题是问Java的类初始化时static语句块和构造函数的执行顺序和次数的,当时答对了但是心里拿不准,今天查查资料顺便写个小例子巩固一下。

复制代码
 1 public class Test1 {
 2     public static int X=100;  
 3     public final static int Y=200;
 4     public Test1(){  
 5         System.out.println("Test构造函数执行");  
 6     }  
 7     static{  
 8         System.out.println("static语句块执行");  
 9     }  
10     
11     {
12         System.out.println("not static 语句块执行");
13     }
14     
15     public static void display(){  
16         System.out.println("静态方法被执行");  
17     }  
18     public void display_1(){  
19         System.out.println("实例方法被执行");  
20     }  
21     
22     public static void main(String [] args){
23         Test1.display();
24         System.out.println("x=" + Test1.X + "   y=" + Test1.Y );
25         Test1.display();
26         Test1 t1 = new Test1();
27         Test1 t2 = new Test1();
28         System.out.println("X=" + t1.X + "   Y=" + t1.Y);
29         Test1.display();
30     }
31 }
复制代码

运行结果

复制代码
static语句块执行
静态方法被执行
x=100   y=200
静态方法被执行
not static 语句块执行
Test构造函数执行
not static 语句块执行
Test构造函数执行
X=100   Y=200
静态方法被执行
复制代码

     可以看出static代码块是在类加载时自动执行的且只执行一次,非静态代码块在创建对象自动执行的代码,不创建对象不执行该类的非静态代码块。 顺序为 静态代码块--》非静态代码块--》类构造方法。第一次创建类实例、调用静态方法、访问静态变量或使用用Class.forName()显示加载类的时候都会执行static语句块。另外有多个static语句块时按顺序执行。

如在第一个static语句块之后再添加一个static语句块

static
        System.out.println( "static语句块执行" ); 
   
    
    static
        System.out.println( "static222语句块执行" ); 
    }

  则运行结果为

static 语句块执行
static222语句块执行
静态方法被执行
x= 100    y= 200

你可能感兴趣的:(java基础,java)