MacOS下Java跨包访问静态方法:编译及执行命令咨询
嘿,我来帮你搞定MacOS下的编译和执行步骤,先理清楚关键问题,再给你具体命令:
先修正一个重要错误
你的B类里的import语句写错啦!java.primespackage.mersennepackage.*是无效的——java.开头的包是Java标准库专属的,不能用来定义自己的类。根据你的A类包名mersennepackage以及class文件存放路径,应该把import改成:
import mersennepackage.*;
或者你也可以不用import,直接用全限定类名调用方法:mersennepackage.A.foo();,这样也能正常运行。
编译B.java的命令
假设你的B.java放在/Users/usr/Desktop目录下(如果不是,把路径换成B.java的实际位置),打开终端执行:
javac -cp /Users/usr/Desktop/primespackage B.java
- 解释:
-cp(全称-classpath)用来指定编译器查找依赖类的路径。你的A类class文件在/Users/usr/Desktop/primespackage/mersennepackage里,mersennepackage是包目录,所以类路径要指向包含这个包目录的父目录——也就是/Users/usr/Desktop/primespackage,这样编译器才能找到mersennepackage.A类。
执行B类的命令
编译成功后,同样在终端执行:
java -cp .:/Users/usr/Desktop/primespackage B
- 解释:这里的类路径需要包含两个部分:
.:表示当前目录,用来找到编译生成的B.class文件;/Users/usr/Desktop/primespackage:还是A类所在的类路径,确保运行时能找到A类。
注意哦,MacOS下类路径的多个目录用冒号:分隔,Windows才用分号,别搞混!
额外情况说明
如果你的B.java不在/Users/usr/Desktop,可以直接用绝对路径编译,比如:
javac -cp /Users/usr/Desktop/primespackage /Users/yourname/Documents/B.java
执行的时候,只要把类路径里的.换成B.class所在的目录就行,比如:
java -cp /Users/yourname/Documents:/Users/usr/Desktop/primespackage B
内容的提问来源于stack exchange,提问作者usr123
相关产品推荐
相关产品推荐

