反射
反射的概述
获取class对象的三种方式
代码实现
package myreflect1;
public class MyReflectDemo1 {
public static void main(String[] args) throws ClassNotFoundException {
//1.第一种方式
//全类名:包名+类名
//最为常用
Class clazz1 = Class.forName("myreflect1.Student");
//2.第二种方式
//一般更多是当做参数进行传递
Class clazz2 = Student.class;
//3.第三种方式
//当我们已经有了这个类的对象时,才可以使用
Student s=new Student();
Class clazz3 = s.getClass();
System.out.println(clazz1==clazz2);//true
System.out.println(clazz3==clazz2);//true
}
}
反射获取构造方法
代码演示
package myreflect2;
public class Student {
private String name;
private int age;
public Student() {
}
public 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 "Student{name = " + name + ", age = " + age + "}";
}
}
package myreflect2;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Parameter;
public class MyReflectDemo1 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
/*
Class类中用于获取构造方法的方法
Constructor<?>[] getconstructors()
Constructor<?>[] getDeclaredconstructors()
Constructor<T> getConstructor(class<?>... parameterTypes)
Constructor<T> getDeclaredconstructor(class<?>... parameterTypes)
Constructor类中用于创建对象的方法
T newInstance(object... initargs)
setAccessible(boolean flag)
*/
//1.获取class字节码文件对象
Class clazz=Class.forName("myreflect2.Student");
//2.获取构造方法
/*Constructor[] cons1 = clazz.getConstructors();
for (Constructor con : cons1) {
System.out.println(con);
}
Constructor[] cons2 = clazz.getDeclaredConstructors();
for (Constructor con : cons2) {
System.out.println(con);
}*/
/*Constructor con1 = clazz.getDeclaredConstructor();
System.out.println(con1);
Constructor con2 = clazz.getDeclaredConstructor(String.class);
System.out.println(con2);
Constructor con3 = clazz.getDeclaredConstructor(int.class);
System.out.println(con3);*/
Constructor con4 = clazz.getDeclaredConstructor(String.class,int.class);
/*int modifiers = con4.getModifiers();
System.out.println(modifiers);
Parameter[] parameters = con4.getParameters();
for (Parameter parameter : parameters) {
System.out.println(parameter);
}*/
//暴力反思:表示临时取消权限校验
con4.setAccessible(true);
Student stu = (Student) con4.newInstance("张三", 23);
System.out.println(stu);
}
}
反射获取成员变量
反射获取成员方法
获取方法抛出的异常

Method类中用于创建对象的方法

result获取的是方法的返回值
反射的作用
