我在E:\my\yuanqian下建立了C.java和D.java
但D编译不通过,我的问题是C和D都在同一个package下的啊,怎么D编译的时候提示说找不到符号C,
下面是C和D 的代码:
C.java:
package yuanqian;
public class C {
public int a;
private int b;
protected int c;
int d; // "Friendly"
public void f1() {}
private void f2() {}
protected void f3() {}
void f4() {} // "Friendly"
public static void main(String args[]) {
C test = new C();
test.a = 1;
test.b = 2;
test.c = 3;
test.d = 4;
test.f1();
test.f2();
test.f3();
test.f4();
}
}
D.java:
package yuanqian;
public class D {
public D() {
C test = new C();
test.a = 1;
//! test.b = 2; // Can't access: private
test.c = 3;
test.d = 4;
test.f1();
//! test.f2(); // Can't access: private
test.f3();
test.f4();
}
}
但D编译不通过,我的问题是C和D都在同一个package下的啊,怎么D编译的时候提示说找不到符号C,
下面是C和D 的代码:
C.java:
package yuanqian;
public class C {
public int a;
private int b;
protected int c;
int d; // "Friendly"
public void f1() {}
private void f2() {}
protected void f3() {}
void f4() {} // "Friendly"
public static void main(String args[]) {
C test = new C();
test.a = 1;
test.b = 2;
test.c = 3;
test.d = 4;
test.f1();
test.f2();
test.f3();
test.f4();
}
}
D.java:
package yuanqian;
public class D {
public D() {
C test = new C();
test.a = 1;
//! test.b = 2; // Can't access: private
test.c = 3;
test.d = 4;
test.f1();
//! test.f2(); // Can't access: private
test.f3();
test.f4();
}
}
如果是,那你的classpaht是怎么设置的?
如果你的classpath里有.;那你在CMD下当前目录是什么?在编译时,如果一个类调用另外一个类,那么编译器会先载入那个类,在你这种情况,编译器载入是没有问题的(如果你的classpath里有.;且那你在CMD下当前目录是E:\my\yuanqian);接头编译器会检验类的正确与否,即package yuanqian; 然而,它发现类C应该在E:\my\yuanqian\yuanqian下才对,于是会报错。
解决办法,把二个类的package yuanqian全删除如果你的classpath里有.;且那你在CMD下当前目录是E:\my;那么你根本就不可能会编译D类,因为会找不到D类的。
(具体是第几章,记不得了),可以去看看
当前目录是E:\my\yuanqian
当我在E:\my\yuanqian 下javac D.java时抱错..
但C和D都在同一个package下的啊..!
编译器载入C类时,会检查,就是package yuanqian;这句,因为你的classpath是E:\my\yuanqian,所以它会认为C类应该在E:\my\yuanqian\yuanqian才对。而C类去不在这个路径,所以它就报错了!
如果你是用JDK的话,
在CMD下,你的当前目录是E:\my\yuanqian
所以二个就是一样的了啊
import yuanqian.*;
或者你的classpath里有E:\my\yuanqian这个
我在E:\my\yuanqian下javac C.java通过
在E:\my\下java D.java也通过了啊
1.在包的上级目录编译程序,如:切换到"e:\my"目录下运行"javac yuanqian\D.java"
2.将你的包的上级目录加入到classpath里面,如:"set classpath=%classpath%;e:\my"
3.指定classpath,如:"javac -cp e:\my D.java"BTW,JB里面包好长的路径啊....
比如"package yuanqian;"就是告诉java系统,我这个文件里面的所有类你都要到当前目录下的名字是:yuanqian的目录里面找。那么java编译的时候先读取java文件,然后会加载文件里面用到的所有类,包里面的类如果没有编译就会先编译这个文件,所以你在e:\my\yuanqian为当前目录的情况下可以编译通过C.java因为C.java里面用到的类是Java基本类,都可以找到,编译D.java的时候,他发现你用到C类但是却找不到C类(因为你的当前目录为:e:\my\yuanqian,当前目录下面并没有yuanqian这个包(目录))。
当你将D.java复制到包(yuanqian)的上层目录的时候肯定可以编译通过的,因为你的当前目录现在是:e:\my,当前目录下有个目录(包)yuanqian ,而且yuanqian里面有C.java或者C.class,所以能编译通过,你要是不信你把e:\my\yuanqian目录里面的C.java,C.class删除掉你在编译,肯定不能通过.
如果你的包都存放在e:\my目录下面建议你把e:\my加入classpath,这样你以后不论在那里都可以编译和运行程序了。
可是运行的时候不对了...
但D编译不通过,我的问题是C和D都在同一个package下的啊,怎么D编译的时候提示说找不到符号C,
下面是C和D 的代码:
C.java:
package yuanqian;……============================
命令行进入E:\My目录,然后进行编译和执行:
E:\My>javac yuanqian/C.java
E:\My>javac yuanqian/D.java
E:\My>java yuanqian.C带包情况下的命令行编译和执行都是像这样写的。和classpath没有任何关系,-_-
我看见C和D都是以public 作修饰符的啊小弟愚见,说错了不要笑
呵呵
把e:\my加入classpath了,现在可以在e:\my\yuanqian下编译C.java和D.java了
可是运行的时候不对了...
运行是要找.class文件。你的包是package yuanqian;所以应该把生成的.class放到那个目录下,即把C.class和D.class
文件复制或剪切到E:\my\yuanqian。