有没有知道java反射及类加载细节的前辈呢?

立志做一个佳娃~ 2013-01-31 12:39:29
public static Action createAction(String className) {
try {
return (Action) loadClass(className).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}


public static Class loadClass(String className) {
Class clazz = null;
try {
clazz = Thread.currentThread().getContextClassLoader().loadClass(
className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if (clazz == null) {
try {
clazz = Class.forName(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return clazz;
}

为什么要if判断一下???也就是什么情况下clazz是空的呢?
...全文
91 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rockets311 2013-01-31
  • 打赏
  • 举报
回复
根据你给的这个className木有找到类的时候就空了
rockets311 2013-01-31
  • 打赏
  • 举报
回复
也可能空,先Thread.currentThread().getContextClassLoader().loadClass( className);用当前线程的ClassLoader去装载这个className对应的类,在这里得到不空之后就不进下一个Class.forName(className);了嘛!
sgyyz 2013-01-31
  • 打赏
  • 举报
回复
如果你那个类已经实例化了,在当前线程中存在他,那可以直接找到。 但是如果你在当前线程中没有这个类,那么只有通过名字去实例化一个他。
爱T 2013-01-31
  • 打赏
  • 举报
回复
Class.forName(String className)返回指定类名的class对象 如: reflect1 = Class.forName("com.freeplatform.zichan.reflect.Reflect_00"); System.out.println("类名称:" + reflect1.getName()); 如果你指定的这个类名路径找不到对应的类,那就是null; 明白了吗???再想想!!!
  • 打赏
  • 举报
回复
难道用Class.forName(className);就不空了吗?都不空为什么还要2次验证呢?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧