java_反射
来源:互联网 发布:身份证拍照扫描软件 编辑:程序博客网 时间:2024/05/22 00:32
1、获取类对象
1)已知对象的情况下,可以使用 Class clazz= obj.getClass();
2) 已知类的情况下,使用 Class clazz = String.class;//类的class属性,不是方法
3) 已知类的全限定类名,Class clazz = Class.forName(" java.lang.Integer");
2、获取Class对象的信息:
1)访问Class对应的类所包含的构造方法:
a):Constructor getConstructor(Class[] params); 返回此Class对象所表示的类的指定的public构造方法,params参数是按声明顺序标志给方法的参数类型的Class 对象的数组,构造方法的参数的类型与params所指定的参数类型所匹配。例如:Constructor con = clazz.getConstructor(String.class,Integer.class);
b):Constructor[] getConstructors(); 返回此Class对象所表示类的所有的public构造方法;
c):Constructor getDeclaredConstructor(Class[] params); 返回该对象的所有的指定参数的构方法;
d):Constructior getDeclaredConstructors(); 返回所有的构造方法;
2)访问Class对应类所包含的方法:
a):Method getMethod(String name,Class[] params); 返回此Class对象所表示的类的指定的public方法,name参数用于指定方法名称, params参数是按声明顺序标志该方法参数类型的class数组; 例如:clazz.getMethod(“info”,String.class); 或者 clazz.getMethod("info",String.class,Integer.class);
b):Methods getMethods(); 获得所有的public的方法;
c):Methods getDeclaredMethod(String name,Class[].params);
d):Methods getDeclaredMethods();
3):访问Class 对应的类所包含的属性:
a)Field getField(String name); 返回此Class对象所表示的类的指定的public属性的,name用于指定参数的名称。例如:clazz.getField("age");
b):Fields getFields();
c):Field getDeclaredField(String name);
d):Fields getDeclaredFields():
//创建对象
public static void main(String[] args) throws Exception {
//利用反射来获取类
Class clazz = Date.class;
Date date = (Date) clazz.newInstance();
System.out.println(date.toString());
//利用构造方法来创建对象
Constructor con = clazz.getConstructor(long.class);
Date date1 = (Date)con.newInstance(1990);
System.out.println(date1.toString());
}
//访问对象的属性,方法
package reflect;import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Demo2 {
public static void main(String[] args) throws Exception {
Class clazz = Student.class;
Student s = (Student) clazz.newInstance();
//得到name属性
Field f = clazz.getDeclaredField("name");
//取消权限检查
f.setAccessible(true);
//设置name的属性值
f.set(s, "张三");
Field add = clazz.getDeclaredField("address");
add.setAccessible(true);
add.set(s, "河南郑州");
Field age = clazz.getDeclaredField("age");
age.setAccessible(true);
age.setInt(s, 18);
System.out.println(s);
//访问student的方法
Method setName = clazz.getMethod("setName",String.class);
setName.invoke(s, "lisi");
System.out.println(s);
}
}
class Student{
@Override
public String toString() {
return "Student [name=" + name + ", address=" + address + ", age="
+ age + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
private String name;
private String address;
private int age;
}
- Java_反射
- JAVA_反射
- java_反射
- java_反射
- JAVA_反射
- Java_反射
- Java_反射
- java_反射
- java_什么是反射?
- Java_反射机制
- java_反射日记
- Java_反射机制
- Java_反射(reflect)
- Java_反射_内省JavaBean
- Java_反射的基本应用
- Java_反射技术_简述
- 第十三章:Java_反射机制
- java_反射个人理解简记
- Servlet总结-Request
- 计算天数(c语言)
- es索引管理
- Python多进程
- 15个常用JS优化代码技巧
- java_反射
- 2016android在线测试15-图像 camera2
- shiro使用与我遇到的问题
- Netty【二】 第一个Netty应用
- Prim算法(普里姆算法)加点法-Prim算法
- LeetCode: Longest Common Prefix, Valid Parentheses
- Qt中QTabWidget隐藏某些tab
- 致远电子IMX283A内核编译
- 效率工具:常用