javac 编译?报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

javac 编译?报错

爱吃鱼的程序员 2020-06-08 11:00:03 45

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

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

求补充

分享到
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-08 11:00:23

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

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

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

    输出:

    callingthemethod'abc()'oftheclassB
    callingthemethod'abc()'oftheclassC

    1. importBB.*;importCC.*;publicclassA{publicstaticvoidmain(Stringargs[]){newB().abc();newC().abc();}}
      packageBB;publicclassB{publicvoidabc(){System.out.println("callingthemethod'abc()'oftheclassB");}}
      packageCC;publicclassC{publicvoidabc(){System.out.println("callingthemethod'abc()'oftheclassC");}}

    新手小朋友呀?  

    我们要让他感受到社区的爱,大家快来呀,这里有个萌新

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

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

     

    补充什么?你自己不是都说了吗?

    那如果说我好多个类但是不在一个目录下,我该怎么编译?都放到一个目录下么

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

     

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

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

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

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

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

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

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

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

    这种情况下就是不在同一个文件夹下,可以使用包名来标明文件夹的路径

    0 0
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章