黑马程序员--反射的一些相关笔记摘要
来源:互联网 发布:linux chm手册 编辑:程序博客网 时间:2024/05/25 21:35
private static void printObject(Object obj){Class clazz = obj.getClass();if(clazz.isArray()){int len = Array.getLength(obj);for(int i = 0;i<len;i++){System.out.println(Array.get(obj,i));}}else{System.out.println(obj);}}BeanUtils.setProperty(pt1,"birthday.time","111");System.out.println(BeanUtils.getProperty(pt1,"birthday.time").getClass().getName()) 返回的是 java.lang.String,所以这里传递的值是字符串“111”PropertyUtils.setProperty(pt1,"birthday.time",1);System.out.println(PropertyUtils.getProperty(pt1,"x").getClass().getName());返回的是java.lang.Integer,所以这里传递的值是1,
---------------------- android培训、java培训、期待与您交流! ----------------------
如何得到各个字节码对应的实例对象(Class类型)
1,类名.class 例如:System.class
2.对象.getClass(),例如:new Date().getClass()
3.Class.forName("类名") 例如:Class.forName("java.util.Date") 反射时用
九个预定义Class实例对象:八种基本类型,和void
Constructor constructor1 = String.class.getConstructor(StringBuffer.class)
String str2 = (String)constructor1.newInstance(new StringBuffer("abc"));
Constructor类代表某个类中的一个构造方法
1.得到某个类所有的构造方法:
Constructor[] constructor = Class.forName("java.lang.String").getConstructors();
3.得到某一个构造方法:
Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);
3.创建实例对象:
通常方式:String str = new String(new StringBuffer("abc"))
反射方式:String str = (String)constructor.newInstance(new StringBuffer("abc"))
问题:
启动java程序的main方法的参数是一个字符串数组,即public static void main(String[] args),通过反射方式来调用这个main方法时,如何为invoke方法传递参数呢?按jdk1.5的语法,整个数组是一个参数,而按
jdk1.4的语法,数组中的每个元素对应一个参数,当把一个字符串数组作为参数传递给invoke方法时,javac会到底按照哪种语法进行处理呢?jdk1.5肯定要兼容jdk1.4的语法,会按jdk1.4的语法进行处理,即把数组打
散成为若干个单独的参数,所以,在给main方法传递参数时,不能使用代码mainMethod.invoke(null,new String[]{"xxx","xxx","xxx"}),javac只把它当做jdk1.4的语法进行理解,而不把它当做jdk1.5的语法解释,因
此会出现参数类型不对的问题。
解决办法:
mainMethod.invoke(null,new Object[]{new String[]{"xxx","xxx","xxx"}});或者
mainMethod.invoke(null,(Object)new String[]{"xxx","xxx","xxx"}),编译器会做特殊处理,编译时不把参数当做数组看待,也就不会数组打散成若干个参数了.
-------------------------------------
int[] a1 = new int[3];
int[] a2 = new int[4];
int[][] a3 = new int[2][3];
String[] a4 = new String[3];
Object aObj1= a1; 通过。
Ojbect aObj2= a4; 通过
Object[] aObj3 = a1; 不能通过
Object[] aObj4 = a3; 通过
Object[] aObj5 = a4; 通过
-------------------------------------
Arrays.asList()方法处理int[]和String[]时的差异
int[] a1 = new int[]{3,5,7,8};
String[] a4 = new String[]{"a","b","c"};
System.out.println(Arrays.asList(a1)) 打印结果是[[I@哈希数值]]
System.out.println(Arrays.asList(a4)) 打印结果是[a,b,c]
---------------------------------------
---------------------- android培训、java培训、期待与您交流! ----------------------
- 黑马程序员--反射的一些相关笔记摘要
- 黑马程序员-Java的反射学习笔记
- 黑马程序员---反射学习笔记
- 黑马程序员 反射学习笔记
- 黑马程序员-java反射笔记
- 黑马程序员_java反射笔记
- 黑马程序员—反射笔记
- 黑马程序员---反射学习笔记
- 【黑马程序员】Java笔记--反射
- 黑马程序员-反射学习笔记
- 黑马程序员----反射学习笔记
- 黑马程序员--自学笔记--反射
- 黑马程序员-关于反射的一些小总结
- 黑马程序员-JAVA-反射的一些特殊例子
- 黑马程序员_反射机制的一些总结
- 黑马程序员 GUI的一些笔记
- 黑马程序员--java之反射及其相关
- 黑马程序员--关于增强for和普通for循环的总结和其他一些摘要
- 23种设计模式(3):抽象工厂模式
- 23种设计模式(3):抽象工厂模式
- 23种设计模式(2):工厂方法模式
- 23种设计模式(1):单例模式
- [021] Android应用“易查查”上线推广,请同行多多指教、多多支持
- 黑马程序员--反射的一些相关笔记摘要
- 算法的封装与切换——策略模式
- Data Layer Format
- 外观模式及其改进
- 外观模式
- 黑马程序员--交通灯管理系统
- hdu 1035
- 对象间的联动——观察者模式
- 自定义语言的实现——解释器模式