在Java中,测试
当一个类被调用的时候,它的初始化过程是怎么样的呢?spa
当一个类被实例化的时候,它的初始化过程又是怎样的呢?code
为何static方法不能未经对象就调用非static方法?对象
下面咱们经过例子来找出答案。blog
public class ClassLoadingTest { static String staticString=getStaticString(); //静态成员变量 private String privateString=getPrivateString();//普通成员变量 public ClassLoadingTest() { System.out.println("Loading ClassLoadingTest()"); } public static void loadStaticMethod() { System.out.println("Loading static method"); } private void loadNotStaticMethed(){ System.out.println("Loading NotStaticMethed"); } private String getPrivateString() { String string=new String("Loading private variable"); System.out.println(string); return string; } private static String getStaticString() { String string=new String("Loading static variable"); System.out.println(string); return string; } public static void main(String[] args) { loadStaticMethod(); //加载静态方法 System.out.println("try to new ClassLoadingTest()"); ClassLoadingTest test=new ClassLoadingTest(); test.loadNotStaticMethed();//加载普通方法 } }
Loading static variable
Loading static method
try to new ClassLoadingTest()
Loading private variable
Loading ClassLoadingTest()
Loading NotStaticMethed
当一个类没有父类的时候,加载顺序为:get
静态成员变量/静态方法-->开始实例化-->普通成员变量/普通方法-->构造方法-->实例化结束。string
父类:class
public class ClassLoadingTestSuper { static String staticString=getSuperStaticString(); //父类的静态成员变量 private String privateString=getSuperPrivateString(); //父类的普通成员变量 public ClassLoadingTestSuper() { System.out.println("Loading ClassLoadingTestSuper()"); } private String getSuperPrivateString() { String string=new String("Loading super class private variable"); System.out.println(string); return string; } private static String getSuperStaticString() { String string=new String("Loading super class static variable"); System.out.println(string); return string; } }
子类:test
public class ClassLoadingTest extends ClassLoadingTestSuper { /*内容与ClassLoadingTest相同*/ }
Loading super class static variable Loading static variable Loading static method try to new ClassLoadingTest() Loading super class private variable Loading ClassLoadingTestSuper() Loading private variable Loading ClassLoadingTest() Loading NotStaticMethed
当该类有父类的时候,类的实例化的加载过程是:变量
父类的static成员变量和方法-->该类的static变量和方法-->开始实例化-->父类的普通成员变量和方法-->父类的构造方法-->该类的普通成员变量和方法-->该类的构造方法-->实例化结束。