【Java】Java中的反射机制(一)


【Java】Java中的反射机制(一)
文章图片
【Java】Java中的反射机制(一)
文章图片
【Java】Java中的反射机制(一)
文章图片
【Java】Java中的反射机制(一)
文章图片
【Java】Java中的反射机制(一)
文章图片
【Java】Java中的反射机制(一)
文章图片
Java中的反射机制(一)1.1、反射的概念Java反射机制是在程序运行状态中 , 对于任意一个类 , 都能够知道这个类的所有属性和方法 , 并且对于任意一个对象 , 都能够调用它的任意一个方法和属性 。 这种动态获取类的信息以及动态调用类的对象方法的功能称为Java的反射机制 。
1.2、反射涉及的对象反射是动态获取类的结构信息 , 涉及的对象含有:Field、Method、Constructor等 。 以及类对象Class 。
1.3、获取类对象的三种方式<1>调用getClass()方法Java中每一个对象都提供了一个getClass()方法 , 用于获取该类的Class对象 。
格式:Class getClass()
注:该方法需要具体的类的实例对象 。
<2>通过静态属性classJava中任何数据类型都提供了一个静态属性class 。
注:如果一个类不能创建对象 , 则不能使用getClass()方法 , 那么就可以使用第二种方式进行获取类对象 。
<3>通过Class提供的静态方法forNameforName(classname)方法是Class类提供的静态方法 , 只需要传递类的全名 , 即可获取到对应的Class对象 。
注:这种方式的优点在于只需要知道类名称即可 , 不需要涉及具体的对象 。
1.4、通过类对象获取实例为了测试方便 , 这里创建一个Person类 。
<1>方式一:直接获取实例在获取到了Class对象后 , 可以直接调用newInstance()方法获取该类的一个新实例 。
newInstance()方法会抛出两个异常 , 分别是IllegalAccessException和InstantiationException 。
调用newInstance()方法后 , 程序会使用该类的无参构造方法进行实例化 。
注:该方式实例化的缺点是 , 如果该类的构造方法不是无参的 , 则不能进行实例化 , 并且抛出异常 。
<2>方式二:通过构造方法实例化对象如果一个类没有提供无参构造方法 , 则不能使用方式一进行获取实例 。 可以先通过Class对象获取到对应的构造方法 , 然后通过构造方法获取实例 。
获取构造方法有四个方法:
getConstructor(Class... paramtype):根据参数类型获取指定的构造方法 。 私有构造方法除外 。
getConstructors():可以获取类中所有的非私有方法 。
getDeclaredConstructors(Class... paramtype):获取类中的指定构造方法 。 包括私有构造方法 。
getDeclaredConstructors():获取类中的所有构造方法 。
这里以第一个方法为案例:
1.5、通过反射获取类的属性<1>获取属性getField(String name):可以在子类和父类中获取指定名称的属性(私有属性除外) 。