java反射机制
来源:互联网 发布:linux 禁用ping 编辑:程序博客网 时间:2024/06/07 22:15
Class
}
提供了字节码文件对象,提供了获取字节码文件中的内容,比如:名称,字段,函数
反射就是通过该类进行完成的。
Java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
package com.dong.bean;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/**
* 要想对字节码文件进行解剖,必须获取字节码文件对象
* 获取字节码文件对象的三种方式:
* 1:Object类中的getClass()方法,想要用这种方式,必须要明确具体的类并创建对象。
* 2:任何数据类型都具备一个静态的属性.class来获取对应的Class对象。相对来说比较简单,但是还是要明确用到类中的静态成员。
* 3:只要通过给定的类的字符串名称就可以获取该类,更为扩展。可以使用Class中的方法完成。该方法就是Class.forName(),这种方式只要有名称即可,更为方便,扩展性更强。
*/
public class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
/**
* 早期:new的时候,先根据被new的类的名称寻找该类的字节码文件,并加载进内存;
* 同时创建该字节码文件对象,并接着创建该字节码文件的对应的Person对象。
*/
com.dong.bean.Person p = new com.dong.bean.Person();
/**
* 现在:找寻该名称类文件,加载进内存,并产生Class对象。
*/
Class clazz = Class.forName("com.dong.bean.Person");
Object obj = clazz.newInstance();//创建该Class对象的实例,调用空参的构造函数
Constructor constructor = clazz.getConstructor(int.class,String.class);//获取指定参数类型的构造函数对象
Object obj1 = constructor.newInstance(11,"lili");
clazz.getFields();//clazz.getField("name") 只能获取共有的字段
Field field = clazz.getDeclaredField("age");//可以获取所有的字段
field.setAccessible(true);//对私有的字段的访问取消权限限制,暴力访问
System.out.println(field.get(obj1));//获取字段属性的值
field.set(obj1, 89);
System.out.println(field.get(obj1));//设置字段属性的值 }
} 获取对象方法并执行
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("com.dong.bean.Person");
Method[] methods = clazz.getMethods();//获取的都是共有的方法 包含父类中的方法
methods = clazz.getDeclaredMethods();//获取类自身的方法
for(Method m : methods ){
System.out.println(m);
}
Method method = clazz.getMethod("show",null);//获取空参数方法
Constructor constructor = clazz.getConstructor(int.class,String.class);//得到指定参数的构造函数
method.invoke(constructor.newInstance(25,"aaaa"),null );//执行method对象的调用函数 传入参数 调用该方法的对象,该方法需要的参数
Method paramMethod = clazz.getMethod("paramMethod", int.class);
paramMethod.invoke(clazz.newInstance(), 26);
Method priMethod = clazz.getDeclaredMethod("priMethod", null);//只能获取 类自身的方法
priMethod.setAccessible(true);//私有的方法需要先设置为可访问的
priMethod.invoke(clazz.newInstance(), null); 0 0
- 【反射】JAVA反射机制
- 【Java】JAVA反射机制
- Java 反射机制[Field反射]
- Java 反射机制[Method反射]
- Java反射机制笔记-反射机制
- java的反射机制
- Java的反射机制
- java反射机制详解!
- Java反射机制
- Java的反射机制
- java 反射机制--侯捷
- java反射机制
- java反射机制
- [候捷]Java反射机制
- java 反射机制
- java 反射机制初探
- 关于Java反射机制
- java反射机制
- Java中HashSet的用法
- 随笔《HTML》
- java内存结构
- 第2条:遇到多个构造器参数时要考虑用构建器
- Populating Next Right Pointers in Each Node II - LeetCode 117
- java反射机制
- SQL语句
- Java中String转换为int
- 网络编程--TCP
- Java反射机制二
- OC中声明变量的几种方式
- Java中的位运算
- 第十一周项目二--职员有薪水了(char*型)
- java文件切割与合并