一、Pakages
包名称为所有内容提供了唯一名称。
使用import导入包,就可以使用其中的类。
1. 包
创建包
- 手动创建
创建一个包需要执行以下两个步骤:
1.)将软件包名称放在该软件包中每个文件的顶部
package ug.joshh.animal;
public class Dog {
...
}
2.)将文件存储在具有适当文件夹名称的文件夹中。该文件夹的名称应与您的软件包相匹配:
ug.joshh.animal
package is in ug/joshh/animal
folder
-
IntelliJ自动创建:File → New Package → Choose package name (i.e. “ug.joshh.animal”)
-
在intelliJ中在包中新建java文件: 右键单击包名称→新建java类→命名java文件。自动放入正确的包中并在类中添加pakage声明。
默认包
文件顶部没有显式包名称的任何Java类都将自动视为“默认”包的一部分。但是,在编写真实程序时,应避免将文件保留在默认程序包中(除非这是一个非常小的示例程序)。这是因为无法导入默认包中的代码,并且有可能在默认包下意外地创建了具有相同名称的类。
例如,如果我要在默认程序包中创建“ DogLauncher.java”类,则将无法在默认程序包之外的任何其他位置访问此DogLauncher类。
DogLauncher.launch(); // won’t work
default.DogLauncher.launch(); // doesn’t exist
因此,您的Java文件通常应以显式包声明开头。
2. JAR文件
可以通过创建JAR文件将所有文件“压缩”在一起。该单个.jar文件将包含您的所有.class文件以及其他一些附加信息。
请务必注意,JAR文件就像zip文件一样。完全有可能将文件解压缩并转换回.java文件。JAR文件不能保证您的代码安全。
在项目中导入jar文件,就可以用该jar文件所包含的类了。
创建JAR文件
- 创建一个JAR文件(IntelliJ)
1.) Go to File → Project Structure → Artifacts → JAR → “From modules with dependencies”
2.) Click OK a couple of times
3.) Click Build → Build Artifacts (this will create a JAR file in a folder called “Artifacts”)
4.) Distribute this JAR file to other Java programmers, who can now import it into IntelliJ (or otherwise)
Build Systems
无需每次我们要创建项目时都导入libraries列表或类似的列表,我们只需将文件放入适当的位置,然后使用“Build Systems”自动执行项目设置过程即可。Build Systems的优势在较大的团队和项目中尤为明显,这在很大程度上有利于自动化设置项目结构的过程。
如:Maven,Ant,Gradle
二、Access Control
黑色的一行意思是,如果什么修饰符也不加,则是package private类型,只有本类和同Pakage的类可以访问。
注意:
-
默认包
没有包声明的代码自动成为默认包的一部分。如果这些类的成员没有访问修饰符(即package private类型),由于该成员属于默认包,在其他默认包中的类仍然可以访问这些成员。 -
access仅取决于静态类型
例:
interface中的成员不声明类型也是public。
class如果不声明类型,也是默认为 package private类型,即只能同一个包中的类访问。
因此,在java中,return一个其他对象的方法很常见。因为被return的那个对象是无法被包外类访问到的。
看编译器能否正常运行只要看静态类型即可。
第一行:静态类型符合。将hashair赋值给blackhole。注意,调用hirsute()方法返回hashair对象是不会报错的,因为调用hirsute()方法得到的是一个内存盒,其中存储的是指向hashair对象的地址。我们可以访问这个内存盒,尽管不能直接访问或修改hashair。
第二行:使用静态类型blackhole接口的add方法,没问题。
第三行:接口没有get方法。错误。不能访问到hashair的get方法。
第四行:不能访问到hashair,所以client类根本不知道hashair是个什么东西。错误。