跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

java中的对象怎么初始化

第一步:加载该类,一个 java 对象在初始化前会进行类加载,在jvm中生成class对象。加载一个类会进行如下操作,下面给出递归描述。 如果该类有父类,则先加载其父类。 i 初始化该类静态成员 ii 执行该类静态代码块 第二步:创建对象,如果该类有父类,则创建对象时会先创建其父类的对象,外层包裹子类的属性和方法,然后返回子类的引用,下面给出递归描述。 立即学习 “ Java免费学习笔记(深入) ”; 如果该类有父类,先创建父类的对象。 i 初始化该类普通成员 ii 执行普通代码块 iii 调用该类构造方法 示例: Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 该类对象作为成员变量
public class Info{ public Info(String s) { System.out.println(s); } }
父类
public class Parent { public static Info info = new Info("Parent static member"); //静态成员 public Info info2 = new Info("Parent common member"); //普通成员 static { //静态代码块 System.out.println("parent static block"); } { //普通代码块 System.out.println("parent common block"); } public Parent() { //父类构造方法 System.out.println("Parent.Parent()"); } }
子类
public class Child extends Parent{ public static Info info = new Info("Child static member"); //静态成员 public Info info2 = new Info("Child common member"); //普通成员 static { //静态代码块 System.out.println("Child static block"); } { //普通代码块 System.out.println("Child common block"); } public Child() { //子类构造方法 System.out.println("Child.Child()"); } }
下面测试类的加载过程,我们不创建对象,而是直接加载类,并且是加载子类
public class InitObjectTest{ public static void main(String[] args) { try{ //Class.forName("Parent"); Class.forName("Child"); }catch(Exception e){ } //System.out.println("=============== now , we create an Object below ==========="); //new Parent(); } }
测试结果: 测试结果符合上面所写的加载类的规则,先初始化父类静态成员,再执行父类静态块,然后初始化子类静态成员,最后执行子类静态块。我们可以看到静态成员确实在类加载时初始化。 注意 :类的加载只进行一次,之后创建对象将不再进行类加载,这也是为什么静态代码块只执行一次的原因。 推荐教程: java入门教程

相关文章