Java中的Class.forName,new 以及 newInstance

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 }

 

posted @ 2020-05-21 12:13  owczhlol  阅读(267)  评论(0)    收藏  举报