文章目录
- 一、什么是java反射机制?
- 二、Class类有什么特点?
- 三、获取Class类的实例化对象
-
- 1.forName方法
- 2.类名.class
- 3.包装类.TYPE
- 4.getClass方法
- 5.元素类型[].class
- 6.调用某个类的Class类实例化对象的getSuperClass方法
一、什么是java反射机制?
Java反射机制是在运行状态中,对于任何一个类我们都可以调用其中的属性和方法,对于任意一个对象我们都可以调用它的属性和方法,这种动态操作类和对象的属性和方法的机制叫Java反射机制。
Java反射机制为了实现对成员变量,普通方法,构造方法的操作,需要借助Java自身提供的java.lang包下的Class类和java.lang.reflect包下反射API
二、Class类有什么特点?
Class类是Java反射机制的入口
如果封装了一个类或接口的运行时信息,可以通过调用Class类来获取这些信息
按住Ctrl键再将鼠标浮到Class上可以查看Class类的信息
①该类在java.lang包中
可以通过查看Class类的信息(26行)看到下图
也可以通过下列代码查出
public class Test {
public static void main(String[] args) {
System.out.println(Class.class);//获取Class类的实例
}
}
执行结果证明Class类在java.lang包下
②该类被final修饰,该类不可以被子类继承(在Class类的119行可以看到下图)
该类不可以被子类继承
③该类实现了Serializable接口(119行)
④该类的构造方法用private修饰,不能通过new关键字创建该类的对象(137行)
三、获取Class类的实例化对象
Class类不能通过new关键词创建对象
1.forName方法
通过Class类静态forName(“类包名.类名”)获取Class实例
public class Test{
public static void main(String[] args) {
try {
Class<?> class1 = Class.forName("java.lang.Class");//如果泛型不确定?确定
System.out.println(class1);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
2.类名.class
public class Test{
public static void main(String[] args) {
Class<Student> student = Student.class;
System.out.println(student);
}
}
class Student{
}
3.包装类.TYPE
如果是基本数据类型,可以通过包装类.TYPE获取Class类的实例化对象,也可以通过基本数据类型.class获取
①
public class Test{
public static void main(String[] args) {
Class<Boolean> class1 = Boolean.TYPE;
System.out.println(class1);
}
}
②
public class Test{
public static void main(String[] args) {
Class<Boolean> cl = Boolean.class;
System.out.println(cl);
}
}
4.getClass方法
public class Test{
public static void main(String[] args) {
Class<?> student = new Student().getClass();
System.out.println(student);
}
}
class Studnet{
}
5.元素类型[].class
public class Test{
public static void main(String[] args) {
Class<String[]> clazz = String[].class;
System.out.println(clazz);
}
}
6.调用某个类的Class类实例化对象的getSuperClass方法
public class Test{
public static void main(String[] args) {
Class<?> clazz = Student.class.getSuperclass();
System.out.println(clazz);
}
}
class Studnet{
}