Java反射机制
来源:互联网 发布:鲅鱼圈网络维护 编辑:程序博客网 时间:2024/05/19 23:10
1.什么是反射?
Java的反射就是指在运行状态中,对于任意一个类,能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法。这种动态获取信息以及动态调用对象方法的功能被称为Java的反射机制。
2.使用反射
2.1 获取class对象
//第一种,类的class Class c = Student.class;//第二种,实例对象的getClass方法 Class c = new Student().getClass();//第三种,根据类路径获取 Class c = Class.forName("zhangff01.vo.Student");
2.2获取类的属性和方法并调用
//测试类,为求简介舍去get/set方法public class BaseClassA{ public String basePub = "base public field"; private String basePri = "base private field"; ...}public class ClassA extends BaseClassA{ public String pubField = "public field"; private String prifield = "private field"; ClassA() { } ClassA(String a, String b) { this.prifield = a; this.pubField = b; } ...}
public static void main(String[] args) throws Exception { ClassA classA = new ClassA(); Class<?> aClass = classA.getClass(); //获取类所有属性,不包括基类 Field[] declaredfields = aClass.getDeclaredFields(); //获取类的所有public属性 包括基类 Field[] fields = aClass.getFields(); for (Field field : declaredfields) { //设置private对象为可访问 field.setAccessible(true); //获取具体对象该属性的具体值 String value = (String) field.get(classA); System.out.println(field.getName() + "的值为:" + value); } for (Field field : fields) { //获取具体对象该属性的具体值 String value = (String) field.get(classA); System.out.println(field.getName() + "的值为:" + value); } //根据属性名获取具体的某一项属性(不包括基类) Field Declaredfield = aClass.getDeclaredField("prifield"); //根据属性名获取具体的某一项public属性(基类) Field field = aClass.getField("basePub"); //获取类的方法类似 //获取类所有方法,不包括基类 Method[] declaredMethods = aClass.getDeclaredMethods(); //获取类的所有public方法 包括基类 Method[] methods = aClass.getMethods(); for (Method method : declaredMethods) { //设置private方法为可访问 method.setAccessible(true); //调用方法,入参为方法调用的具体对象和方法的参数 method.invoke(classA, ""); } //根据方法名和参数类型获取具体方法 aClass.getDeclaredMethod("setPrifield", String.class); aClass.getMethod("setPubField", String.class); }
2.3 对象实例化
public static void main(String[] args) throws Exception { Class<?> aClass = ClassA.class; //对于有空的构造函数的类可以直接用class.newInstance()获取实例 Object objA = aClass.newInstance(); //如果没有空的构造函数的类则需要先获取到类的构造方法,在通过该构造方法类获取实例 //获取构造函数(参数为相应构造方法的参数) Constructor<?> constructor = aClass.getConstructor(String.class, String.class); //调用构造方法(需要带上相应构造方法的参数) constructor.newInstance("a", "b"); //以下几个方法和获取属性的方法基本差不多,可以类推出它的功能 //aClass.getConstructor(); //aClass.getConstructors(); //aClass.getDeclaredConstructor(); //aClass.getDeclaredConstructors(); //constructor.setAccessible(true); }
阅读全文
0 0
- 【反射】JAVA反射机制
- 【Java】JAVA反射机制
- Java 反射机制[Field反射]
- Java 反射机制[Method反射]
- Java反射机制笔记-反射机制
- java的反射机制
- Java的反射机制
- java反射机制详解!
- Java反射机制
- Java的反射机制
- java 反射机制--侯捷
- java反射机制
- java反射机制
- [候捷]Java反射机制
- java 反射机制
- java 反射机制初探
- 关于Java反射机制
- java反射机制
- 我的读书笔记——引用
- 微信小程序getPhoneNumber快速获取用户手机号组件
- Spring boot入门
- DeepLearing学习笔记-改善深层神经网络(第三周- 超参数调试、正则化)
- PullToRefreshListView加请求网络数据+imageloder
- Java反射机制
- 关于SVN防止误删,必须注释的脚本代码----分享
- 归并排序求逆序对
- Ubuntu16.04下安装中文输入法
- spfa求最短路模板(邻接矩阵)
- 面向对象设计的五个基本原则
- mysql温备份配置,每小时备份一次
- JavaBean实现简单参数封装
- 远则申明