类加载顺序(1)
package loader; public class Test { /**类加载顺序 * 一:只研究Person类,没有继承类的情况 * 1.在主函数中调用person类构造方法创建对象 * 2.在调用构造方法前先加载static静态块(可以调用静态方法) * 3.加载普通构造块(可以调用普通方法) * 4.完成构造方法 * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Person p=new Person();//第一步 } }
package loader; public class Person { public String test="PersonField"; public static String testStatic="PersonStaticField"; public Person(){//第1.5步 //第四步 System.out.println("Person的构造方法"); } public void test(){ System.out.println("Person的普通方法"); } public static void testStatic(){ System.out.println("Person的静态方法"); } {//第三步 this.test(); System.out.println("Person的普通块"); } static{//第二步 Person.testStatic(); System.out.println("Person的静态块"); } }
输出顺序:
Person的静态方法 Person的静态块 Person的普通方法 Person的普通块 Person的构造方法
package loader;
public class Person {public String test="PersonField";public static String testStatic="PersonStaticField";public Person(){//第一。五步//第四步System.out.println("Person的构造方法");}public void test(){System.out.println("Person的普通方法");}public static void testStatic(){System.out.println(Person.testStatic);System.out.println("Person的静态方法");}{//第三步this.test();System.out.println("Person的普通块");}static{//第二步Person.testStatic();System.out.println("Person的静态块");}
}