java反射--动态加载
Class.forName("类的全称")
1)不仅表示类的类类型,还表示了动态加载类
2)请区分编译,运行
3)编译时刻加载类是静态加载类,运行时刻加载类是动态加载类
比如下面:
比如一个类里面有如下方法,当条件满足word的时候,调用 Word w=new Word();
当满足Excel时候,调用 Excel e=new Excel();
这种使用new 创建对象的方式属于静态加载类,编译时刻就需要加载所有可能使用到的类,一旦Word或者Excel不存在,编译的时候就会报错,通不过。
如果我要想用哪个类,就加载哪个类,只有用到的时候,才加载,那么就可以解决这个问题。
通过动态加载类可以家具该问题。
具体实现如下:
package com.reflect; public class OfficeBetter { public static void main(String[] args) throws Exception { Class c1=Class.forName("com.reflect.Word"); OfficeAble oa=(OfficeAble)c1.newInstance(); //通过newInstance()实例化一共对象,为了让不同的类都能转化,需要为这些类定义一共接口
oa.start();
}
}
实例化这个类的对象,通过newInstance方法,但是如果Word类,需要转化为Word,如果是Excel类,需要转化为Excel类,
为了方便,可以给这几个类定义一共公用接口,OfficeAble。需要用的类实现它的接口即可。
package com.reflect; public interface OfficeAble { public void start(); }
Word实现接口
package com.reflect; public class Word implements OfficeAble { @Override
public void start() { System.out.println("word...is created");
}
}
需要什么类,就按照这种方式实现即可。
java反射--动态加载的更多相关文章
- java反射动态加载类Class.forName();
1,所有的new出来的对象都是静态加载的,在程序编译的时候就会进行加载.而使用反射机制Class.forName是动态加载的,在运行时刻进行加载. 例子:直接上两个例子 public class Ca ...
- C# 利用反射动态加载dll
笔者遇到的一个问题,dll文件在客户端可以加载成功,在web端引用程序报错.解决方法:利用反射动态加载dll 头部引用加: using System.Reflection; 主要代码: Assembl ...
- 透过现象看本质:Java类动态加载和热替换
摘要:本文主要介绍类加载器.自定义类加载器及类的加载和卸载等内容,并举例介绍了Java类的热替换. 最近,遇到了两个和Java类的加载和卸载相关的问题: 1) 是一道关于Java的判断题:一个类被首次 ...
- .Net Core利用反射动态加载类库的方法(解决类库不包含Nuget依赖包的问题)
在.Net Framework时代,生成类库只需将类库项目编译好,然后拷贝到其他项目,即可引用或动态加载,相对来说,比较简单.但到了.Net Core时代,动态加载第三方类库,则稍微麻烦一些. 一.类 ...
- [改善Java代码]动态加载不适合数组
上一个建议解释了为什么要使用forName,本建议就说说哪些地方不适合使用动态加载. 如果forName要加载一个类,那它必须是一个类------8中基本类型就排除在外.它们不是一个具体的类. 其次它 ...
- Java的动态加载及其安全性问题
1.什么是动态加载 Class Loaders是动态加载Java类与Resource的一种机制.它支持Laziness,type-safe linkage,user-defined extensibi ...
- [转载] Java中动态加载jar文件和class文件
转载自http://blog.csdn.net/mousebaby808/article/details/31788325 概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下 ...
- c#反射-动态加载dll简单例子
假设已有组件ClassLibraryTEST.dll,放置于程序目录下.组件中ClassLibraryTEST命名空间下有TEST类,类中有方法sum.下面示例就是动态加载组件并调用sum方法的简例: ...
- [javaSE] 反射-动态加载类
Class.forName(“类的全称”) ①不仅表示了类的类类型,还代表了动态加载类 ②请大家区分编译,运行 ③编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 Ⅰ所有的new对象都是静态加载 ...
随机推荐
- BSGS算法+逆元 POJ 2417 Discrete Logging
POJ 2417 Discrete Logging Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4860 Accept ...
- 14. Cantor表
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 现代数学的著名证明之一是Georg Cantor证明了有理数 ...
- 某DP题目3
题意: 一根数轴上有n只怪物,第i个怪物所在的位置为ai,另有m个特殊点,第i个特殊点所在的位置为bi.你可以对怪物进行移动,若两怪物相邻,那么你不能把他们分开,移动时要看作一个整体.你可以选择向左或 ...
- 普及向 ZKW线段树!
啊,是否疲倦了现在的线段树 太弱,还递归! 那我们就欢乐的学习另外一种神奇的线段树吧!(雾 他叫做zkw线段树 这个数据结构灰常好写(虽然线段树本身也特别好写……) 速度快(貌似只在单点更新方面比 ...
- HTML5 本地存储(Web Storage)
HTML5 提供了两种在客户端存储数据的新方法: localStorage - 本地永久存储,下次打开浏览器数据依然存在 sessionStorage - 只存在于一个会话的数据存储,关闭浏览器数据会 ...
- 【原】Project configuration is not up-to-date with pom.xml
导入一个Maven项目之后发现有一个如下的错误: Project configuration is not up-to-date with pom.xml. Run project configura ...
- spring ioc 理解
springIOC 作用 springIOC 是sprig的特性.称作控制反转.将对象的创建,初始化,销毁,交给spring容器管理. 原理 在spring容器启动的时候,通过反射的方式,主动加载(或 ...
- oc/object-c/ios用int还是NSInteger
当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备是32位的还是64位的. 可以看如下定义:#if _ ...
- Surface Mount Package Details
http://www.centralsemi.com/product/packages/index2.php http://www.infineon.com/cms/cn/product/packag ...
- [翻译] SoundManager 音频管理器
SoundManager 音频管理器 https://github.com/nicklockwood/SoundManager Purpose SoundManager is a simple cla ...