Class.forName问题总结
Class.forName(包名.类名)是用来加载类的,但它只载static代码块,不会执行类的构造方法。要让两者都执行可以用Class.forName(包名.类名) .newInstance()来实例化一个对象
如:
package edu.handson;
public class StaticTest { static{ System.out.println("静态代码块被执行......"); } public StaticTest() { System.out.println("构造方法被执行"); } } |
public class Start { public static void main(String[] args){ try { Class.forName("edu.handson.StaticTest"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 执行结果:
|
public class Start { public static void main(String[] args){ try { Class.forName("edu.handson.StaticTest").newInstance();//相当于new一个对象 } catch (Exception e) { e.printStackTrace(); } } }
|
只定义一个类对象而没有用new去实例化,static代码块和构造方法都不会被执行。
package edu.handson;
public class StaticTest { static{ System.out.println("静态代码块被执行......"); } public StaticTest() { System.out.println("构造方法被执行"); } } |
import edu.handson.StaticTest;
public class Start { public static void main(String[] args){ StaticTest st;//类不会被加载,构造方法和static代码都不会执行 } }
|
import edu.handson.StaticTest;
public class Start { public static void main(String[] args){ StaticTest st=new StaticTest();//只有用new创建一个对象时,这个才会被加载 } }
|