什么是反射:
Java的反射机制是在运行状态中,对于任何一个类,
都能够知道这个类的所有属性和方法;对于任何一个对象,
都能调用它的任何一个方法。这种动态获取信息和动态调
用对象的方法的功能称为Java语言的的反射机制。(主要
是指程序可以访问,检测和修改它本身状态或行为的一种能力)
简单来说,反射机制是指程序在运行时能够获取自身的信息。
在java中,只要给定类的名字,那么就可以通过反射机制来
获取类的所有信息。包括其访问修饰符,父类,实现的接口,
属性和方法的所有信息,并可在运行时创建对象,修改属性
(包括私有的),调用方法(包括私有的)。
Class对象:
类是程序的一部分,每个类都有一个Class对象。换言说,
每当编写并且编译了一个新类,就会产生与之对应的一个Class
对象。(要想操纵类中的属性和方法,都必须从获取Class对象开始)
Class类没有公共的构造方法。Class对象是在加载时由java虚拟机
以及通过类加载器中的方法自动构造的,因此不能显示地声明一Class对象。
通过反射实例化对象:
实例化无参构造函数对象,有两种方式:
1. Class.newInstance();
2. Class.getContentstructor(new Class[]{}).newInstance(new Object[]{});
实例化带参构造函数对象:
class.getConstructor(Class<?>...parameterTypes).newInstance(Object...initargs);
反射的总结:
1.只要用到反射,先获得Class对象。
2.没有方法能获得当前类的超类(父类)的private方法和属性,
你必须通过getSuperclass()找到超类以后再去尝试获得。
3.通常情况即使是当前类,private属性和方法也是不能访问的,
你需要设置压制权限setAccessible(true)来取得private
的访问权。但实话说,这已经破坏了面向对象的规则,
所以除非万不得已,请尽量少用。