Java反射机制
来源:互联网 发布:nba2k17乔丹动作数据 编辑:程序博客网 时间:2024/05/01 22:49
Java的反射机制是在运行状态中,对于任意一个类,都可以知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能叫做Java的反射机制。反射其实就是加载类,并获取类的各个组成部分。
加载类:
java中有一个Class类用于代表某一个类的字节码。获取class对象的方式有三种:① 调用Class类的forName(),② 通过 类名.class; ③ 对象.getClass();
反射类的组成部分的方法有:
① 获取public类型的各个组成部分:
getConstructor(Class...parameterTypes);
getMethod(String name,Class...parameterTypes);
getField(String name);
② 获取private类型的各个组成部分:
getDeclaredConstructor(Class...parameterTypes);
getDeclaredMethod(String name,Class...parameterTypes);
getDeclaredField(String name);
从类中获取各个组成部分是为了使用该类的各个部分。
使用反射机制,调用Person类中的构造函数,示例代码:
Person:
public class Person {public Person(){System.out.println("Person ");}public Person(String name){System.out.println("Person的姓名为:"+name);}public Person(String name,int age){System.out.println("Person的姓名为:"+name+",年龄为"+age);}private Person(int age){System.out.println("private age"+age);}}Demo:
public class Demo {// 反射无参数的构造函数@Testpublic void test1() throws Exception {Class clazz = Class.forName("cn.itcast.reflect.Person");Constructor c = clazz.getConstructor(null);Person p = (Person) c.newInstance(null);}// 反射带一个参数的构造函数@Testpublic void test2() throws Exception {Class clazz = Class.forName("cn.itcast.reflect.Person");Constructor c = clazz.getConstructor(String.class);Person p = (Person) c.newInstance("zhangsan");}// 反射两个参数的构造函数@Testpublic void test3() throws Exception {Class clazz = Class.forName("cn.itcast.reflect.Person");Constructor c = clazz.getConstructor(String.class, int.class);Person p = (Person) c.newInstance("lisi", 20);}// 反射private的构造函数@Testpublic void test4() throws Exception {Class clazz = Class.forName("cn.itcast.reflect.Person");Constructor c = clazz.getDeclaredConstructor(int.class);// private修饰的只能在类内部调用,但是反射可以通过下面方式调用private修饰的。c.setAccessible(true);// 暴力反射Person p = (Person) c.newInstance(15);}// 反射无参数构造函数的另一种方式,等效于test1@Testpublic void test5() throws Exception {Class clazz = Class.forName("cn.itcast.reflect.Person");Person p = (Person) clazz.newInstance();// 该方法只能调用无参数的构造方法;}}以上代码都是通过junit.Test来测试。运行结果如下:
Person
Person的姓名为:zhangsan
Person的姓名为:lisi,年龄为20
private age15
Person
利用反射机制中的Method执行方法是public Object invoke(Object object,Object... args),其中第一个参数为对象(当反射的是static类型的方法是,对象可以是null),第二个参数为方法所需要的参数。注意:在jdk 1.4时,没有可变参数,通过数组给参数列表传入参数,所以在反射main方法时,在传入参数列表时,① 把传入的数组类型强制转化成Object类型 ② 把传入的数组类型嵌套到Object数组中;
- 【反射】JAVA反射机制
- 【Java】JAVA反射机制
- Java 反射机制[Field反射]
- Java 反射机制[Method反射]
- Java反射机制笔记-反射机制
- java的反射机制
- Java的反射机制
- java反射机制详解!
- Java反射机制
- Java的反射机制
- java 反射机制--侯捷
- java反射机制
- java反射机制
- [候捷]Java反射机制
- java 反射机制
- java 反射机制初探
- 关于Java反射机制
- java反射机制
- CodeForces 264A Escape from Stones dfs
- mac卡,处理方法
- QT系统托盘及托盘菜单
- scala学习笔记:理解stream和view
- C语言中三个基础算法
- Java反射机制
- hdu2586How far away ?
- CodeForces 23A You're Given a String...(字符串处理)
- SSH方式使用root登陆ubuntu14.04
- 探讨OC中字典的存储方式
- 对GCD简单理解及用法
- emacs ido模式
- springMVC与spring集成
- CodeForces 264B Good Sequences dp