× 面向对象的设计中有一个重要的原则:将会变和不会变的东西分离开。Java提供了四个访问控制符来帮助实现这个原则。
× import语句提供了一种管理名字空间(name spaces)的能力。
× Java源代码文件称为一个编译单元,编译的强行规定:每个编译单元的文件名后缀必须是.java,文件中必须有一个public类的类名与文件名相同,每个编译单元只能有一个public类,也可以没有public类。
× Java使用操作系统的层次文件结构来组织包的结构。
× Java解释器找寻引用的类的过程:找到CLASSPATH环境变量,这个环境变量中包含了一个或多个目录,这些目录会被当作根目录供编译器搜寻.class文件。从每个根目录出发,解释器会将package名字(要引用的类所在的包)里的每个点都换成协杠(根据操作系统的不同换成/或者\),这样就生成了以classpath为根的相对路径,再把这些相对路径与classpath里面的各条目录相连,才开始寻找.class文件。
× Java强制package语句必须是文件里的第一个非注释行。
× classpath也可以这样写:CLASSPATH=.;D:\JAVA\LIB;C:\flavors\grape.jar
× 每次创建package给它起名时,你也就同时隐含地设置了一个目录结构,源文件必须保存在这个目录中,而这个目录又必须在classpath下面。
× 类成员有四种访问权限,其中:
friendly:通常称之为package访问权限,同属一个包的类都可以访问这个成员。一个编译单元中的类肯定同属于一个package(因为只能有一行package语句)。package访问权限能让你将相互关联的类组织成package,这样,赋予了package权限的类成员可以相互访问的权利,你就拥有了这个package的代码。只有你的程序可以对你的其他程序进行package权限的访问,这是很合逻辑的。可以说,有了package权限,将类组织成package才有意义。
protected:所处理的是继承(inheritance)的概念,继承类如果继承了另一个package里的类,那么继承类自动地拥有了基类中的所有成员,但是继承类中新增、重载的方法只能访问从基类中继承过来的public和protected成员。当让,如果在同一个包中,继承类中新增、重载的方法还能访问从基类中继承过来的friendly成员。记住,protected权限仅仅表述了继承类会拥有基类的protected成员,与其他的类无关。
× 类的两种访问权限:
每个编译单元内要么没有public类,要么只有一个public类,你可以添加任意多个package权限的类来提供辅助功能。Package权限的类只能被同一个包内的其他类创建对象(对于包外的类,能看到,但是不能创建这个类的对象),可以把不想让客户程序员使用的类赋予package权限,这样你可以随意的修改这些package权限的类。
但是,如果一个类是package权限,这个类包含有一个public的static成员,那么,客户程序员即使不能创建这个类的对象,但是还是可以访问这个类的public static成员。
× 类的构造方法可以是private权限:
//客户不能直接实例化类的对象,需要访问类的静态方法,这样,就可以将一些可能会改变的初始化操作放在静态方法里面,在构造方法里只放纯粹的类初始化代码。
class Soup {
private Soup() {}
public static Soup makeSoup() {
return new Soup();
}
}
//singleton模式
class Soup {
private static Soup ps1 = new Soup();
public static Soup access() {
return ps1;
}
}