黑马程序员之JAVA反射
来源:互联网 发布:ubuntu 文字界面 编辑:程序博客网 时间:2024/06/01 12:57
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
JAVA反射,在程序运行状态中,对于任意一个对象都可以拿到它的相关的属性以及方法,并且可以调用它的方法。
看看下面示例,了解相关的方法:
import java.lang.reflect.Array;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class ReflectionTest {public static void main(String[] args) throws Exception {String str = "dada";//获取字节码对应的实例对象Class cls1 = str.getClass();Class cls2 = Class.forName("java.lang.String");Class cls3 = String.class;//isPrimitive()判断该对象是否是原始数据类型System.out.println(cls1.isPrimitive());//trueSystem.out.println(void.class.isPrimitive());//true, Integer.TYPE表示所包装类型里面int的字节码System.out.println(int.class == Integer.TYPE);//true, 数组类型的实例对象, 判断对象是不是数组System.out.println(int[].class.isArray());System.out.println(String[].class.isArray());//获取指定类的构造函数, 注意: 根据构造函数的参数获取Constructor cons = String.class.getConstructor(StringBuffer.class);//实例化类String str2 = (String)cons.newInstance(new StringBuffer("adada"));System.out.println(str2);//用默认的不带参数的构造方法实例化对象String str3 = String.class.newInstance();str3 += "ss";System.out.println(str3);Person p = new Person(3, 5);//获取指定对象的指定成员变量的字段, private的不能获得Field field = Person.class.getField("y");//获取指定实例化对象的具体值int y = (int)field.get(p);System.out.println(y);//暴力反射//获取指定对象的指定成员变量的字段, private的可以获得Field field2 = Person.class.getDeclaredField("x");//设置private可以被访问field2.setAccessible(true);int x = field2.getInt(p);System.out.println(x);changeStringValue(p);System.out.println(p);//获取指定类的方法Method methodCharAt = String.class.getMethod("charAt", int.class);//执行所获取的方法System.out.println(methodCharAt.invoke(str, 1));//获取接受数组参数的成员方法Method methodMain = Test.class.getMethod("main", String[].class);methodMain.invoke(null, new Object[]{new String[]{"111","222","333"}});//methodMain.invoke(null, (Object)new String[]{"111","222","333"});String[] oStrings = new String[]{"dadada","dadadaedef"};printObject(oStrings);}//打印数组中的元素(打印对象)private static void printObject(Object object) {Class clazz = object.getClass();if (clazz.isArray()) {//返回该数组对象的长度int len = Array.getLength(object);for(int i =0;i<len;i++){//返回指定对象, 指定的第几个元素System.out.println(Array.get(object, i));}} else {System.out.println(object);}}//将一个任意对象中的所有String类型的成员变量所对应的字符串内容中的"b"换成"A"public static void changeStringValue(Object object) throws Exception{//改变非private修饰的成员变量的值Field[] fields = object.getClass().getFields();for (Field field : fields) {if(field.getType()==String.class){String oldStr = (String) field.get(object);String newStr = oldStr.replace('b', 'A');field.set(object, newStr);//System.out.println(newStr);}}//改变private修饰的成员变量的值fields = object.getClass().getDeclaredFields();for (Field field : fields) {if(field.getType()==String.class){field.setAccessible(true);String oldStr = (String) field.get(object);String newStr = oldStr.replace('b', 'A');field.set(object, newStr);}}}}class Test{public static void main(String[] args) {for (String string : args) {System.out.println(string);}}}
再看看下面的示例,反射机制的运用。利用反射机制在ArrayList<Integer>中插入一个String类型的数据:
import java.lang.reflect.Method;import java.util.ArrayList;public class ReflectionTest2 {public static void main(String[] args) throws Exception {// 在Integer的ArrayList中添加String类型的数据ArrayList<Integer> arr = new ArrayList<Integer>();Method[] methodArr = arr.getClass().getMethods();methodArr[0].invoke(arr, "adad");System.out.println(arr);}}
0 0
- 黑马程序员--JAVA之反射
- 黑马程序员 java之反射
- 黑马程序员---Java之反射
- 黑马程序员-java之反射
- 黑马程序员java之反射
- 黑马程序员之JAVA反射
- 黑马程序员--java 反射之method 类
- 黑马程序员--java学习之反射总结
- 黑马程序员--java之反射及其相关
- 黑马程序员------java学习笔记之反射
- 黑马程序员 java高新技术笔记之反射
- <<黑马程序员>>java增强之初试反射
- 黑马程序员-Java高新技术之反射
- 黑马程序员-JAVA基础加强之反射
- 黑马程序员---java高新技术之反射
- 黑马程序员--java高新技术之反射
- 黑马程序员----高新技术----之java反射
- 黑马程序员-Java基础加强之反射
- 北大OJ2551
- (比如C#)里面调用AutoCAD ActiveX API实现后台打印DWG文件为PDF文件
- POJ 2195:Going Home
- 【codevs1851】越狱,快速幂数学
- 《乔丹传奇》 留下深刻印象的文字
- 黑马程序员之JAVA反射
- 北大OJ2084
- Android开发者文档笔记(二)
- 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(二)
- 算法导论序言
- 棋盘
- iOS通信加密
- (Win8、Win7)MAK激活密钥分享【资源有限】
- SQLite初级操作