Class.forName接受一个字符串,然后搜索以这个字符串为名字的类,如果有的话则返回一个这个字符串为类名的Class对象将其加载到JVM中,如果没有则抛出异常。
new是关键字,如果这个类没有加入JVM就先加入JVM然后生成一个实例对象。
newInstance则把JVM中存在的对象进行实例化,这个特点在工厂模式下很有用。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。
可以认为new = forName + newInstance,先加载,再实例化
1 class Test { 2 static { 3 System.out.println("已经被加载"); 4 } 5 Test() { 6 System.out.println("已经分配"); 7 } 8 } 9 10 public class Java25_ClassName { 11 public static void main(String[] args) throws ClassNotFoundException { 12 //Test1 13 try { 14 Class<?> c = null; 15 c = Class.forName("Test"); 16 } catch (ClassNotFoundException e) { 17 System.out.println("notfound"); 18 } 19 System.out.println(); 20 //Test2 21 Test t = new Test(); 22 System.out.println(); 23 //Test3 24 Class.forName("Test"); 25 } 26 }
Java中的Class.forName,new 以及 newInstance
原文:https://www.cnblogs.com/owczhlol/p/12929892.html