初识Java反射机制——Reflection(二)
来源:互联网 发布:淘宝现金红包怎么设置 编辑:程序博客网 时间:2024/05/20 03:46
上篇文章简单给了个反射的例子,主要利用反射列出了某个类的内部类、方法和属性,接下来我们举例反射的另一些用法。
首先看一个TestReflection.java类:
package com.xingpd.code;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.util.Arrays;import java.util.Scanner;public class TestReflection { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); String className = sc.next(); Class clazz = Class.forName(className); /** 创建对象 **/ /** 调用无参构造创建对象 **/ Object obj = clazz.newInstance(); System.out.println(obj); /** 操作属性 **/ Field field = clazz.getDeclaredField("name"); /** 破坏封装 **/ field.setAccessible(true); System.out.println(field.get(obj)); field.set(obj, "zhangfei"); Object fieldValue = field.get(obj); System.out.println(fieldValue); /** 操作方法 **/ Method method = clazz.getDeclaredMethod("setName", String.class); /** 等价于obj.setName("liubei"); **/ method.invoke(obj, "liubei"); method = clazz.getDeclaredMethod("getName"); Object returnValue = method.invoke(obj); System.out.println(returnValue); Method method2 = clazz.getDeclaredMethod("test", String.class, int.class); /** 获取方法的修饰符 **/ int i = method2.getModifiers(); System.out.print(Modifier.toString(i) + " "); /** 获取方法的返回类型 **/ Class c = method2.getReturnType(); System.out.print(c.getName() + " "); /** 获取方法名 **/ System.out.print(method2.getName() + "("); /** 获取参数列表 **/ Class[] cs = method2.getParameterTypes(); System.out.print(Arrays.toString(cs)); System.out.print(")"); }}
在运行以后,控制台输入:com.xingpd.code.MyUser 按回车,效果如下:
MyUser类(存在于com.xingpd.code包里边):
class MyUser { private String name = "guanyu"; private int age = 25; public final String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public MyUser(String name, int age) { super(); this.name = name; this.age = age; } public MyUser() { super(); } public void test(String str, int i) throws Exception { }}
反射当中,Field是属性类,它生成的对象就是某个指定类的某个属性;
Method是方法类,它生成的对象就是指定的某个类的某个方法。
method.invoke()方法的意思就是相当于引用、借助于原类的那个方法,他们的作用相同,比如说原类有一个方法叫getName(),那么通过反射拿到的method对象:
Method method = clazz.getDeclaredMethod("getName");Object returnValue = method.invoke(obj);
这里returnValue就是getName所返回的对象,所以说反射拿到的方法和原方法一样的功能调用。
1 0
- 初识Java反射机制——Reflection(二)
- 初识Java反射机制——Reflection(一)
- JAVA高新技术——反射机制Reflection
- JAVA 反射机制(Java Reflection)总结(二)
- Java反射机制(Reflection )
- Java反射机制(Reflection)
- java Reflection(反射)机制
- java reflection(反射机制)
- 初识 java 反射机制 (二)
- java反射机制reflection
- java反射机制--reflection
- JAVA 反射机制--reflection
- java反射机制(Reflection)
- Java - 反射机制(Reflection)
- java Reflection 反射机制
- Reflection—Java反射机制综述和Class
- Java中反射机制(Reflection)学习
- Java中反射机制(Reflection)学习
- 详述“进程、线程和协程”的区别
- 第8条:覆盖equals时请遵守通用约定
- 离线下载与版本更新
- centos 中使用yum报错的问题
- DOS下新建文件夹
- 初识Java反射机制——Reflection(二)
- Ext.MessageBox.show验证问题
- 清除项目的svn
- 安卓框架
- 《进化心理学》
- 心得
- Darwin Streaming Server 核心代码分析
- Hive Insert命令
- 图像处理之对BMP图片的认识