java_basic_review(5)java反射荔枝
2016-06-27 21:12
369 查看
【0】README
1)本文旨在 review java反射荔枝;
【1】荔枝如下
【2】实例化Class类对象
【3】返回一个类实现的接口
【4】利用反射分析类的能力
【5】实例化对象
1)本文旨在 review java反射荔枝;
【1】荔枝如下
【2】实例化Class类对象
@Test // 实例化Class类对象 public void testInitializeClassObject() { Class c1; Class c2; Class c3; try { c1 = Demo.class; // way1. c2 = new Demo().getClass(); // way2. c3 = Class.forName("com.basic.reflection.Demo"); // way3. System.out.println(c1); System.out.println(c2); System.out.println(c3); System.out.println(c3.getName()); } catch (Exception e) { e.printStackTrace(); } /** * class com.basic.reflection.Demo * class com.basic.reflection.Demo * class com.basic.reflection.Demo * com.basic.reflection.Demo */ }
【3】返回一个类实现的接口
@Test // 返回一个类实现的接口 public void testGetInstancesImplemented() { Class c1; try { c1 = Triangle.class; Class[] interfaces = c1.getInterfaces(); for (Class temp: interfaces) { System.out.println(temp.getName()); }// com.basic.reflection.Shape } catch (Exception e) { e.printStackTrace(); } } // Class 类的 getDeclareFields、getDeclareMethods、getDeclaredConstructors // 方法将分别返回类中声明的全部域、方法和构造器;其中包括私有方法和受保护成员,但不包括超类成员.
【4】利用反射分析类的能力
@Test // 利用反射分析类的能力 public void testAnalyzeClass() { Class c1; try { c1 = Triangle.class; Field df1 = c1.getDeclaredField("width"); df1.setAccessible(true); System.out.println(df1.getName()); // width. Triangle t = new Triangle(1000, "i am a triangle."); int age = df1.getInt(t); System.out.println(age); // 1000 Method m1 = c1.getDeclaredMethod("sayShape", new Class[]{String.class, int.class}); m1.invoke(t, new Object[]{"i am a triangle", 9999}); // 调用方法.// sayShape() -> i am a triangle 9999 } catch (Exception e) { e.printStackTrace(); } }
【5】实例化对象
@Test // 实例化对象 public void testInstanceObject() { Class c1; try { c1 = Class.forName("com.basic.reflection.Demo"); Demo d1 = (Demo)c1.newInstance(); // 调用默认构造器 System.out.println(d1.getIntField()); // 1 // 利用构造器创建对象实例(推荐). Constructor con = c1.getDeclaredConstructor(new Class[]{int.class, String.class}); Demo d2 = (Demo) con.newInstance(new Object[]{110, "110"}); System.out.println(d2.getIntField() + d2.getStrField()); // 110110 } catch (Exception e) { e.printStackTrace(); } }【6】通过反射取得并修改数组的信息
@Test // 通过反射取得并修改数组的信息 public void testOperateArray() { int[] array = {1, 1, 0}; Class<?> demo = array.getClass().getComponentType(); // 数组类型的Class对象. out.println("array type = " + demo.getName()); // 数组类型为int. out.println("array length = " + Array.getLength(array)); out.println("1st element in array = " + Array.get(array, 0)); // 通过下标取得数组元素 Array.set(array, 0, 100); //修改数组的第一个元素为100(下标为0) out.println("after modification, 1st element in array is " + Array.get(array, 0)); } /* output. array type = int array length = 3 1st element in array = 1 after modification, 1st element in array is 100 */ // 通过反射修改数组大小 public static Object modifyArraySize(Object obj, int start, int newLen) { int oldLen = Array.getLength(obj); Class<?> arrayType = obj.getClass().getComponentType(); Object newArray = Array.newInstance(arrayType, newLen); newLen = newLen > oldLen ? oldLen : newLen; System.arraycopy(obj, start, newArray, 0, newLen); return newArray; } public static void print(Object obj) { int length = Array.getLength(obj); Class<?> c = obj.getClass(); if(!c.isArray()) return ; out.println("array length :" + length); for (int i = 0; i < length; i++) out.print(Array.get(obj, i) + " "); // Array.get(obj, i) == obj[i] } @Test// modify the size of array public void testModifyArraySize() { int[] array = {1, 7, 6, 0, 8}; int[] newArray = (int[])modifyArraySize(array, 0, 3); System.out.println("after modifying the array size to 3."); for(int i : newArray) { out.print(i + " "); } out.println(); print(newArray); newArray = (int[])modifyArraySize(array, 0, 8);//当新数组长度大于原始数组长度的时候 System.out.println("after modifying the array size to 8."); print(newArray); } // 通过反射修改数组大小 over. /* after modifying the array size to 3. 1 7 6 array length :3 1 7 6 after modifying the array size to 8. array length :8 1 7 6 0 8 0 0 0 */
相关文章推荐
- Struts2方法调用的三种方式(默认、多方法、通配符)
- 华为机试---矩阵元素相乘
- 《Thinkinginjava》第9章-接口
- java继承特点、好处、继承中构造方法间的关系、super、
- Eclipse mars 实用快捷键
- JAVA 中BIO,NIO,AIO的理解
- 《Thinkinginjava》第8章-多态
- java的关键字synchronized用法总结
- Java泛型中通配符的使用
- 使用hibernate自动生成实体类时同时出现两个.java文件
- javascrip组件开发--基础弹窗
- 哈希表(散列表)
- Java-线程池
- Java编程思想第四版读书笔记——第九章 接口
- Java异常处理和设计
- java webscoket聊天室
- struts2 配置 struts.xml 提示
- Java中Runnable和Thread的区别
- [2016/06/26] LeetCode / Java - Day 04 -
- Java虚拟机的知识点