反射
类加载机制
当一个class文件被加载进内存时,在JVM中将形成一份描述该class文件结构的元信息对象Class,通过该对象可以获知class文件的结构信息:如构造器,字段,方法等。虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。总而言之,class文件被虚拟机加载进内存产生Class对象的过程就是类加载机制
反射的概念
既然万物皆对象,那么类名,构造器,字段,方法等这些信息当然也需要封装成一个对象,这就是Class类,Constructor类,Method类,Field类,通过这些类的实例对象就可以得到相应的信息,甚至可以不用new关键字就可以创建一个实例,并设置或获取字段的值,执行对象中的方法,这就是反射技术
反射就是在运行期间,动态的获取类中的成员信息(构造器,字段,方法)的过程。
一、获取Class类对象
Student类(测试使用的类)
public class Student {
private int age;
private String name;
public String sex;
int age1;
public String address;
public Student() {
}
public Student(int age) {
this.age = age;
}
public Student(int age, String name) {
this.age = age;
this.name = name;
}
private Student(int age, String name, String sex) {
this.age = age;
this.name = name;
this.sex = sex;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
'}';
}
//有参有返回值
public String method1(String name){
System.out.println("有参有返回值的方法被执行力了。。。");
return name;
}
//多参有返回值
public String method2(String name,int age){
System.out.println("多参有返回值的方法被执行力了。。。"+age);
return name;
}
//多参无返回值
private void method3(String name,int age){
System.out.println("多参无返回值的方法被执行力了。。。"+name+" "+age);
}
//有参无返回值
void method4(int age){
System.out.println("有参无返回值的方法被执行力了。。。"+age);
}
//无参有返回值
public String method5(){
System.out.println("无参有返回值的方法被执行力了。。。");
return name;
}
//无参无返回值
public void method6(){
System.out.println("无参无返回值的方法被执行力了。。。");
}
//静态方法
public static void method7(String name){
System.out.println("静态方法被执行了。。。。。"+name);
}
//可变参数方法
public void method8(int... args){
System.out.println("可变参数的方法被执行了。。。。");
for(int i:args)