package test;
class Test{
protected void f(){
System.out.println("f()");
}
public void f1(){
System.out.println("f1()");
}
}
public class Test2 extends Test{
public static void main(String[] args){
new Test().f();
}
}
为什么我只有执行java test.Test2才能运行 !
我的classpath是 当前目录.
而且我的Test2.java是和test在一个文件夹.
我把test.class和Test2.class已经放进test文件夹了!
它的错误是Exception in thread "main" java.lang.NoClassDefFoundError: Test2.

解决方案 »

  1.   

    因为你的类是放在test package中,所以java test.Test2才能运行。
    java Test2 要报Exception in thread "main" java.lang.NoClassDefFoundError: Test2.
    错。
      

  2.   

    但是虚拟机不是会自动从你的classpath的根目录开始查找class文件吗?
    这样说得话,它不是会自己找到.
      

  3.   

    他找到class没问题,编译的时候找不到test包
      

  4.   

    要搞清楚包是怎么回事, 建议你彻底忘掉"当前文件夹"这个概念! 一切类和包都应放在classpath下面.很多JAVA入门教材都用"当前文件夹"来代替classpath和包, 其实很容易把初学者糊涂.
      

  5.   

    还是不太懂! 谁能解释的清楚一点!
    难道一定要 java java package.classname吗?