8
回答
javac 编译
华为云实践训练营,热门技术免费实践!>>>   

javac编译的时候报找不到符号的错误 ,我想知道其中原因(一个类引用另外一个类)

a类要被编译成class文件,但是a类中引用b类,找不到b类的class文件,所以会报错,

求补充

<无标签>
举报
13293849453
发帖于2个月前 8回/133阅

如果说有好多个类 不在同一个目录下,  布局编译情况如何?

比如有两个类要用到: B.java 和 C.java,以下布局可做参考.

  1. 先在 A.java 所在的目录下,分别建立两个子目录 BB 和 CC。
  2. 将 B.java 放到 BB 下。
  3. 将 C.java 放到 CC 下。
  4. 将cmd 置于 A.java 所在的 目录下,
  5. javac A.java 产生 A.class
  6. 再以 java A 运行。

输出:

calling the method 'abc()' of the class B
calling the method 'abc()' of the class C

  1. import BB.*;
    import CC.*;
    
    public class A{
    public static void main(String args[]){
    new B().abc();
    new C().abc();
    	}
    }
    package BB;
    public class B {
    
    public void abc(){
    System.out.println("calling the method 'abc()' of the class B");
    	}
    }
    package CC;
    public class C{
    
    public void abc(){
    System.out.println("calling the method 'abc()' of the class C");
    	}
    }

估计, 编译器找不到b类的定义。所以, 要检查一下:

  1. b类的定义是否写在 a.java 的文档里: class b{...}
  2. 若没有写在同一个文档里,再检查一下,在这同一个文件夹内, 是否有一个文档名叫:"b.java",那里写着 b 类的定义:public class b{...}

 

大量稳定供应国内个人终端代理IP,可对公签合同,价格含税。

 

寻合作对象:大数据爬虫、自媒体补量、广告联盟。Q3500891807

1、使用IDE进行编译(ide会自动查找不同目录中的源码依赖)

2、使用ant/maven编译,可以指定源码目录,编译脚本会自动递归查找的

3、如果一定要使用javac命令,可以按照如下步骤做:

    a、dir /B /S /X src\*.java > filelist.txt          将所有的源码文件生成文件清单存储到filelist.txt中(src是源码的根目录)

    b、执行编译命令javac -cp 依赖的jar和class -d class文件输出目录 -g ......@filelist.txt      注意最后的@filelist.txt,表示同时编译filelist.txt中的全部源码

最后就可以到输出目录中找到class文件了

PS:你可以按照我上面说的最后一个重新编译jdk源码,因为jdk源码默认是不带-g参数的,所以源码很多时候调试会很不方便,比如方法参数都是arg0、arg1这种,还有就是没有局部变量等。。。。

顶部