java反射机制浅析
来源:互联网 发布:暗影格斗2mac 编辑:程序博客网 时间:2024/06/15 22:02
本文主要是概念梳理,深入研究待续
程序运行时接收到外部传入的一个对象,该对象的编译类型是Object,如需要调用该对象运行类型的方法,若编译和运行都知道,使用instantof判断后强转即可,若编译时无法预知该对象属于什么类,程序只能靠运行时发现对象的真实信息,这就必须使用反射了
java程序中各个java类属于同一类事物,描述这类事物的类名就是Class,即字节码。
获取各个类的Class(字节码)有三种方式
1.类名.class
2.对象.getClass()
3.Class.forName(String className)静态方法,className表示全限定名;如String的全限定名:java.lang.String;
反射就是把java类中的各种成分映射成相应的java类,一个类中的组成部分,成员变量,方法,构造方法,包等等信息也用一个个的Java类来表示。Java的Class类显然要提供一系列的方法,来获得其中的变量、方法、构造方法,修饰符、包等信息,这些信息就是用相应的类的实例对象来表示,他们分别是 Filed Method Construct Package
构造方法的反射应用
Constructor类,
//得到全部构造器Constructor<?>[] constructors = Person.class.getConstructors();//得到指定构造器,必须将构造器参数传入 try { Constructor constructor =Person.class.getConstructor(String.class, int.class); } catch (NoSuchMethodException e) { e.printStackTrace(); }
成员变量的反射
Person person = new Person(); Field[] fields = person.getClass().getFields(); try { Field nameField = person.getClass().getField("name"); String name = (String) nameField.get(person); } catch (Exception e) { e.printStackTrace(); }
/** * 所有的String 成员变量都只截取前六位 * @param obj */ public void changeFild(Object obj) { Field[] declaredFields = obj.getClass().getDeclaredFields(); for (Field field:declaredFields){ field.setAccessible(true);//设置成员变量可访问(暴力反射) if (field.getType()==String.class){ try { String str= (String) field.get(obj);//读取成员变量的值 String substring = str.substring(0, 6); field.set(obj,substring);//重新设置成员变量的值 } catch (IllegalAccessException e) { e.printStackTrace(); } } } }
try { Constructor<Person> constructor = Person.class.getConstructor(String.class, int.class); Person peron = constructor.newInstance("zhangsan", 16); Method method = person.getClass().getMethod("setName",String.class); method.invoke(person,"zhangsna"); } catch (Exception e) { e.printStackTrace(); }
0 0
- 浅析Java反射机制
- Java 反射机制浅析
- Java 反射机制浅析
- Java 反射机制浅析
- Java 反射机制浅析
- Java 反射机制浅析
- 浅析java反射机制
- Java反射机制浅析
- java反射机制浅析
- Java 反射机制浅析
- Java反射机制浅析
- Java 反射机制浅析
- java反射机制浅析
- Java反射机制浅析
- Java 反射机制浅析
- Java 反射机制浅析
- 浅析java反射机制
- Java反射机制浅析
- github优秀开源项目大全-iOS
- fork和pause等系统调用的实现原理(Linux0.11内核)
- Android武器库
- Spring使用之:Quartz定时任务为什么会被阻塞
- 前端安全
- java反射机制浅析
- 2016多校训练Contest5: 1010 Prefix hdu5790
- metalab导入不同的文件
- 半平面交
- dp与px转换工具类
- Python的logging模块在Django中的应用
- dubbo集群配置
- 兼容性问题
- DFS_1