在博客上看到JAVA中反射中有如下功能:Java反射机制提供如下功能: 在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判段任意一个类所具有的成员变量和方法
在运行时调用任一个对象的方法
在运行时创建新类对象
那么,疑问如下:
1 运行时判断任意一个对象所属的类
在软件中可以体现在哪些方面?个人的理解是防止对象初始化错误(说错了别笑话~~)2 运行时构造任意一个类的对象
任意一个类的对象完全可以NEW出来。与NEW操作相比,反射的优势体现在哪里?有没有劣势?3 运行时判断/调用任意一个类所具有的成员变量和方法
疑问同第2个。4 运行时创建新类对象
这个没看明白是什么意思。请指教。
在运行时构造任意一个类的对象
在运行时判段任意一个类所具有的成员变量和方法
在运行时调用任一个对象的方法
在运行时创建新类对象
那么,疑问如下:
1 运行时判断任意一个对象所属的类
在软件中可以体现在哪些方面?个人的理解是防止对象初始化错误(说错了别笑话~~)2 运行时构造任意一个类的对象
任意一个类的对象完全可以NEW出来。与NEW操作相比,反射的优势体现在哪里?有没有劣势?3 运行时判断/调用任意一个类所具有的成员变量和方法
疑问同第2个。4 运行时创建新类对象
这个没看明白是什么意思。请指教。
任意一个类的对象完全可以NEW出来。与NEW操作相比,反射的优势体现在哪里?有没有劣势?很明显,new需要人显示的去编写代码,而使用反射则是一种自动化的工作,例如
使用new: public Object function(String path){
if(path.equals("java.io.File")){
return new File("xxx");
}else if(path.equals("java.lang.Intager")){
return new Intager(0);
......}
使用反射 : public Object function(String path){
try{ return Class.forNmae(“xx”).Instance /*没用IDE,手工编写,调用方法可能不对 */
}catch(Exception e){
.....
}
}
很显然后者更简单,可扩张性更好。
3.运行时判断/调用任意一个类所具有的成员变量和方法
疑问同第2个。
这个在写框架中有比较广泛的使用,比如Hibernate。 Hibernate是如何将SQL查询出来的结果放进对象中的呢,其实就是调用pojo中的set方法,然而,hibernate不会知道你有多少属性,也不会知道有多少的set方法,这里就是使用反射回去到类中的方法,将执行相关的set方法将结果保存进对象。4 运行时创建新类对象
这个没看明白是什么意思。请指教。
这个我的理解如2,在运行时创建对象。