java基础之通过反射获得和使用类的字段、方法、构造器,等
来源:互联网 发布:淘宝网聚划算天天特价 编辑:程序博客网 时间:2024/05/17 23:37
package com.j2se.g_reflect;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Arrays;public class AppTest {public static void main(String[] args) throws Exception {// 得到Person的Class对象实例(的三种方式)Class<Person> clazz = Person.class;Class clazz2 = new Person().getClass();Class clazz3 = Class.forName("com.j2se.g_reflect.Person");// 获取类中的信息(字段、方法、构造器)Field[] fields = clazz.getFields(); // 获取所有公共的字段信息,包括继承过来的字段Method[] methods = clazz.getMethods(); // 获取所有公共的方法信息,包括继承过来的方法Constructor[] constructors = clazz.getConstructors();// 显示类的信息System.out.println("类的全限定名称:" + clazz.getName());System.out.println("类的简单名称:" + clazz.getSimpleName());System.out.println("类的修饰符:" + clazz.getModifiers());System.out.println("类的父类类型:" + clazz.getSuperclass());System.out.println("类的实现的接口:" + Arrays.toString(clazz.getInterfaces()));System.out.println("=================");// 显示信息for (Field field : fields) {System.out.println("字段的修饰符:" + field.getModifiers());System.out.println("字段类型:" + field.getType());System.out.println("字段名:" + field.getName());// System.out.println("字段值:" +field.get(instance));System.out.println();}System.out.println("=========");for (Method method : methods) {System.out.println("方法的修饰符:" + method.getModifiers());System.out.println("方法的返回值类型:" + method.getReturnType());System.out.println("方法的参数类型:" + Arrays.toString(method.getParameterTypes()));System.out.println("方法的名称:" + method.getName());System.out.println();}System.out.println("=========");for (Constructor c : constructors) {System.out.println("构造器的修饰符:" + c.getModifiers());System.out.println("构造器的名称:" + c.getName());System.out.println("构造器的参数的类型:" + Arrays.toString(c.getParameterTypes()));System.out.println();}}}
运行结果:
类的全限定名称:com.j2se.g_reflect.Person类的简单名称:Person类的修饰符:1类的父类类型:class java.lang.Object类的实现的接口:[interface java.io.Serializable]=================字段的修饰符:1字段类型:class java.lang.String字段名:name字段的修饰符:1字段类型:class java.lang.Character字段名:gender=========方法的修饰符:1方法的返回值类型:int方法的参数类型:[]方法的名称:getAge方法的修饰符:1方法的返回值类型:void方法的参数类型:[int]方法的名称:setAge方法的修饰符:17方法的返回值类型:void方法的参数类型:[]方法的名称:wait方法的修饰符:17方法的返回值类型:void方法的参数类型:[long, int]方法的名称:wait方法的修饰符:273方法的返回值类型:void方法的参数类型:[long]方法的名称:wait
package com.j2se.g_reflect;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class AppTest2 {public static void main(String[] args) throws Exception {// 得到Person的Class对象实例(的三种方式)Class<Person> clazz = Person.class;// Class clazz2 = new Person().getClass();// Class clazz3 = Class.forName("<span style="font-family: Arial, Helvetica, sans-serif;">com.j2se.g_reflect</span>.Person");// 创建对象的实例(使用无参的构造器时一般用这个方法)Object instance = clazz.newInstance(); // 使用默认的构造方法创建对象的实例System.out.println(instance);// 创建对象的实例2(使用有参的构造器时只能使用这个方法)Constructor c = clazz.getConstructor(String.class, int.class); // 获取有指定参数列表的构造器Object instance2 = c.newInstance("张三", 20);System.out.println(instance2);// 对于字段的操作Field field = clazz.getField("name");Object value = field.get(instance2); // 获取字段的值System.out.println(field.getName() + " = " + value);// 改变字段的值field.set(instance2, "李四");value = field.get(instance2); // 获取字段的值System.out.println(field.getName() + " = " + value);// 对于方法的操作(调用)Method method = clazz.getMethod("getAge");Integer age = (Integer)method.invoke(instance2);System.out.println("getAge() = " + age);}}
执行结果:
com.j2se.g_reflect.Person@150bd4dcom.j2se.g_reflect.Person@1888759name = 张三name = 李四getAge() = 20
第三个Demo:
package com.j2se.g_reflect;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Arrays;public class AppTest3 {public static void main(String[] args) throws Exception {// 得到Person的Class对象实例(的三种方式)Class<Person> clazz = Person.class;Class clazz2 = new Person().getClass();Class clazz3 = Class.forName("com.j2se.g_reflect.Person");Object instance = new Person("王五", 21);// 获取类中的信息(字段、方法、构造器)// Field[] fields = clazz.getFields(); // 获取所有公共的字段信息,包括继承过来的字段// Method[] methods = clazz.getMethods(); // 获取所有公共的方法信息,包括继承过来的方法// Constructor[] constructors = clazz.getConstructors();Field[] fields = clazz.getDeclaredFields(); // 获取所有在本类中声明的字段信息,包括所有修饰符的字段(当然也包括私有的)Method[] methods = clazz.getDeclaredMethods();Constructor[] constructors = clazz.getDeclaredConstructors();// 显示信息for (Field field : fields) {field.setAccessible(true); // 强制访问(暴力反射)System.out.println("字段的修饰符:" + field.getModifiers());System.out.println("字段类型:" + field.getType());System.out.println("字段名:" + field.getName());System.out.println("字段值:" + field.get(instance));System.out.println();}System.out.println("=========");for (Method method : methods) {// method.setAccessible(true);System.out.println("方法的修饰符:" + method.getModifiers());System.out.println("方法的返回值类型:" + method.getReturnType());System.out.println("方法的参数类型:" + Arrays.toString(method.getParameterTypes()));System.out.println("方法的名称:" + method.getName());System.out.println();}System.out.println("=========");for (Constructor c : constructors) {System.out.println("构造器的修饰符:" + c.getModifiers());System.out.println("构造器的名称:" + c.getName());System.out.println("构造器的参数的类型:" + Arrays.toString(c.getParameterTypes()));System.out.println();}}}
执行结果:
字段的修饰符:1字段类型:class java.lang.String字段名:name字段值:王五字段的修饰符:2字段类型:int字段名:age字段值:21字段的修饰符:1字段类型:class java.lang.Character字段名:gender字段值:null=========方法的修饰符:2方法的返回值类型:class java.lang.String方法的参数类型:[]方法的名称:getName方法的修饰符:2方法的返回值类型:void方法的参数类型:[class java.lang.String]方法的名称:setName方法的修饰符:1方法的返回值类型:int方法的参数类型:[]方法的名称:getAge方法的修饰符:1方法的返回值类型:void方法的参数类型:[int]方法的名称:setAge=========构造器的修饰符:1构造器的名称:com.j2se.g_reflect.Person构造器的参数的类型:[]构造器的修饰符:2构造器的名称:com.j2se.g_reflect.Person构造器的参数的类型:[class java.lang.String]构造器的修饰符:1构造器的名称:com.j2se.g_reflect.Person构造器的参数的类型:[class java.lang.String, int]
package com.j2se.g_reflect;import java.lang.reflect.Modifier;public class AppTest4 {public static void main(String[] args) throws Exception {// 得到Person的Class对象实例(的三种方式)Class<Person> clazz = Person.class;// 获取类的修饰符int modifier = clazz.getModifiers();System.out.println("是static吗?" + Modifier.isStatic(modifier));System.out.println("是private吗?" + Modifier.isPrivate(modifier));System.out.println("是public吗?" + Modifier.isPublic(modifier));}}
0 0
- java基础之通过反射获得和使用类的字段、方法、构造器,等
- java反射机制 以及通过反射获得类的变量字段,方法,构造函数
- java反射机制 以及通过反射获得类的变量字段,方法,构造函数
- java再复习——通过反射使用类的属性,方法和构造器
- java反射之Class类、构造器、方法、字段、数组
- java 通过反射获得类的属性和调用方法
- Java反射机制之获得构造函数的方法
- java基础:反射类的构造方法
- Java中通过反射获取类的信息(方法名,参数,构造函数等)
- JAVA高新技术反射机制的原理之构造函数、普通方法和字段
- 反射之字段、方法、构造器的调用(二)
- java基础之反射-通过反射调用某个属性的setter和getter方法
- 21天精通java基础之Day19通过反射机制获得类的完整结构
- java反射获得类的字段和值
- Java反射---Class对象,获得类的方法、成员变量和构造函数信息
- java 反射获得构造方法
- Java通过反射来获取类的私有构造方法和成员方法
- java通过反射获得当前运行的类名和方法名
- android AsyncTask介绍
- 希尔排序
- win7x64+vs2008下,visual assist过期之后再安装破解版VA仍提示过期的解决方案
- Sublime Text 2/3如何支持中文GBK编码
- Windows 下 android 自动打包 volley项目
- java基础之通过反射获得和使用类的字段、方法、构造器,等
- 解决win8安装完oracle_client没有Enterprise Management Console的问题
- DRBD实现的Hadoop的热备
- Adobe——我欠你一个正版
- v4l2 Camera详细设置
- SQL LEFT JOIN 关键字
- 旋转数组的最小数字
- 多线程并发思考--文件加锁
- form提交的几种方法