反射获取类对象的三种方式
Java代码如下:
方式一:
如果我们有一个实例变量,可以通过该实例变量提供的getClass()方法获取:
String s = “Hello”;
Class cls = s.getClass();
方式二:
如果知道一个class的完整类名,可以通过静态方法Class.forName()获取:
Class cls = Class.forName(“java.lang.String”);
方式三:
直接通过一个class的静态变量class获取:
Class cls = String.class;
package com.reflection;
/**
* @Auther lmy
* @Date 2021/4/29 16:49
* @Description 获取Class对象
*/
public class Test01 {
public static void main(String[] args) throws Exception {
//方式一:通过对象获得
Person person =new Student();
Class c1 = person.getClass();
System.out.println(c1);
//方式二:forName获得
Class c2 = Class.forName("com.reflection.Student");
System.out.println(c2);
//方式三:通过类名.class获得
Class<Student> c3 = Student.class;
System.out.println(c3);
//基本内置类型的包装类都有一个Type属性
Class c4 = Integer.TYPE;
System.out.println(c4);
//获得父类类型
Class c5 = c1.getSuperclass();
System.out.println(c5);
}
}
class Person {
String name;
public Person() {
}
public Person(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
'}';
}
}
class Student extends Person {
public Student() {
this.name = "学生";
}
}
class Teacher extends Person {
public Teacher() {
this.name = "老师";
}
}
运行结果:
资料引用:廖雪峰官方网站-class类