反射系列传送门
什么是Class类
Class类是Java 反射机制的入口,封装了一个类或接口的运行时信息,通过调用Class类的方法可以获取这些信息。
如果将类看作一个对象,那么这个“对象”的抽象化就是Class。
Class类特点
- 该类在java.lang包中,因此在使用时不必引包
- 该类被final所修饰,即该类不可以被子类继承
- 该类实现了Serializable接口
- 该类的构造方法被private所修饰,即不能通过new关键字创建该类的对象
如何获取Class类对象
现有学生类如下:
public class Student {
String name;
Integer id;
public Student() {
}
public Student(String name) {
this.name=name;
}
private Student(Integer id) {//Integer为int类型的包装类
this.id=id;
}
public void sleep() {
System.out.println(name+" go to sleep ");
}
public void say() {
System.out.println("学号为:"+id);
}
}
1、通过Class.forName("包名.类名")获取Class类实例
package test;
public class Test {
public static void main(String[] args) {
Class clazz=null;
try {
clazz=Class.forName("test.Student");
System.out.println(clazz.getName());//输出获取的Class类对象clazz指向类的名称
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
2、通过使用类名.class获取Class类实例
package test;
public class Test {
public static void main(String[] args) {
Class clazz=null;
clazz=Student.class;//使用类名获取Class类对象
System.out.println(clazz.getName());//输出获取的Class类对象clazz指向类的名称
}
}
3、通过使用对象.getClass()获取Class类实例
package test;
public class Test {
public static void main(String[] args) {
Class clazz=null;
clazz= new Student().getClass();//创建Student类的对象,在使用getClass()方法获取其对应Class类对象
System.out.println(clazz.getName());//输出获取的Class类对象clazz指向类的名称
}
}
4、获取基本数据类型对应的Class的对象:包装类.TYPE
package test;
public class Test {
public static void main(String[] args) {
Class clazz=null;
clazz = Integer.TYPE;
System.out.println(clazz.getName());
}
}
注意:如果错误使用成包装类.class,那么获取的是包装类对应的Class对象。
5、获取数组类型对应class:元素类型 [ ] .class
package test;
public class Test {
public static void main(String[] args) {
Class clazz=null;
clazz = String[].class;
System.out.println(clazz.getName());
}
}
6、获取某个类超类所对应的Class对象:类的Class实例.getSuperClass()
package test;
public class Test {
public static void main(String[] args) {
Class clazz=null;
clazz = Student.class.getSuperclass();
System.out.println(clazz.getName());
}
}