Java反射机制
来源:互联网 发布:锐捷校园网客户端mac 编辑:程序博客网 时间:2024/06/06 20:45
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。
在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中:
Class类:代表一个类。Field 类:代表类的成员变量(成员变量也称为类的属性)。Method类:代表类的方法。Constructor 类:代表类的构造方法。Array类:提供了动态创建数组,以及访问数组的元素的静态方法。
接下来我会给个例子展示
public class ReflectTest { public static void main(String[] args) throws Exception { // 获取类 Class<Demo> c = Demo.class; Object o = c.newInstance(); // 获取成员变量,get,set必须是同一个object,否则输出默认的11 Field idF = c.getDeclaredField("id"); idF.setAccessible(true); idF.set(o, "110"); System.out.println(idF.get(o)); // 获取无参函数,invoke参数为o是表示同一个实例,输出之前存储的110,如果是c.newInstance()输出默认的11 Method method = c.getDeclaredMethod("printId"); method.setAccessible(true); method.invoke(o); // 获取有参函数 Method method1 = c.getDeclaredMethod("print", String.class); method1.setAccessible(true); method1.invoke(o, "hello"); Class<?>[] class1 = c.getDeclaredClasses(); for (Class<?> cls : class1) { if (cls.getName().contains("Inner")) { // 构造成员内部类实例 Constructor<?> con2 = cls.getDeclaredConstructor(c); con2.setAccessible(true); Inner inner = (Inner) con2.newInstance(o); inner.run(); } else if (cls.getName().contains("StaticInstance")) { // 构造静态内部类实例 StaticInstance instance = (StaticInstance) cls.newInstance(); instance.run(); } } // 获取匿名内部类实例(要求:已经生成对应的实例,也就是已经new过了) Field field = c.getDeclaredField("inner2"); field.setAccessible(true); Inner r = (Inner) field.get(o); r.run(); }}class Demo { private String id = "11"; private void printId() { System.out.println(id); } private void print(String content) { System.out.println(content); } private Inner inner; private Inner inner2 = new Inner(); class Inner { public void run() { System.out.println("inner-running"); } } private StaticInstance staticInstance; static class StaticInstance { public void run() { System.out.println("staticInstance-running"); } }}
0 0
- 【反射】JAVA反射机制
- 【Java】JAVA反射机制
- Java 反射机制[Field反射]
- Java 反射机制[Method反射]
- Java反射机制笔记-反射机制
- java的反射机制
- Java的反射机制
- java反射机制详解!
- Java反射机制
- Java的反射机制
- java 反射机制--侯捷
- java反射机制
- java反射机制
- [候捷]Java反射机制
- java 反射机制
- java 反射机制初探
- 关于Java反射机制
- java反射机制
- Java面向对象-构造方法,this关键字
- 设计一个有getMin功能的栈-c++
- centos下搭建git
- 基础线段树的 修改与查询
- 使用Idea时需要安装和注意的地方
- Java反射机制
- ActionBar关于search搜索按钮的显示问题
- 第七周—求解奖金
- llocating an object of abstract class type "xxxx"
- synchronized和volatile介绍
- Leetcode题解4.Median of Two Sorted Arrays
- centos查看系统cpu个数、核心书、线程数
- 教你如何用命令行装逼,做一个有逼格的程序员
- (转载)Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法