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;
}

原创粉丝点击