无为也,则用天下而有余;有为也,则为天下用而不足🔬
目录
Scala代码演示
Java代码演示
总结
写在前面:
包(package)不是约定源文件存放的位置,而是约定源文件编译后生成的字节码文件存放的位置。
Java和Scala源文件中第一行package xxx.xxx.xxx可以和源文件路径不一样
scala代码演示:
1.在com.aaa.bbb目录下新建Scala_PackageTest源文件
第一行中package.com.aaa.bbb
表示的含义是这个源文件经过编译后字节码文件存放的位置
2.编译,运行后,查看target目录下字节码存放路径:
3.源文件位置不变还在com.aaa.bbb
将代码中的包路径修改成bbb2
重新编译运行,查看target目录下字节码存放路径:
所以说,源文件位置和package路径不一定说要一致,只不过是idea默认生成的一致,Java中也是!!!
Java代码演示:
1.在aaa.bbb路径下新建测试类
2.编译运行,查看target目录下字节码存放路径:
3.修改package包路径,idea报错。这是因为idea这个工具它要求源码路径和字节码路径要相同。其实Java是没有这个要求的。
4.将上述代码复制到记事本中,另存为Java_PackageTest.java
文件。
5.在cmd中编译,执行。
6.分析原因:
字节码文件生成了,为啥会报错呢?
这是因为,在java
这个命令执行的时候会把Java_PackageTest.class这个字节码文件加载到jvm虚拟机里面去,这个时候就会找这个字节码文件在什么位置,他是通过classpath这个环境变量来找的,在jdk1.6之后不需要配置,他有个默认值是.也就是代表当前路径,总的来说就是,执行java Java_PackageTest
他会在当前目录下面找字节码文件。
当前目录下有字节码文件啊,为啥还执行不了呢?
注意了,这个字节码文件可不应该在当前目录下,我们在代码中写了,字节码文件应该存放的包路径,所以他会在那个包路径中去找,找不到,所以就报错了。
7.我们可以在当前路径下带包编译。javac -d . Java_PackageTest.java
,让它自动生成包结构。
8.带包名执行成功。
总结:
所以说在Java和Scala中package指的是编译后的字节码文件的存放位置,不一定要和源文件的存放位置一样
,只不过在idea工具中要求Java的字节码文件存放位置和源文件存放位置要相同罢了。