
介绍反射及作用
- 反射(Reflect)是在运行时动态访问类与对象的技术
- 反射是JDK1.2版本后的高级特性,隶属于java.lang.reflect
- 大多数Java框架都基于反射实现参数配置、动态注入等特性
反射四个核心类
Class类
- Class是JVM中代表“类和接口”的类
- Class对象具体包含了某个特定类的结构信息
- 通过Class对象可获取对应类的构造方法/方法/成员变量

Constructor构造方法类
- Constructor类是对Java类中的构造方法的抽象
- Constructor对象包含了具体类的某个具体构造方法的声明
- 通过Constructor对象调用带构造方法创建对象

Method方法类
- Method对象值代某个类中的方法的描述
- Method对象使用classObj.getMethod()方法获取
- 通过Method对象调用指定对象的应用方法

Field成员变量类
- Field对应某个具体类中的成员变量的声明
- Field对象使用classObj.getField()方法获取
- 通过Field对象可为某对象成员变量赋值/取值

#### getDeclared系列方法说明
- getDeclaredConstructor(s) | Method(s) | Field(s)获取对应对象
- getConstructor(s) | Method(s) | Field(s)只能获取public对象
- 访问非作用域内构造方法、方法、成员变量,会抛出异常
产生异常
ClassNotFoundException
:类名与类路径书写错误时抛出“累无法找到”异常InstantiationException
:非法访问异常,当在作用域外访问对象方法或成员变量时抛出IllegalAccessException
:当对象无法被实例化,抛出“实例化异常”NoSuchMethodException
:没有找到与之对应的格式的方法InvocationTargetException
:当被调用方法的内部抛出了异常而没有被捕获时NoSuchFieldException
:没有找到成员变量时跑出的异常
反射在项目中的应用
设置国家化配置文件config.properties
language=pers.hua.i18n.Zhcn
创建国家化接口并调用接口
public interface I18N {
public String say();
}
public class Zhcn implements I18N {
@Override
public String say() {
return "生命不息奋斗不止!";
}
}
创建Application
public class Application {
public static void main(String[] args){
public static void say() {
Properties properties = new Properties();
String configPath = Application.class.getResource("/config.properties").getPath();
try {
configPath = new URLDecode().decode(congigPath,"UTF-8");
properties.load(new FileInputStream(configPath));
String language = configPath.getProperty("language");
I18N i18n = (I18N)class.forName(language).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END