Java的源代码文件通常被称作编译单元,每个编译单元只能有一个public类。编译单元的后缀名为.java,名称为public类名。每个编译单元的非public类在包外是不可见的(除public外最有权限的为包访问权限),它们是public类的辅助类。
在编译一个编译单元时,会为每一个类生成一个class文件,因此,编译少量的.Java编译单元会生成大量的.class文件。
包是一些类文件的集合,每个类文件包含一个public类和若干非public类。包给类文件提供了一个保护伞,想要使用这个类,就必须import这个包,或者给出完整包名+类名。想要让一个类包含于某个包,只需在编译单元文件的开头用package语句。
所有事物都具有访问权限,包括 public、protected、private,即便不指定访问权限,也会自动默认地指定一个包访问权限。
1.包访问权限
对包内成员为public,对包外成员为private。使得包内的成员可以互相作用。可以说,包访问权限使得把类全局在一个包中的做法提供了一种合理的解释。
2.public
为所有人提供了访问权限。
3.private
只有该类的成员可以访问。
4.protected
在包访问权限之外为包外的子类提供了权限。
打通了包与包之间的一个通向子类与父类的一个通道。
类的访问权限
一个编译单元只能有一个public类,代表了一个公用接口,使用import PackageName.ClassNme即可。
类的访问权限只有两种,public和包访问权限。
final关键字
final关键字笼统的概括为恒定不变,但在具体情况中也有细微不同,其主要适用情景为三大类:数据、方法、类。
1.final数据
基本类型的final数据相当于一个常量,需在定义的时候初始化,并且永远不变。也可以在类 中定义一个空白final实例域,但必须在构造器中初始化,这样才能确保final数据必须被初始化的原则不被打破。
对象引用的final数据意味着这个引用永远不变,但其所引用的那个实例却是可以编辑的。
2.final方法。
Java还允许将方法参数声明为final,含义日后补充。
用final关键字修饰方法有两大意图,第一是为了优化效率,但在新版JVM中已经不被推荐。第二大意图是不希望这个方法在继承中被覆盖。
与final方法相比,private方法直接对子类不可见,就算子类试图重载,也不过是定义了一个同名的方法。也因为不可见,所以给private方法添加final修饰并没有什么意义。
3.final类
final类的含义很简单,final类不会被继承,也就不会被方法重载,其实例域和方法也就不会被更改,所以其成员是隐式final。