怎么做网站变更,南康区建设局网站,设计网站推荐p,君山区建设局网站我们都知道#xff0c;创建对象是由 new关键字调用构造方法 返回类实例#xff08;实际上还可以通过反射来创建实例#xff09;。
例如 : Person jack new Person();
这句话到底做了什么事情呢 #xff1f; 其实就是讲对象的初始化过程。
1、 new 用到了Person.class,所…我们都知道创建对象是由 new关键字调用构造方法 返回类实例实际上还可以通过反射来创建实例。
例如 : Person jack new Person();
这句话到底做了什么事情呢 其实就是讲对象的初始化过程。
1、 new 用到了Person.class,所以会先找到Person.class文件并加载到内存中(用到类中的内容类就会被加载)2、执行该对象的static代码块(静态初始块)。(如果有的话给Person.class类进行初始化)3、在堆内存中开辟空间分配内存地址4、在堆内存中建立对象特有属性并进行默认初始化5、对属性进行显示初始化(声明成员属性并赋值)6、执行构造块7、执行构造函数8、将内存地址赋值给栈内存中的jack变量
如下图 下面我们来看两个案例
案例一
以下代码的输出结果是什么 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();}
}答案是
构造块 构造块 静态块 构造块
答案分析JVM先加载B这个类初始化静态域静态变量、静态块和静态方法按照代码先后顺序初始化先初始化t1t2,所以先输出构造块 构造块然后执行静态块所以输出静态块最后执行new B()输出构造块
案例二
一下代码的输出结果是什么 public class B {static {i 100;}public static int i 1;public static void main(String[] args) {System.out.println(i);}
}答案是1
答案分析静态变量是在类初始化时首先被加载的JVM会去查找类中所有的静态声明然后分配空间注意这时候只是完成了地址空间的分配还没有赋值之后JVM会根据类中静态赋值包括静态类赋值和静态块赋值的先后顺序来执行。对于程序来说就是先声明了int类型的地址空间并把地址传递给了i然后按照类中的先后顺序执行赋值动作首先执行静态块中i100接着执行i1那最后的结果就是i1了。