• Java包机制package之间调用问题-cmd运行窗口编译运行


    问题:在使用了java包机制(package)后,编译出现错误:找不到或无法加载主类 xxx 的错误提示信息(各种编译不通过)

    先给演示结果:

    编译:javac -d classes src/a/HelloTest.java
    编译同路径下的多个源文件:javac -d . 源文件1 源文件2 ...

    -d classes :指定存放class文件的路径
    src/a/HelloTest.java :在项目路径:D:javacodeHello的基础上指定源文件的路径
    此时D:javacodeHelloclasses路径下已经按照package路径结构生成了class文件

    运行:java -cp classes src.a.HelloTest
    带包运行:java 包名.类名 命令行参数列表

    -cp classes :指定所要调用的.class文件所在路径(包所在的路径)
    src.a.HelloTest :源文件中所设置的package路径(即:包名.类名)

    我的本地项目路径:D:javacodeHello

    源文件HelloTest路径:D:javacodeHellosrcaHelloTest.java

    源文件Hello路径:D:javacodeHellosrcaHello.java

    注意:Java的package机制非常强调路径,所以路径值指定搞清楚了就不会出问题(可能会有很多人会告诉你是CLASSPATH环境变量配置问题,然而它也只是起一个指定路径的作用,告诉java虚拟机你的class文件所在路径然后执行;所以你自己指定是一样的,没有关系。)

    扩展

    Java的package机制的使用关键在于对路径的设置容易出错;

    • 先了解Java编译运行过程

      源文件.java--使用javac编译-->字节码文件.class--使用java解释执行-->特定平台的机器码

    • 包(package)机制
      为解决众多的类库出现类重名的问题Java引入了package机制,提供了类的多层命名空间(类似Windows中的文件夹),将一组功能相关的类放在同一个package下,从而组成逻辑上的类库单元;

      • 使用规则:
        1.package语句必须为源文件的第一条语句(注释除外);
        2.一个源文件中只能有一条package语句;

    注意:

    • 如要编译的源文件存在父类等,编译时出现“错误: 找不到符号”的问题是由于cmd窗口编译都需要手动进行,可以直接在后面追加要编译的源文件,如图: ,用空格隔开即可(误打误撞试了一下,还真可以)

    补充:用package机制实继承时,出现 错误:找不到符号 时,可以使用*代替源文件进行编译:javac *.java

    结论:

    **在源文件有package语句时,无论是编译还是运行首先要确定自己作为调用者所在的路径,即cmd窗口所显示的路径(cd指令转换路径),然后以这个路径为基础设置源文件或者class文件的路径**(问过一些网友和搜索一些结果,大部分回复什么CLASSPATH环境变量配置,但并不是这样,环境配置终究也是指定class文件的存储目录,方便java命令能直接找到,和我们指定一样,所以环境变量不是关键,要自己理解路径之间的结构关系);
    

    补充:cmd相关指令:../ 匹配上一层目录(../../为上两层);* 匹配文件名(如目录下有Hello和HlloTest两个源文件 编译javac Hello*.java会自动匹配到HelloTest);. 表示当前路径

  • 相关阅读:
    MySQL批量删除指定前缀表
    jquery--checkbox全选/全不选
    jquery--监听checkbox多选框是否选中,展示输入框
    shell--脚本之间传值,模仿jenkins内置变量的功能
    python--os模块递归本地目录
    python--脚本添加定时任务
    paramiko--密钥连接远端服务器并递归目录
    django--完成客户端下载文件的三种方式
    python--如何给dict字典类型排序
    python--时间相差8小时问题
  • 原文地址:https://www.cnblogs.com/csyh/p/11966058.html
Copyright © 2020-2023  润新知