Java反射详解篇--一篇入魂
1.反射概述
Java程序在运行时操作类中的属性和方法的机制,称为反射机制。
一个关键点:运行时
一般我们在开发程序时,都知道自己具体用了什么类,直接创建使用即可。但当你写一些通用的功能时没办法在编写时知道具体的类型,并且程序跑起来还会有多种类型的可能,则需要在运行时动态的去调用某个类的属性和方法,这就必须使用反射来实现。
例子说明:
Father f = new Children();
编译时变量f 为Father类型,运行时为Children类型;
public void demo(Object obj){ // 不知道调用者传什么具体对象
……
}
编译时demo方法参数类型为Object,一般有两种做法
第一种做法是知道参数类型有哪几种情况,可以使用instanceof运算符进行判断,再利用强制类型转换将其转换成其运行时类型的变量即可。
第二种做法是编译时根本无法预知该对象和类可能属于哪些类,程序只依靠运行时信息动态的来发现该对象和类的真实信息,这就必须使用反射。
那反射是怎么做到在运行时获取类的属性和方法的呢?
理解类的加载机制的应该知道,当java文件编译成.class文件,再被加载进入内存之后,JVM自动生成一个唯一对应的Class对象,这个Class是一个具体的类,这个Class类就是反射学习的重点。反射的操作对象就是这个Class类,通过Class类来获取具体类的属性和方法。
2.Class类
Class 类是用于保存类或接口属性和方法信息的类,就是保存类信息的类,它类名称就叫 Class。
2.1.理解Class类
Class类和构造方法源码
public final class Class<T> implements java.io.Serializable, GenericDeclaration,
Type,
AnnotatedElement {
private final ClassLoader classLoader;
private Class(ClassLoader loader) {
classLoader = loader;
}
……
}
简单分析下Class类
Class类和String类都是被final关键字修饰的类,是不可以被继承的类; 以上是 Java反射详解篇--一篇入魂 的全部内容, 来源链接: utcz.com/z/394964.html