黑马程序员--加强之reflection
来源:互联网 发布:两个excel重复数据筛选 编辑:程序博客网 时间:2024/05/23 02:02
-------android培训、java培训、期待与您交流! ----------
package cn.itcast.day1;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Arrays;public class ReflectTest{/** * @param args * @throws ClassNotFoundException * @throws NoSuchMethodException * @throws SecurityException * @throws InvocationTargetException * @throws IllegalAccessException * @throws InstantiationException * @throws IllegalArgumentException * @throws NoSuchFieldException */public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchFieldException{String str1 = "abc";Class clazz1 = str1.getClass();Class clazz2 = String.class;Class clazz3 = Class.forName("java.lang.String");System.out.println(clazz1 == clazz2); //trueSystem.out.println(clazz1 == clazz3); //true : only one class byte file exsists in the memory!//类型System.out.println(clazz1.isPrimitive()); // String'object is not primitive typeSystem.out.println(int.class.isPrimitive());//trueSystem.out.println(int.class == Integer.class);//false System.out.println(int[].class.isPrimitive());//数组也不是原生类型System.out.println(int[].class.isArray());// 数组类型与原生类型并列//构造函数Constructor constructor1 = String.class.getConstructor(StringBuffer.class);//得到Constructor的实例String str2 = (String)constructor1.newInstance(new StringBuffer("abc"));//调用其方法去获得实例System.out.println(str2.charAt(2));//自定义类的反射ReflectPoint pt1 = new ReflectPoint(3,5), pt2 = new ReflectPoint(4, 6);Field fieldY = pt1.getClass().getField("y");// 获取的是类的字段信息System.out.println(fieldY.get(pt1)); //public field can be getted! 3System.out.println(fieldY.get(pt2)); //public field can be getted! 5Field fieldX = pt1.getClass().getDeclaredField("x");// not the same with the public fieldsfieldX.setAccessible(true);// access private field.System.out.println(fieldX.get(pt1));//用反射改变对象的值changeStringValue(pt1); System.out.println(pt1);// 方法Method methodCharAt = String.class.getMethod("charAt", int.class);System.out.println(methodCharAt.invoke(str1, 1));System.out.println(methodCharAt.invoke(str1, new Object[]{1}));//variable parameter//反射调用 TestArguments .main方法String startingClassName = args[0];System.out.println(startingClassName);Method methodMain = Class.forName("cn.itcast.day1."+startingClassName).getMethod("main", String[].class);//methodMain.invoke(null, (Object)new String[]{"11", "22", "33"});//静态方法无需传入调用者对象methodMain.invoke(null, (Object)new String[]{"11", "22"});//静态方法无需传入调用者对象,防止拆分吧int [] a1 = new int[]{1,2,3};Integer [] a11 = new Integer[]{1,2,3};int [] a2 = new int[4];int[][] a3 = new int[2][3];String [] a4 = new String[]{"a","b","c"};System.out.println(a1.getClass() == a2.getClass()); //true//System.out.println(a1.getClass() == a4.getClass());//System.out.println(a1.getClass() + a3.getClass());System.out.println(a1.getClass().getName()); //[ISystem.out.println(a11.getClass().getName()); //[Ljava.lang.Integer;System.out.println(a4.getClass().getName()); //[Ljava.lang.String;System.out.println(a3.getClass().getName()); //[[ISystem.out.println(a1.getClass().getSuperclass().getName());//java.lang.ObjectSystem.out.println(a4.getClass().getSuperclass().getName());//java.lang.ObjectObject aObj1 = a1;Object aObj3 = a3;Object[] aObj33 = a3;//Object[] aObj11 = a1; //can't convert from int[] to Object[];Object[] aObj44 = a4; // ar is a Object(String) array.System.out.println(a1);//[I@10b30a7System.out.println(a4);//[Ljava.lang.String;@1a758cbSystem.out.println(Arrays.asList(a1));//[[I@10b30a7] 将a1作为一个对象传入进去System.out.println(Arrays.asList(a4));//[a, b, c]}private static void changeStringValue(Object obj) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{Field[] fields = obj.getClass().getFields();for(Field field : fields){if(field.getType() == String.class){String oldValue = (String) field.get(obj);String newValue = oldValue.replace('b', 'a');field.set(obj, newValue);}}}}class TestArguments{public static void main(String[] args){for(String arg : args)System.out.println(arg);}}
-------android培训、java培训、期待与您交流! ----------
- 黑马程序员--加强之reflection
- 黑马程序员-->Java基础加强-->反射(Reflection)
- 黑马程序员--加强之Enumeration
- 黑马程序员--加强之Anotation
- 黑马程序员--加强之ClassLoader
- 黑马程序员之基础加强之反射
- 黑马程序员_技术加强之反射
- 黑马程序员:基础加强之泛型
- 黑马程序员:基础加强之动态代理
- 黑马程序员_java基础加强之JavaBean
- 黑马程序员_Java基础加强之反射
- 黑马程序员—java之基础加强
- 黑马程序员--加强之泛型
- 黑马程序员--加强之动态代理
- 黑马程序员_java基础加强之反射
- 黑马程序员-JAVA基础加强之反射
- 黑马程序员_基础加强之反射
- 黑马程序员_java基础加强之枚举
- Jboss 6 setup , Web server bind address
- Objective C - 属性的内存管理:
- 示例收藏
- SAS硬盘与SATA硬盘有什么区别
- 让数据库变快的10个建议
- 黑马程序员--加强之reflection
- VMWare安装MAC OS X ——先安装Darwin.iso再安装mac系统
- Objective C - nonatomic & atomic:
- 异步操作Timer
- 输入一个日期,求这一天是星期几,并且计算出是一年中的第几天
- ID3V2.3详解
- CVPR 2013 Short Courses and Tutorials
- iOS - NSLog & debug
- termsrv.dll XP SP3 / Win7 32/64位 支持多用户远程桌面连接 双开3389