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

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

时间: 2024-12-02 23:30:27

反射 学习笔记之动态加载类的相关文章

java 利用java反射机制动态加载类的简单实现_java

如下所示: ////////////////// Load.java package org.bromon.reflect; import java.util.ArrayList; import java.util.List; public class Load implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<

thinkphp学习笔记9—自动加载

原文:thinkphp学习笔记9-自动加载 1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载. 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\Util\Auth类: namespace Org\Util; class Auth { } 保存到ThinkPHP/Library/Org/Util/Auth.class.php 这样我们就可以直接实例化了, new \Org\Util\Auth(); 实例化之后系统会自动加载 ThinkPHP/

动态加载类的原理——元数据的使用

动态|加载|数据 在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于"自成一体"的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息. 在System.Reflection中有这样一个class----Assembly,我们可以通过它来加载一个装配件.方法如下: Assembly assm=Assembly.LoadFrom(fileName); 其中filename是要加载的装配件的文件名称(带路径). 接下来,我们就可以通过使用Sys

Visual Basic .NET 中动态加载类(一)

visual|动态|加载 Visual Basic .NET 中动态加载类 · ··Microsoft 摘要:理想情况下,编写软件系统之前我们就应该知道此软件系统需要完成哪些操作.但实际情况并非如此,因此我们的系统应该是可以调整的. 最能体现这种适应性的是动态集成新功能的能力.例如,在 Windows 窗体应用程序中,这种能力是指加载编译原始应用绦蚝芫靡院蟠唇ǖ拇疤宓哪芰Α?/P> 这种操作在 Microsoft Visual Basic 6.0 中几乎是不可能的,但是在 Visual Basi

Visual Basic .NET 中动态加载类 (三)

visual|动态|加载 ··Microsoft 步骤 8:用新的窗体信息更新配置文件 现在,我们已经创建了一些新窗体,还需要在配置文件中引用它们.请用以下代码行替换 FormsOnTheFly.exe.config 中的占位符信息: <add key="First Form" value="C:\NewForms\FirstForm.dll~FirstForm.Form1"></add><add key="Second Fo

Java 从Jar文件中动态加载类

由于开发的需要,需要根据配置动态加载类,所以简单测试了一下JAVA动态加载类 定义接口 package loader; public interface HelloIface {     public String hello();          public String sayHi(String name); } 实现接口 在其他插件类实现此接口,并导出为jar,如D:/tmp/test.jar package loader; public class HelloImpl impleme

Java Class类的使用 和 动态加载类

Class类 1)在面向对象的世界里,万事万物皆对象. 类是对象,类是java.lang.Class类的实例对象. There is a class named Class 2)Foo的实例对象如何表示 Foo foo1=new Foo();//foo1就表示出来了 Foo这个类也是一个实例对象,Class类的实例对象,如何表示呢? 任何一个类都是Class的实例对象,这个实例对象有三种表示方式 (1) 第一种表示方式--->实际在告诉我们任何一个类都有一个隐含的静态成员变量class Clas

Visual Basic .NET 中动态加载类 (二)

visual|动态|加载 Microsoft 步骤 3:创建配置文件以存放可用窗体 应用程序在运行时需要的某些信息可能在编译时无法提供,这些信息通常放置在配置文件中.在 Visual Basic 6.0 中,配置文件应该是 INI 文件或 Windows 注册表.而在 .NET 中,则使用基于 XML 的配置文件. 我们无法详细介绍配置文件,因为这个主题非常复杂.但是,您应该知道,Windows 窗体应用程序的配置文件与应用程序的 EXE 启动文件在同一个目录中.配置文件的名称与程序的 EXE

JAVA的多态、接口、动态加载类等

为某研究所编写一个通用程序,用来计算每一种交通工具运行1000公里所需的时间,已知每种交通工具的参数都是3个整数A.B.C的表达式.现有两种工具:Car和Plane,其中Car的速度运算公式为:A*B/C,Plane的速度运算公式为:A+B+C.需要编写三类:ComputeTime.java,Plane.java,Car007.java和接口Common.java,要求在未来如果增加第3种交通工具的时候,不必修改以前的任何程序,只需要编写新的交通工具的程序.其运行过程如下,从命令行输入Compu