类和对象的加载先后
Posted circle元
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类和对象的加载先后相关的知识,希望对你有一定的参考价值。
静态的代码块,属性和方法都会在类加载时就开始加载了,它们的加载顺序按程序先后;当实例化一个类时,会先加载普通属性>构造块>构造函数>普通方法
静态块:用static申明,JVM加载类时执行,仅执行一次
构造块:类中直接用{}定义,每一次创建对象时执行,而且优先于构造函数执行(构造代码块中定义的是不同对象共性的初始化内容,给所有对象进行统一初始化;而构造函数是给对应的对象初始化)
静态块按照声明顺序执行,所以先执行public static B t1 = newB();该语句创建对象,则又会调用构造块,输出构造块
执行顺序优先级:静态块>main()>构造块>构造方法>普通方法
public class B { public static B t1 = new B(); public static B t2 = new B(); { System.out.println("构造块"); } static { System.out.println("静态块"); } public static void main(String[] args) { B t = new B(); } }
最后main方法执行,创建对象,输出构造块
正确的结果是:构造块 构造块 静态块 构造块
class Demo { int x; static int y = 3; // 静态代码块 static { System.out.println("静态代码块"); } // 定义构造代码块 { System.out.println("我是构造代码块"); System.out.println("x=" + x); } //构造函数 public Demo() { } static void print() { System.out.println("y=" + y); } void show() { System.out.println("x=" + x + " y=" + y); } } class StaticDemo { public static void main(String[] args) { //类名调用print方法 Demo.print(); //创建对象 Demo d = new Demo(); //给成员变量x赋值 d.x = 10; //用对象调用show方法 d.show(); } }
静态代码块
y=3
我是构造代码块
x=0
x=10 y=3
以上是关于类和对象的加载先后的主要内容,如果未能解决你的问题,请参考以下文章