反射 学习笔记之动态加载类

1 Class.forName("类的全名")不仅表示了类的类类型,还代表了动态加载类
2 编译时刻加载类称之为静态加载,运行时刻加载类是动态加载类

3 new 对象是静态加载类,在编译时刻就需要加载所有的可能使用的类(编译时刻加载)

用Edit写一个reflectDemo2,里面有俩个命令行参数判断的代码word,execl,我们在同一个文件夹下写一个word类不写execl类,我们假如只想运行word不想运行execl,但是很不幸,由于这是静态加载,javacreflectDemo2编译时是将其中所有类都要加载,只有word但是找不到execl类直接编译出错!


[java] view plain copy
  1. class  reflectDemo2  
  2. {  
  3.     public static void main(String[] args)   
  4.     {  
  5.         if("word".equals(args[0]))  
  6.         {  
  7.             word w = new word();  
  8.             w.start();  
  9.         }  
  10.         if("word".equals(args[0]))  
  11.         {  
  12.             excel e = new excel();  
  13.             e.start();  
  14.         }  
  15.     }  
  16. }  

[java] view plain copy
  1. class word  
  2. {  
  3.     start()  
  4.     {  
  5.         System.out.println("Word!");  
  6.     }  
  7. }  

运行就出错了反射 学习笔记之动态加载类



下面我们使用动态加载定义better类,依然还是只定义了一个word类,为了方便扩展,定义了一个接口

[java] view plain copy
  1. class better   
  2. {  
  3.     public static void main(String[] args)   
  4.     {  
  5.         try  
  6.         {  
  7.             //动态加载类  
  8.             Class c = Class.forName(args[0]);  
  9.             //通过类类型,创建对象  
  10.             Office oa = (Office)c.newInstance();  
  11.             oa.start();  
  12.         }  
  13.         catch (Exception e)  
  14.         {  
  15.             e.printStackTrace();  
  16.         }  
  17.     }  
  18. }  
此时word继承Office接口

[java] view plain copy
  1. class word implements Office  
  2. {  
  3.     public void start()  
  4.     {  
  5.         System.out.println("Word!");  
  6.     }  
  7. }  

接口如下

[java] view plain copy
  1. interface Office  
  2. {  
  3.     public void start();  
  4. }  

依然是只有一个word类,没有excel类这次使用动态加载这次可以顺利编译成功了!

反射 学习笔记之动态加载类


转载:http://blog.csdn.net/xsf50717/article/details/44965277

上一篇:Docker入门系列之二:使用dockerfile制作包含指定web应用的镜像


下一篇:阿里云ECS七天进阶训练计划day1–基于ECS搭建FTP服务