Java中的包与类(1)-包
小tips:阅读此文需要有一些些Java的知识点,以下操作均在终端的环境下输入命令,就是cmd。当你使用Windows的时候按住Shift+鼠标右键可以打开当前文件夹路径的cmd
Java中的包与类(1)
Java中的包
你可以简单地把包理解为文件夹,把一些相似的类都包含在一个文件夹中。而且引入包的概念,提供了类的多层命名空间,就可以解决类的命名冲突。
尝试以下步骤
请尽量使用最原始的方法来运行Java程序
- 在记事本或者vi编辑器中书写
1 |
|
在该文件下输入命令
1
javac -d . Hello.java
该命令是使编译器将该Java文件转换为字节码文件(当前目录下),如果编译Java文件时不使用- d 选项 ,编译器不会为Java源文件生成相应的文件结构。 鉴于此,本书推荐编译 Java 文件时总是使用 -d 选项 ,即使想把生成 的 class 文件放在当前路径下,也应使用- d. 选项, 而不省略- d 选项。
在该文件下输入命令
1
java less.Hello
这样系统就能输入正确的Hello world。
但是假如你进入less的文件夹输入
1
2java less.Hello
java Hello都会有问题。仅仅当你在less同级的目录下时输入正确的指令才能正确的使用这个程序。
你再次创建一个程序(用记事本或vi编辑器在当前目录下生成一个Hello1.java文件,里面的内容如下)
1
2
3
4
5public class Hello1{
public static void main(String[] args){
System.out.println("Hello World");
}
}你创建一个文件夹classfile文件夹
在该文件下输入命令
1
javac -d classfile Hello1.java
这个命令就会在classfile文件夹下生成class文件
在该文件下输入命令
1
java classfile.Hello1
你会发现系统会告诉你找不到主类。假如要运行这个程序,你只能进入classfile文件中输入
1
java Hello1
才能正常运行。
假如运行这些步骤有问题,大概率是你Java的CLASSPATH环境变量有问题,当使用jdk1.8的时候,我建议取消设置这个环境变量
分析以上步骤
如果你不知道什么是Java的关键字,可以参考我的知乎Java入门链接在这
我们可以总结出,当使用了package
关键字之后。我们必须使用包名.类名来运行这个程序。这是为什么呢?当 虚拟机要装载 lee. Hello 类 时, 它会依次搜索 CLASSPATH 环境变量所指定的系列路径, 查找这些路径 下是否包含lee 路径, 并在 lee 路径下查找是否包含 Hello. class 文件。 虚拟机在装载带包名的类时,会先搜索CLASSPATH 环境变量指定的目录, 然后在这些目录中按与包层次对应的目录结构去查找class文件。
同一个包中的类不必位于相同的目录下例如我们有 lee.Person
和 lee.PersonTest
两个类,他们完全可以一个在C盘,一个位于D盘。只要让CLASSPATH的环境变量里包含这两个路径,虚拟机就会自动搜索CLASSPATH下的子路径,把它们当成同一个包下的类来处理。
不是把生成的class文件放在某一个目录下,这个目录就成了这个类的包名这是错的,只有通过在Java源文件中通过package指定同一个包和CLASSPATH环境路径下该class处于对应的路径下(究竟什么才是同样的路径可以看上面那一段)。他们才是同一个包中。
包里面可以再套一层包,但是使用时,依然不能省略着写,必须全部写。子包和父包再用法上不存在任何关系。
只能有一个package
,但是可以有多个import
。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!