1 Class.forName("类的全名")不仅表示了类的类类型,还代表了动态加载类
2 编译时刻加载类称之为静态加载,运行时刻加载类是动态加载类
3 new 对象是静态加载类,在编译时刻就需要加载所有的可能使用的类(编译时刻加载)
用Edit写一个reflectDemo2,里面有俩个命令行参数判断的代码word,execl,我们在同一个文件夹下写一个word类不写execl类,我们假如只想运行word不想运行execl,但是很不幸,由于这是静态加载,javacreflectDemo2编译时是将其中所有类都要加载,只有word但是找不到execl类直接编译出错!
- class reflectDemo2
- {
- public static void main(String[] args)
- {
- if("word".equals(args[0]))
- {
- word w = new word();
- w.start();
- }
- if("word".equals(args[0]))
- {
- excel e = new excel();
- e.start();
- }
- }
- }
- class word
- {
- start()
- {
- System.out.println("Word!");
- }
- }
运行就出错了
下面我们使用动态加载定义better类,依然还是只定义了一个word类,为了方便扩展,定义了一个接口
- class better
- {
- public static void main(String[] args)
- {
- try
- {
-
- Class c = Class.forName(args[0]);
-
- Office oa = (Office)c.newInstance();
- oa.start();
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- }
此时word继承Office接口
- class word implements Office
- {
- public void start()
- {
- System.out.println("Word!");
- }
- }
接口如下
- interface Office
- {
- public void start();
- }
依然是只有一个word类,没有excel类这次使用动态加载这次可以顺利编译成功了!
转载:http://blog.csdn.net/xsf50717/article/details/44965277