Java基础之-反射
java,反射2016-08-02
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射的第一步,就是去获取Class对象,而我们获取Class对象有三种方法,下面一一说明。
Class<?> clz = User.class;
User user = new User(1,"quanshijie");
Class<?> clz = user.getClass();
try {
Class<?> clz = Class.forName("com.example.User");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Class clz = Class.forName("com.example.User");
//获取对应的构造函数 这里的构造函数参数为 int,String
Constructor constructor = clz.getConstructor(int.class,String.class);
//利用构造函数生成对象
User user = (User) constructor.newInstance(1,"username");
user.toString();
当然,这里通过另外两种方式也是一样的。我们看下控制台的输出。
上面的小例子中,我们获取了构造函数。通常我们有两种获取构造函数的方法。
我们通过设置accessible为true来提升反射的速度。
constructor.setAccessible(true);
我们通常有四中方法来获取。
* getMethod 只能获取public
* getMethods 只能获取public
* getDeclaredMethods 获取所有方法
* getDeclaredMethod 获取当前类和当前父类的。
Method method = clz.getDeclaredMethod("setName",String.class);
method.invoke(user,"change");
我们看下控制台输出结果。
好吧,这里有两种方法。
Field field = clz.getDeclaredField("name");
field.set(user,"change field");
结果如下:
这部分内容相对来说我们用的比较少,所以给出用法。
获取父类
clz.getSuperclass();
获取接口
clz.getInterfaces()
获取注解
clz.getAnnotations();
当然,内容不止这么点,剩下的就自己探索吧。