Java反射详解篇--一篇入魂

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类

  1. Class类和String类都是被final关键字修饰的类,是不可以被继承的类;

    以上是 Java反射详解篇--一篇入魂 的全部内容, 来源链接: utcz.com/z/394964.html

回到顶部