1.对包的理解(Package)

为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。Java 中的一个package(包)就是一个类库单元。

包内包含有一组类,他们在单一的名字空间之下被逻辑组织在了一起。 

package的作用就是C++的namespace的作用,防止名字相同的类产生冲突。Java 编译器在编译时,直接根据 package 指定的信息直接将生成的 class 文件生成到对应目录下。例如 package aaa.bbb.ccc 编译器就将该 .java 文件下的各个类生成到工作目录 /aaa/bbb/ccc/ 这个子目录下。

包的作用主要有以下几点:

①把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

②如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,但不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免命名上的冲突。

③包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。 包是逻辑访问控制单元,构建类库单元(安全访问),包名相同的类在一个包内,与类的存放位置无关。 类的访问控制符:public 和包(默认 friendly)。对类的名称进行完全控制(完全限定类名),解决了名称的冲突问题。

包的命名规范:包的命名规范:公司域名反写.project(项目名称).module(模块名称),全部小写。 

类的完全限定名: 公司域名反写.project(项目名称).module(模块名称).ClassName(类名)。

命名空间:包名是定义类名称的命名空间,保证类名的唯一。 类的完全限定名=包名(命名空间).类名 

 

Java——包(概念理解+应用举例)_包名

创建好一个包之后,在这个包内继续创建其他类文件,就如同上图这样的树形结构,文件夹的形式。

2.包的应用举例

Java——包(概念理解+应用举例)_java_02

如上图,我们先创建了一个包,包名为:com.horstmann.corejava,紧接着在包内创建一个不含main方法的类文件Employee,最后我们在上面的默认包(default package)中,创建一个包含main方法的类文件PackTest。详细内容我们来看下面的代码:👇👇👇 

package com.horstmann.corejava;
import java.util.*;
public class Employee { //编译之后此行代码为:package com.horstmann.corejava.Employee
	private String name;
	private int age;
	private String hobby;
	public Employee(String name,int age,String hobby) {
		this.name=name;
		this.age=age;
		this.hobby=hobby;
	}
	public String getName() {
		return this.name;
	}
	public int getAge() {
		return this.age;
	}
	public String getHobby() {
		return this.hobby;
	}
	public void Study() {
		System.out.println("姓名:"+this.name+",年龄:"+this.age
							+",爱好:"+this.hobby+"!!!");
	}
}
import com.horstmann.corejava.*;
import java.util.*;
public class PackageTest { //默认包中,编译后就存放在当前目录下
	public static void main(String[] args) {
		Employee a=new Employee("张三",20,"玩游戏");
		a.Study();
	}
}

①可以看到第一个代码框中的第一行:package com.horstmann.corejava; 这条语句是创建完包,并且在其中创建类文件之后,在程序块的第一行自动生成的,表示Employee类文件在com.horstmann.corejava包下。(package关键字)

②在第二个代码框中的第一行,我们使用 import com.horstmann.corejava.*; 这条语句来导入com.horstmann.corejava包中的所有文件内容,如果只想导入其中的Employee类文件,可以修改为 import com.horstmann.corejava.Employee。(import关键字)

在 .java 源程序中,如果没有 package 关键字,则该编译单元中类生成的 .class 类文件,将存放在当前目录中,称为默认包或未命名包,即(default package)。

代码中,剩余部分的内容,基本上都挺好理解的,下面我们来看一下上述代码的运行结果:👇👇👇

Java——包(概念理解+应用举例)_java_03

我们在上文中,提到了Java 中的一个package(包)就是一个类库单元。它采用的是树形结构,也可以看成是文件夹的形式,下面,我们就上面两段代码,在我的电脑中,查看一下这个文件夹。👇👇👇

Java——包(概念理解+应用举例)_java_04

Java——包(概念理解+应用举例)_包名_05

可以看到,我们的PackageTest类文件是存放在默认包(default package)中的,所以没有具体的包名对应的文件夹,直接就存放在src当前目录下。 

Java——包(概念理解+应用举例)_java_06

我们再来看这张图,大家对比前面那张图里的创建包以及包内类文件的具体名称,包名为com.horstmann.corejava,那么在这个包内的类文件就应该是com.horstmann.corejava.Employee,所以大家对照这个包名和类文件名,就会发现,它完全符合树形结构的文件夹存放形式!!!

大家在查找路径的时候,应该也会发现在bin文件夹和src文件夹的目录下,这部分包文件和类文件几乎是完全一样的。但是实际上这两者还是有区别的。

①对于bin目录下:全称是binary,它里面存放的是二进制文件,就是 .class 文件。

②对于src目录下:全称是source,它里面存放的是 .java 源文件。


那么,以上就是博主总结的有关Java中的包的相关概念及应用。希望为大家学习包提供有效地帮助!!!欢迎大家的访问,喜欢的朋友们,也可以点赞关注!!!感谢大家的支持!!!😀😀😀