Circle2.java:package p1;
public class Circle2{
double radius;
Circle2(){
radius = 1.0;
}
}
然后再另一个文件TestCircle2.java中调用
package p1;
public class TestCircle2{
public static void main(String[] args){
Circle2 circle1=new Circle2();
System.out.println("The area of the circle of radius"+circle1.radius+" is "+circle1.getArea());
}->javac Circle2.java
->javac TestCircle2.java 时显示找不到符号Circle2,这是什么原因了?

解决方案 »

  1.   

    在同一个文件夹java下,都定义为 package p1;
      

  2.   

    javac p1.Circle2.java
    javac p1.TestCircle2.java
    这样?
      

  3.   

    假设你的目录结构是
    src 
      -- p1
       --  Circle2.java
       --  TestCircle2.javacmd到src下
    D:\Test\src>javac -d .\ p1\Circle2.javaD:\Test\src>javac -d .\ p1\TestCircle2.javaD:\Test\src>java p1.TestCircle2The area of the circle of radius1.0 is 1.0
      

  4.   

    我的目录结构d:Java\p1\Circle2.java
           d:Java\p1\TestCircle2.java
    javac -d .\ p1\Circle2.java,这样编译的语句没见过了,而且如图,命令有误了,本人愚钝,求详细赐教啊
      

  5.   

    p1是java文件夹下的另一个文件夹么?
      

  6.   

    楼主是用文本编辑器写的java代码?
      

  7.   

    用Edit plus 也不是不可能
      

  8.   

    同一个文件夹下的话就直接用
    有子文件夹的话就用package和import
      

  9.   

    我试了下可以编译运行啊!javac -d . Circle2.java TestCircle2.java
    java p1.TestCircle2结果:The area of the circle of radius1.0 is 3.14LZ编译时-d后指明包要存放的路径,否则即使能生成.class文件也无法运行的!PS:正常情况下不会出现LZ遇到的问题,JAVA现在不需要设置环境变量了。莫非LZ更改了环境变量之类的东西?
      

  10.   

    请楼主在-d后面留个空格+圆点+空格+*.java
      

  11.   


    确实如此,基本解决问题了,白天在上课,刚研究了下大家的建议,总结如下:
    首先我是用的notepad++编的java文件
    目录如下:
    d:\java\Circle2.java  TestCircle2.java (虽然都定义为package p1;貌似没必要新建文件夹p1将这两个放在里面)还是不太懂这
    我运行命令如下:
    d:\>javac -d . \java\Circle2.java
    d:\>javac -d . \java\TestCircle2.java
    d:\>java p1.TestCircle2  //这里必须是p1.TestCircle2是因为TestCircle2的包名是p1,必须要带包名?
    运行结果正确,但发现生成的Circle2.class 和TestCircle2.class都在D:\p1里面,这是为什么?为什么生成的class文件不是和java文件在一起?
      

  12.   

    能運行了,是嗎》
    p1是兩個.java文件生成的字節碼的包名,相當于C++里的命名空間,包名+類名才是一個類的完整名字!
    要想在其它包中使用Circle2和TestCircle2類就必須加包名,一般是使用import p1.XXX;之類的。
    當然,在p1包內部就無須導入p1包了!運行時p1.TestCircle2就是字節碼的全名,所有必須要帶p1;
    Circle2.class 和TestCircle2.class都在D:\p1里面,因為javac -d . 指定了包的生成路徑:在當前目錄下,當前目錄就是d:\。-d參數后就是指明包的生成路徑的,你可以指定到c盤即javac -d C:\ XXX.java如果要想.class文件與.java文件在同一個目錄里,那麼這個目錄路徑就必須為包名,比如將java設置為包名而非p1: package java;明白否??
      

  13.   

    soga ,完全明白了
    d:\>javac -d d:\Java \java\Circle2.java
    d:\>javac -d d:\Java \java\TestCircle2.java
    d:\>cd java
    d:\Java>java p1.TestCircle2
    运行结果正常,也就是-d 后面,两个空格之间的就是保存路劲," . "就是当前目录,类似于配置环境变量classpath " .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;" 里面的"."的作用吧,
    学到了些东西,谢谢大家了,结贴了