静态代码块在第一次创建对象的时候执行一次,之后再也不执行。 非静态代码块每创建一次对象就执行一次。...("静态代码块"); } { System.out.println("非静态代码块"); } } public class TestStatic{ public...非静态代码块 构造代码块 ==========分隔符================ 非静态代码块 构造代码块 当调用一个类里面的静态方法的时候,静态代码块也会执行 例子 class...("测试静态代码块会不会执行"); } static { System.out.println("静态代码块"); } { System.out.println...Cat.f(); } } 执行结果 静态代码块 测试静态代码块会不会执行 注意程序的唯一入口main方法也是静态方法 它同样也遵循静态方法的规则,所以它由系统在创建对象之前就调用.
一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只执行一次,静态代码块经常用来进行类属性的初始化。...Person类的静态代码块被调用!")...; 11 } 12 } 13 public class text2 { 14 15 //运行本程序时,静态代码块会被自动执行 16 static 17 { 18...System.out.println("3. text2类的静态代码块被调用!")...Person类的静态代码块被调用! 1. public Person() 1. public Person() 程序首先执行text2类,所以此程序的静态代码块会首先被执行。
参考:http://uule.iteye.com/blog/1558891 Java中的静态代码块是在虚拟机加载类的时候,就执行的,而且只执行一次。...如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。 非静态代码块是在类new一个实例的时候执行,而且是每次new对象实例都会执行。...代码的执行顺序 主调类的静态代码块 对象父类的静态代码块 对象的静态代码块 对象父类的非静态代码块 对象父类的构造函数 对象的非静态代码块 对象的构造函数 示例代码 public class StaticBlockTest1...{ //主调类的非静态代码块 { System.out.println("StaticBlockTest1 not static block"); }...Parent static block //父类的静态代码块 Children static block //子类的静态代码块 Parent not static
代码块的定义 在Java中,使用{ }括起来的代码被称为代码块。 代码块的分类 根据其位置和声明方式不同: ?...图片来自网络 面试题: 构造块和静态块执行顺序 在上面分类描述中,我们已经给出了答案;接下来我们跑一跑测试代码,根据代码执行结果来验证这些答案 无继承关系 package com.milo.java7...静态代码块 作用有两个:(1)给类的静态变量赋值;(2)声明静态变量; 作用在类的Body中,对类中的静态变量初始化: public class APP { static int x, y; /...args) { x--; myMethod(); System.out.println(x + y + ++x); } } 输出:23 注意,如果静态代码块中的代码改为...: static { int x = 5; // 声明一个静态变量 } 则只是在声明静态变量,而且这个静态变量的作用域只在这个代码块中,而不是进行初始化,最后的输出结果是3。
代码编写中,使用{}声明的程序块就属于代码块,而根据其出现的位置,及声明关键字的不同,分为四种:普通代码块、构造块、静态块、同步代码块(多线程中涉及) 1、普通代码块 在方法中使用{}定义起来的一段代码...将普通代码块中提取到类中使用,就形成了构造代码块。...3、静态代码块 如果代码块中使用了static关键字定义,则该代码块为静态代码块: 在非主类中定义的; 在主类中定义的; 【举例】:非主类中定义的静态块 protected void onCreate...由以上运行可知,静态块最先执行,并且只执行一次。...以上可以发现,静态块优于主方法先执行。 4、总结 代码块对于现阶段开发意义不大,了解即可。
常用于对类的初始化,每个静态代码块只会执行一次(类在内存中加载时执行,类在内存中加载后类已经存在)由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。...如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行。 ps:1 静态代码块不能存在于任何方法体内。...2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。 构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。...1"); } { System.out.println("这里是A中的普通代码块2"); } } 执行结果: 这里是静态代码块 这里是普通代码块A 这里是A中的普静态代码块1 这里是A中的普通代码块...1 这里是A中的普通代码块2 这里是普通代码块B 优先级总结:静态代码块>Main()>构造代码块
静态代码块: 在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。...由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。 注意: 静态代码块不能存在于任何方法体内。 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。...静态代码块、构造代码块、构造函数同时存在时的执行顺序: 静态代码块 > 构造代码块 > 构造函数; 下面来举几个例子说明: 构造方法 public class Test { static...第二构造块 构造方法 第一代码块 第二构造块 构造方法 第一代码块 第二构造块 构造方法 */ 静态代码块 /*静态代码块:在java中使用static关键字声明的代码块。...静态块用于初始化类,为类的属性初始化。 每个静态代码块只会执行一次。 由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
使用static{//Code...}的格式代表静态代码块。...一个类中若有多个静态代码块,则顺序执行它们。另一方面,静态的代码块也不能访问非静态域。 静态代码块的作用:一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。...2.构造代码块 Java使用{//Code...}的格式代表构造代码块,对比于静态代码块,其只少了static关键字的修饰。...%d个执行\n", ++i); } } 控制输出: 静态代码块代码块第1个执行 执行main方法 构造代码块第2个执行 构造函数第3个执行 普通代码块第4个执行 执行顺序: 静态代码块->...1个执行 父类的静态代码块第2个执行 子类的静态代码块第3个执行 父类的父类的构造函数第4个执行 父类的构造函数第5个执行 子类的构造函数第6个执行 根据Demo-2代码实验可知,涉及继承的代码块执行顺序是这样的
("静态代码块"); } } ②、执行时机 静态代码块在类被加载的时候就运行了,而且只运行一次,并且优先于各种代码块以及构造函数。...如果一个类中有多个静态代码块,会按照书写顺序依次执行。后面在比较的时候会通过具体实例来证明。 ③、静态代码块的作用 一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。...比如一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。 ④、静态代码块不能存在任何方法体中 这个应该很好理解,首先我们要明确静态代码块是在类加载的时候就要运行了。...对于静态方法,在类加载的时候,静态方法也已经加载了,但是我们必须要通过类名或者对象名才能访问,也就是说相比于静态代码块,静态代码块是主动运行的,而静态方法是被动运行的。 ...⑤、静态代码块不能访问普通变量 这个理解思维同上,普通变量只能通过对象来调用,是不能放在静态代码块中的。
主要探讨一下关于静态代码块,非静态代码块,构造函数的执行顺序。 如有错误,欢迎指出。 首先: 静态成员变量和静态代码块的优先级是一样的,先定义的先执行。...在创建一个对象的时候会执行非静态代码块和构造函数 再者是执行顺序: /* * *(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。...* *(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。 * *(3)父类实例成员和实例初始化块,按在代码中出现的顺序依次执行。 * *(4)执行父类构造方法。...,变成第二步执行 //非静态代码块 { System.out.println("A"); } } 输出: B A A 所以验证: 1.静态成员变量和静态代码块的优先级是一样的...2.在创建一个对象的时候会执行非静态代码块和构造函数。
构造代码块 package crud.entity; import java.util.Date; public class User { private int uid; private...{ System.out.println("构造代码块..."); } //静态代码块 static{ System.out.println...("静态代码块..."); } .........构造函数和构造代码块的区别: 构造代码块是给所有对象进行统一初始化;而构造函数是给对应的对象初始化。 构造代码块中定义的是不同对象共性的初始化内容。...静态代码块的作用: 随着类的加载而执行,只执行一次,并优先于主函数,用于给类进行初始化。
请写出如下代码的运行结果:public class ClassA { public ClassA(){ System.out.println("construct ClassA");...new ClassB(); }}打印结果为ClassAClassBin ClassA construct ClassA in ClassB construct ClassB // 构造方法分析静态代码块...,jvm加载类时执行,只执行一次构造代码块,创建对象时执行,顺序优先于构造函数子类初始化时,会调用父类的构造代码块和构造方法,以初始化继承的父类属性,但不会创建父类对象总结 执行顺序:静态代码块>构造代码块...>构造方法>普通代码块参考文献https://www.cnblogs.com/ysocean/p/8194428.html
静态代码块 a.定义格式 在Java类(静态代码块不能定义在方法中)中,通过static关键字和{}声明的代码块: public class Person { static{...System.out.println("静态代码块"); } } b.执行时机 静态代码块在类加载的时候执行,并且仅执行一次,如果一个类中有多个静态代码块,将按照书写顺序执行。...c.静态代码块的作用 一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。比如一个项目启动需要加载的很多配置文件等资源,就可以都放入静态代码块中。...d.静态代码块不能访问普通成员变量,只能访问静态成员变量 构造代码块 a.定义格式 在Java类中通过{}声明的代码块: public class Person { static{...图1-1 代码清单1-1运行结果 父类和子类执行顺序 首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有构造代码块,如果有就执行父类的构造代码块
1、为什么要用静态代码 随着类的加载而执行,而且只执行一次,不需要每次调用这个变量都给它赋值 2、静态代码块是什么 静态代码块优先级高于非静态代码块,静态代码块要先执行,只执行一次,执行完即销毁。...{ static { System.out.println("BlockTest静态代码块执行"); } { System.out.println...BlockTest c9 = new BlockTest(); } } class Coder { static { System.out.println("coder静态代码...("coder无参构造执行"); } } 结果: BlockTest静态代码块执行 main coder静态代码 Coder构造代码块执行 coder无参构造执行 Coder构造代码块执行 coder...无参构造执行 Coder构造代码块执行 coder无参构造执行 Coder构造代码块执行 coder无参构造执行 Coder构造代码块执行 coder无参构造执行 Coder构造代码块执行 coder无参构造执行
静态代码块 关键字static,实例如下: public class FileUploadUtils { static { try { InputStream in...具体说,静态代码块是由类调用的。...类调用时,先执行静态代码块,然后才执行主函数的,总的来说,静态代码块是和类一起的,优先级最高,类加载的同时,静态代码块同时也执行,但只执行一次,所以作用一般是用来加载一些配置代码,或者加载某些文件配置。...构造代码块 构造代码块的作用同样是给对象进行初始化。对象一建立就运行构造代码块了,而且优先于构造函数执行。...也就是说,构造代码块中定义的是不同对象共性的初始化内容。 运行结果: 可以看出来,静态代码块只执行一次,而每次创建对象都会调用共同的构造代码块,而构造函数也只在创建对象时执行该对象的构造函数。
静态代码块 static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内 JVM加载类时会执行这些静态代码块,如果static代码块有多个...,JVM将按照它们在类中出现的先后顺序依次执行它们 每个静态代码块只会被执行一次 实例说明 // 父类 public class ParentStatic { private static...String pstr = "父类静态变量"; static { System.out.println("执行父类静态代码块:" + pstr); }..."; static { System.out.println("执行子类静态代码块:" + cstr); } public ChildStatic(...,便执行父类的静态代码块(父类有父类还会往上找父类静态) 父类ParentStatic加载完成,继续加载子类ChildStatic,发现子类有静态代码块,执行子类静态代码块 类ChildStatic加载完成
这是子类的静态代码块 before new Child() 这是父类的构造代码块 这是父类的构造方块 这是子类的构造代码块 这是子类的构造方法 结论: 首先,静态代码块,...加载的时候,将静态成员变量(类变量),构造代码块,静态代码块以及静态方法加载到方法区的静态部分,非静态方法以及构造方法加载到方法区的非静态部分。...总结:静态代码块是最先执行的,然后执行父类的构造代码块以及父类的构造方法,接着去执行子类的非静态代码块以及子类的构造方法。...顺序为:初始化父类静态代码块->初始化子类静态代码块->初始化父类构造代码块->初始化父类构造方法->初始化子类构造代码块->初始化子类构造方法 根据输出结果,"before new Child()..."是在是在执行完静态代码块以后然后才输出的,这就证明静态代码块是不需要创建对象就可以执行的,只要加载完类文件就可以执行,而构造代码块以及构造方法是在执行创建对象的时候才进行初始化的。
直接上代码 public class Test { private string no; public static string msg;...static Test() { Console.WriteLine("执行静态代码块"); msg = "静态代码块";...} public Test() { Console.WriteLine("执行非静态代码块"); msg = "静态代码块...我们通过上面执行后我们可以看出,静态代码块的执行时机为,在第一次调用类中的静态变量前执行或在第一次实例化类时执行
概念静态内部类形式的单例可保证线程安全,也能保证单例的唯一性,同时也延迟了单例的实例化。...理论依据是方法:()方法是编译器给某些类(带有静态代码块,或者静态变量、静态内部类)自动生成的方法,目的是,确保静态语句块有序顺序的执行,并且只会执行一次。...测试demopackage com.bryant.singleton;public class TestClinitMethod { // 静态代码块,有且只会被JVM编译执行一次 static...[Thread-0,5,main] end...Thread[Thread-1,5,main] start...Thread[Thread-1,5,main] end...验证理论:static {}静态代码块有且只被执行一次即使多线程下
java中的自由块分为两种: 静态块和非静态块 静态块: 1 public class Test { 2 static int x = 10; 3 //静态块:静态块的执行时机是在class...文件装载的时候;静态块只会执行一次 4 //多个静态块的时候,按出现顺序执行 5 static{ 6 x+=5; 7 } 8 } 非静态块: 1 public class...Test { 2 //非静态块:每次初始化一个对象,都会导致一次非静态块的执行;在构造函数执行之前执行 3 //继承关系:父类的非静态块->父类的构造函数->自己的自由块->自己的构造函数...:静态块的执行时机是在class文件装载的时候;静态块只会执行一次 5 //多个静态块的时候,按出现顺序执行 6 static{ 7 x+=5; 8 }...:每次初始化一个对象,都会导致一次非静态块的执行;在构造函数执行之前执行 21 //继承关系:父类的非静态块->父类的构造函数->自己的自由块->自己的构造函数 22 { 23
领取专属 10元无门槛券
手把手带您无忧上云