首页 > 代码库 > Java-反射之动态加载类

Java-反射之动态加载类

 在Java当中,加载类分为动态加载和静态加载,其中,在编译时刻加载类叫做静态加载类,在运行时刻加载类叫做动态加载类。

 产生Class对象的方式中,有一个是Class.forName("类的全称"),这个不仅仅表示类的类类型,而且还表示了动态加载类。

 1 package com.example.demo;
 2 
 3 public class Demo {
 4     public static void main(String[] args) {
 5         if (args[0].equals("word")) {
 6             Word word = new Word();
 7             word.start();
 8         }
 9         if (args.equals("Excel")) {
10             Excel excel = new Excel ();
11             excel.start();
12         }
13     }
14 }

  比如说如上代码:如果我们不创建Word类和Excel类的话,我们会发现这段代码不能通过编译,这是因为new方式创建对象是通过静态加载类的,在编译的时候把所有可能要用到的类加载进来,不论以后到底用不用它。这种方式有一个弊端:那就是我们必须把所有可能到的类加载进来,一旦发现有一个类没有被加载进来,其他的类就不能使用。

  而动态加载则是,需要使用哪个类,我们就加载哪个类,不必要把所有的类加载进来。

1         try {
2             //动态加载类,在运行时刻进行加载,编译不会报任何错误
3             Class c1 = Class.forName(args[0]);
4             //通过类类型来创建类的对象--我想要加载的类必须都符合一个标准,也就是说要实现统一的接口
5             OfficeAble officeAble = (OfficeAble)c1.newInstance();
6         } catch (ClassNotFoundException e) {
7             // TODO Auto-generated catch block
8             e.printStackTrace();
9         }

 

Java-反射之动态加载类