关于“reflection”

nenu0 2004-04-29 06:53:42
想通过类名字符串生成类实例,试验程序大致如下:
import java.util.*;
import java.lang.*;
interface Shape{
void draw();
}
class Circle implements Shape {
public void draw()
{
System.out.println("Circle.draw() ");
}
}
public class Shapes{
public static void main(String[] args){
Class c1 = Class.forName("Circle"); // 1
((Circle)c1.newInstance()).draw(); // 2
}
}

为什么提示1,2处有未处理的异常,“Unhandled exception type ClassNotFoundException
...全文
73 8 点赞 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
nenu0 (方枪枪) = tmouse(方枪枪)

自问自答
  • 打赏
  • 举报
回复
nenu0 2004-04-29
确实是……
  • 打赏
  • 举报
回复
tmouse 2004-04-29
用命令行形式编译执行无问题! 不涉及包的问题,很可能是Eclipse的问题!
  • 打赏
  • 举报
回复
nenu0 2004-04-29
我用的是Eclipse,难道……
  • 打赏
  • 举报
回复
nenu0 2004-04-29
是啊……为什么???????
  • 打赏
  • 举报
回复
kinoviti 2004-04-29
为什么做一个包就可以了?
默认的包 不是`default`么,为什么一定要写出一个com?`
请教了
  • 打赏
  • 举报
回复
没问题了:
package com;

/**
* Created by IntelliJ IDEA.
* User: Administrator
* Date: 2004-4-29
* Time: 19:08:52
* To change this template use File | Settings | File Templates.
*/
import java.util.*;
import java.lang.*;
interface Shape{
void draw();
}
class Circle implements Shape {
public void draw()
{
System.out.println("Circle.draw() ");
}
}
public class Shapes{
public static void main(String[] args){
try {
Class c1 = Class.forName("com.Circle"); // 1
((Circle)c1.newInstance()).draw(); // 2
} catch (ClassNotFoundException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (InstantiationException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (IllegalAccessException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
  • 打赏
  • 举报
回复
有没有包名,例如:
Class.forName("java.lang.String")
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2004-04-29 06:53
社区公告
暂无公告