Java反射机制
来源:互联网 发布:弱矩阵项目管理 编辑:程序博客网 时间:2024/05/05 19:50
反射是一种语言在运行时检查和动态调用类、方法、属性等的能力。反射就是通过class操作构造器,属性,方法等
import java.lang.annotation.Annotation;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Type;/** * 反射 * Created by wangbo on 11/28/16. */class Test{ public String name ; public String getName() { return name; } public void setName(String name) { this.name = name; } public void say(String name){ System.out.println(name+"hello"); } private void eat(String food){ System.out.println("eat"+food); } public Test() { } public Test(String name) { this.name = name; }}public class Reflect { public static void main(String[] args) throws Exception { /** * 四种获取class的方式,可以指定泛型,也可以不指定,不声明泛型 */ //通过全限定名获得class Class<?> clazz = Class.forName("Test"); //通过 类名. 获得class Class<?> clazz1 = Test.class; //通过 对象.getClass 获得class (多次一举) Test test = new Test(); Class<?> clazz2 = test.getClass(); //通过类加载器获得class,(类加载器是负责加载类的对象) //获取系统类加载器--->ClassLoader.getSystemClassLoader(); //获取当前类的类加载器--->Reflect.class.getClassLoader(); //获取当前线程的类加载器 ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); Class clazz3 = classLoader.loadClass("java.util.Date"); /** * 通过class获取类的构造器(constructor),方法(method,),属性(field,) * declareds的方法不包括继承的 */ //获取全部方法(仅限于public) Method[] methods = clazz.getMethods(); //获取指定方法,需要指定方法名字,和指定参数类型(没有参数就写null) Method method = clazz.getMethod("say",String.class); //获取所有访问权限的方法 clazz.getDeclaredMethods(); //获取所有权限的指定名称,参数类型的方法 clazz.getDeclaredMethod("eat",String.class); //调用(invoke)获取到的方法,第一个参数添加指定的对象调用,第二个参数添加方法需要的参数 method.invoke(test,"wangbo"); //获取构造器和字段的方法大同小异,都有4个方法 //获取注解,获取该方法上的全部注解 Annotation[]annotations = method.getDeclaredAnnotations(); //获取语言修饰符,返回结果是int,常用的public=1,private=2具体可以去Modifier类里面看 int modifiers = method.getModifiers(); //获取包 Package pg = Test.class.getPackage(); //还有一些不太常用的方法可以自己去查Api比如 cast() 把对象转换成class 这个方法比较diao /** * 通过class创建一个实例,可以强转指定类型,也可以用object */ //通过class自带的newInstance方法创建一个实例,这种方法必须保证类有一个默认的无参数构造器 Object obj = clazz.newInstance(); Test test1 = (Test) clazz.newInstance(); //通过class获取构造器,构造器指定参数.class,创建一个实例 Constructor<?> constructor = clazz.getDeclaredConstructor(String.class); Object obj1 = constructor.newInstance("wangbo"); /** * 通过class操作field的值 */ //获取字段 Field field = clazz.getField("name"); //设置字段属性值,第一个参数为指定对象,第二个参数为设定的新值 field.set(test,"zhangsan"); //获取字段的类型 Type type= field.getGenericType(); //获取field字段的名字 String fieldName = field.getName(); }}
如有错误,请多包含,互相进步:)
1 0
- 【反射】JAVA反射机制
- 【Java】JAVA反射机制
- Java 反射机制[Field反射]
- Java 反射机制[Method反射]
- Java反射机制笔记-反射机制
- java的反射机制
- Java的反射机制
- java反射机制详解!
- Java反射机制
- Java的反射机制
- java 反射机制--侯捷
- java反射机制
- java反射机制
- [候捷]Java反射机制
- java 反射机制
- java 反射机制初探
- 关于Java反射机制
- java反射机制
- 前端插件
- Android软件开发之获取通讯录联系人信息(二十九)
- Centos7安装mysql
- 润乾V4报表批量打印
- Android Framework 记录之一
- Java反射机制
- IDEA(jetbrain通用)优雅级使用教程
- Java Web程序开发入门--读书笔记(四)
- Android 常用适配器总结
- Android Framework 记录之二
- 各大机器学习包汇总(python版,持续更新)
- 文件读取
- ijkplayer
- 润乾报表部署中的常见问题–http 500 内部服务器错误解析