首页 > 代码库 > JAVA---反射
JAVA---反射
当用到一个类对象的时候,JVM会把此类的Class字节码文件加载到内存中(只加载一次),JVM会此类的信息封装成对象。利用封装好的对象获取类的相关信息进行构造类或者调用方法等,叫做反射。
反射的目的和作用就是为了开发者写出更通用的代码。
- 把类名称,继承,实现封装成Class对象
- 把类的构造方法封装成Constructor对象
- 把类的成员属性封装成File对象
- 把类的普通方法、返回值封装成Method对象
举例
package com.myjava.reflect;public class Person{ private int _age; private String _name; public int get_age() { return _age; } public void say() { System.out.println(_name + "今年" + _age + "岁了"); } public void set_age(int _age) { this._age = _age; } public Person(int _age, String _name) { super(); this._age = _age; this._name = _name; } public String get_name() { return _name; } public void set_name(String _name) { this._name = _name; }}
主程序
package com.myjava.reflect;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;/** * @ClassName: ReflectTest * @Description: TODO(这里用一句话描述这个类的作用) * @author 刘阳阳 * @date 2016年10月5日 上午9:20:32 * */public class ReflectTest{ public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException { // 根据类名进行加载,此加载不进行对象构造生成 Class myClass = Class.forName("com.myjava.reflect.Person"); // 这个需要导入对应的Person // Class myClass = Person.class; // 这个是进行实例化后获取对应的类信息 // Class myClass = new Person(11, "honey").getClass(); System.err.println(myClass.getName()); // 获取类名称 Field[] Fields = myClass.getDeclaredFields();// 获取成员字段 for (Field f : Fields) { System.err.println(f.getName());// 获取成员名称 System.err.println(f.getModifiers());// 声明的权限 default private public // protected System.err.println(f.getType());// 获取成员类型 } Constructor[] constructors = myClass.getDeclaredConstructors(); for (Constructor con : constructors) { System.err.println(con.getName()); System.err.println(con.getModifiers());// 声明的权限 default private // public protected System.err.println(con.getParameterCount());// 参数个数 System.err.println(con.getParameters()); // 参数集合 } // 调用此对象中的SAY方法,构造参数位_age=11,_name=honey myClass.getMethod("say") .invoke(myClass.getConstructor(int.class, String.class) .newInstance(11, "honey"), null); }}
程序执行结果为
com.myjava.reflect.Person
_age
2
int
_name
2
class java.lang.String
com.myjava.reflect.Person
1
2
[Ljava.lang.reflect.Parameter;@15db9742
honey今年11岁了
JAVA---反射
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。