目录
1.获取class 的三种方式
2.利用反射获取构造方法
3.利用反射获取成员变量
4.利用反射获取成员方法
1.获取class 的三种方式
全类名怎么找?
全类名=报名+类名
package MyReflect;
public class Student {
private String id;
private String name;
private int age;
private String address;
public Student(String id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public Student() {
}
/**
* 获取
* @return id
*/
public String getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
/**
* 获取
* @return address
*/
public String getAddress() {
return address;
}
/**
* 设置
* @param address
*/
public void setAddress(String address) {
this.address = address;
}
public String toString() {
return "Student{id = " + id + ", name = " + name + ", age = " + age + ", address = " + address + "}";
}
public String toMess(){
return id+" "+name+" "+age+" "+address;
}
}
package MyReflect;
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
//1 常用
Class<?> clazz1= Class.forName("MyReflect.Student");
System.out.println(clazz1);
//2 当作参数
Class clazz2=Student.class;
System.out.println(clazz2);
System.out.println(clazz1 == clazz2);
//3 当有对象的时候
Student s1=new Student();
Class clazz3=s1.getClass();
System.out.println(clazz3);
System.out.println(clazz1 == clazz3);
}
}
2.利用反射获取构造方法
package MyReflect;
public class Student{
private String name;
private int age;
public Student() {
}
protected Student(String name) {
this.name = name;
}
protected Student(int age) {
this.age = age;
}
private Student(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Student111{name = " + name + ", age = " + age + "}";
}
}
package MyReflect;
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
//1.获取字节码
Class<?> clazz1= Class.forName("MyReflect.Student");
System.out.println(clazz1);
//2.获取构造方法
Constructor[] constructor1= clazz1.getConstructors();
for (Constructor constructor:constructor1) {
System.out.println(constructor);
}
}
}
package MyReflect;
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
//1 常用
Class<?> clazz1= Class.forName("MyReflect.Student");
System.out.println(clazz1);
Constructor[]constructor1= clazz1.getDeclaredConstructors();
for (Constructor constructor:constructor1) {
System.out.println(constructor);
}
}
}
package MyReflect;
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
//1 常用
Class<?> clazz1= Class.forName("MyReflect.Student");
System.out.println(clazz1);
Constructor constructor1= clazz1.getDeclaredConstructor(String.class);
System.out.println(constructor1);
}
}
3.利用反射获取成员变量
package MyReflect;
import java.lang.reflect.Field;
import java.net.UnknownHostException;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException {
//获取字节码文件
Class clazz=Class.forName("MyReflect.Student");
System.out.println("class:"+clazz);
Field[] fields=clazz.getDeclaredFields();
for (Field field : fields) {
System.out.println(field);
}
}
}
package MyReflect;
import java.lang.reflect.Field;
import java.net.UnknownHostException;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException {
//获取字节码文件
Class clazz=Class.forName("MyReflect.Student");
System.out.println("class:"+clazz);
Field fields=clazz.getDeclaredField("name");
//fields.setAccessible(true);
System.out.println(fields);
}
}
对于private的变量,要
namefield.setAccessible(true);
package MyReflect;
public class Student{
private String name;
private int age;
public Student() {
}
protected Student(String name) {
this.name = name;
}
protected Student(int age) {
this.age = age;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Student111{name = " + name + ", age = " + age + "}";
}
}
package MyReflect;
import java.lang.reflect.Field;
import java.net.UnknownHostException;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException, IllegalAccessException {
//获取字节码文件
Class clazz=Class.forName("MyReflect.Student");
System.out.println("class:"+clazz);
Field namefield=clazz.getDeclaredField("name");
System.out.println(namefield);
Student student=new Student("leo",11);
// namefield.setAccessible(true);
Object value=namefield.get(student);
System.out.println("name:"+value);
}
}
4.利用反射获取成员方法
package MyReflect;
import java.lang.reflect.Method;
import java.net.UnknownHostException;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException, IllegalAccessException {
//获取字节码文件
Class clazz=Class.forName("MyReflect.Student");
System.out.println("class:"+clazz);
Method[] methods=clazz.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method);
}
}
}
package MyReflect;
import java.lang.reflect.Method;
import java.net.UnknownHostException;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException, IllegalAccessException {
//获取字节码文件
Class clazz=Class.forName("MyReflect.Student");
System.out.println("class:"+clazz);
Method[] methods=clazz.getMethods();
for (Method method : methods) {
System.out.println(method);
}
}
}
package MyReflect;
import java.lang.reflect.Method;
import java.net.UnknownHostException;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException, IllegalAccessException {
//获取字节码文件
Class clazz=Class.forName("MyReflect.Student");
System.out.println("class:"+clazz);
Method method=clazz.getMethod("getName");
System.out.println(method);
}
}
package MyReflect;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.UnknownHostException;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException, IllegalAccessException, InvocationTargetException {
Student student = new Student("leo",11);
//获取字节码文件
Class clazz=Class.forName("MyReflect.Student");
System.out.println("class:"+clazz);
Method method=clazz.getDeclaredMethod("eat", String.class);
System.out.println(method);
method.invoke(student,"汉堡包");
}
}
package MyReflect;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.UnknownHostException;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, UnknownHostException, NoSuchFieldException, IllegalAccessException, InvocationTargetException {
Student student = new Student("leo",11);
//获取字节码文件
Class clazz=Class.forName("MyReflect.Student");
System.out.println("class:"+clazz);
Method method=clazz.getDeclaredMethod("eat", String.class);
method.setAccessible(true);
System.out.println(method);
method.invoke(student,"汉堡包");
}
}