一、包(package)
1、包与包名
包:是将多个类组织在一起的集合。
使用包的原因是确保类名的唯一性,同一个包中的类名不能重复。
包名:用一个网络域名以逆序的形式作为包名。比如abc.edu.cn,逆序得到包名为cn.edu.abc,然后可以追加一个工程名corejava,在把类Employee放在这个包里,那么这个类的完全限定名为:cn.edu.abc.corejava.Employee
2、类的导入
一个类可以使用所属包中的所有类,以及其他包中的公共类。(public class)
两种方式访问另一个包中的公共类:使用完全限定名;使用import语句。
第一种方式:使用完全限定名:
java.time.LocalDate today = java.time.LocalDate.now();
第二种方式:使用import语句
import java.time.*;
LocalDate today = new LocalDate.now();
注意:使用"*"只能导入一个包中的所有类,而不能使用import java.*或import java.*.*导入以java为前缀的所有包。
如果导入的多个包发送类名冲突的时候,可使用完全限定名,即类名前加上完整的包名。
3、在包中增加类
要想将类加入包中,就必须在源文件的开头用package引入包名
package cn.edu.abc.corejava;
public class Employee{
.......
}
如果源文件开头没有package语句,则这个源文件的类属于无名包,无名包没有包名。
将源文件放在与完整包名匹配的子目录中,例如cn.edu.abc.corejava包中的所有源文件应该放置在子目录cn/edu/abc/corejava中(windows中则是cn\edu\abc\corejava)
在其他源文件中利用import cn.edu.abc.corejava.*;
编译器处理文件命令: javac cn/edu/abc/corejava/Employee.java
解释器加载类命令:java cn.edu.abc.corejava.Employee
注意:
编译器编译的是文件,文件名使用目录分割符与java扩展名
解释器加载的是类,类名是以小数点分割无扩展名
4、包访问
标记为public的部分可以由任意类使用,标记为private的部分只能由定义他们的类使用,如果没有指定public或private,这个部分(类、方法、变量)可以被同一个包中的所有方法访问。
public类可以没有,但是如果有的话,public修饰的类名必须与源文件名保持一致;并有且仅有一个!!
将原来的EmployeeTest.java拆成两个public类
二、JAR文件
java归档(JAR)文件时将应用程序打包后形成的一个单独文件,JAR文件是zip压缩格式的文件。
1、创建JAR文件
可以使用JAR工具制作JAR文件(在默认的JDK安装中,这个工具位于jdk/bin目录下)。创建一个新的JAR文件常用命令如下:
jar cvf jarFileName file1 file2
2、清单文件
每个JAR文件除了类文件,图像和其他资源外,还包含一个清单文件(manifest),用于归档文件的特殊特性。
清单文件被命名为MANIFEST.MF,它位于JAR文件的一个特殊META-INF子目录中。
3、命令行选项的说明
java开发包(JDK)的命令行一直以来都使用单个短横线加选项名的形式,但jar命令是个例外,这命令遵循经典的tar命令选项格式,而没有短横线。
从java9开始使用多字母前加两个短横线
jar --help
三、类设计技巧
1、一定要保证数据私有
2、一定要对数据初始化。java不会初始化局部变量,会对对象的实例字段进行初始化。最好不要依赖系统的默认值,而是应该显示的初始化所有的数据。
3、不要在类中使用过多的基本类型
4、不是所有的字段都需要字段访问器与字段更改器
5、优先使用不可变的类