首页 > 代码库 > 静态代码块、非静态代码块(普通代码块)和构造方法的执行顺序
静态代码块、非静态代码块(普通代码块)和构造方法的执行顺序
Java中经常有一些静态块,这是用来在生成类之前进行的初始化,无论java还C++语言中的static,都是最先初始化好的。结构如下:
static {
静态语句代码块
}
{
非静态语句代码块
}
相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋值。
不同点:静态代码块在非静态代码块之前执行(静态代码块-->非静态代码块-->构造函数)。
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 }
多次创建对象,静态代码块只执行一次,且最先执行。
接下来执行的是非静态语句代码块(即:普通代码块) ,会每创建一个对象执行一次,且多个非静态语句代码块会由上到下的执行。
在接下来执行的是构造方法,构造方法也是每创建一个对象就会执行一次。
在接下来就是调用普通的方法中的代码块,执行的顺序,在方法中没有什么特殊的。
对于静态属性,与静态代码块一样,也是在类加载时就会被自动执行,属于整个类的属性。
静态方法只能访问静态属性,一定不能访问非静态属性,但是注意这种说法的与我们通过对象来访问该静态属性,就是 对象名.非静态属性变量名, 这种方式就是我们通常在main方法中的一种访问方式。 这种访问的方式是可以的,但不能直接非静态属性变量名或静态属性方法。
对于静态方法中也不能直接使用this对象。
静态代码块是属于类的,在JVM加载类时就自动执行。静态代码块定义时不能添加作用域符。
静态代码块、非静态代码块(普通代码块)和构造方法的执行顺序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。