Java高级-02.反射-认识反射、获取类
一.何为反射
所谓反射,就是加载类,并将类中的各种成分解剖出来,如成员变量、方法、构造器等。然后对这些成员变量、方法、构造器等进行操作。
当我们使用idea时,出现这种提示,如.study()方法的提示就是使用反射解构出来的。
二.反射学什么
三.加载类,获取类的字节码文件
我们首先定义一个Student类,
package com.njau.d2_reflect;
public class Student {
private String name;
private int age;
private char sex;
private double height;
private String hobby;
public Student(String name, int age, char sex, double height, String hobby) {
this.name = name;
this.age = age;
this.sex = sex;
this.height = height;
this.hobby = hobby;
}
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
", height=" + height +
", hobby='" + hobby + '\'' +
'}';
}
}
接着我们通过以上获取Class对象的三种方式来获取Student类的类对象
首先第一种方式是通过类名.class的方式获取:
第二种方式是通过Class.forname(全类名)的方式获取:
第三种方式是通过该类的实现类对象调用.getClass()方法获取。
package com.njau.d2_reflect;
/**
* 目标:了解反射并掌握获取Class对象的3种方式
* 反射:
* 反射就是:加载类,并允许以编程的方式解剖类的各种成分(成员变量、方法、构造器等)
* 获取Class对象的三种方式
* 1、Class c1 = 类名.class
* 2、调用Class提供方法:public static Class forName(String package);
* 3、Object提供的方法:public Class getClass(); Class c3 = 对象.getClass();
*/
public class Test1Class {
public static void main(String[] args) throws Exception {
Class c1 = Student.class;
System.out.println(c1.getName()); // com.njau.d2_reflect.Student(全类名)
System.out.println(c1.getSimpleName()); // Student
Class c2 = Class.forName("com.njau.d2_reflect.Student");
System.out.println(c2); // class com.njau.d2_reflect.Student
System.out.println(c2==c1); // true
Student s = new Student();
Class c3 = s.getClass();
System.out.println(c3); // class com.njau.d2_reflect.Student
System.out.println(c3 == c2); // true
}
}
我们通过验证可以知道获取到的都是同一个Student类对象,因为一个类只能存在一个。