包
是相关类的组合,它是对类的封装
-
作用
-
对类文件进行分类管理
-
给类提供多层命名空间
类名的全称是:包名.类名
-
-
声明
-
写在程序文件的第一行:package包名;
-
一个程序文件只能有一个包声明,并且文件中的所有类都属于此包
-
-
命名惯例
-
使用小写字母,避免和类名或接口名冲突
-
公司使用它们颠倒的域名作为它们包的开头
如一个在example.com的程序员使用com.example.mypackage作为mypackage的包名
-
同一公司的命名惯例可能在公司名域名后包括地区或工程名
-
如果有非法字符或数字开头,可以使用下划线修改
如非法字符用下划线代替,数字开头增加下划线开头,使用保留字的添加下划线
-
-
访问指示符
-
“友好的(Friendly)”或“默认(Default)”的
如果根本不指定访问指示符,它通常称为“友好”(Friendly)访问,这是默认的访问方式。
这意味着当前包内的其他所有类都能访问“友好的”成员,但对包外的所有类来说,这些成员却是“私有”(Private)的,外界不得访问。
包访问权限
-
作用
-
使单个编译单元(源码文件)内的所有类相互间都是可访问的。
-
-
好处
-
允许我们将相关的类都组合到一个包里,使它们相互间方便地进行沟通。
-
强制用一种较有意义的形式对类进行组织
-
-
-
public:接口访问
意味着紧随在public后面声明的成员适用于所有类(包内或包外)访问
公共访问权限
-
作用
-
使所有类都可以访问被其修饰的类和类内的“public”成员
-
-
好处
-
方便向客户程序员开放访问权限
-
-
-
private:不能接触
意味着除了包含这个成员的类中的方法能够访问它外,没有其他Object能访问它。
类访问权限
-
作用
-
将其他类与成员本身隔离起来
-
-
好处
-
允许我们自由地改变这个成员,而毋须关心它是否会影响同一个包内的另一个类。
-
使用private可以控制对象的创建方式,并防止有人直接访问一个特定的构建器(或所有构建器)
-
通过用private修饰构建器,可防止对对这个类的继承
-
//:IceCream.java // Demonstrates "private"keyword class Sundae { privateSundae() {} static Sundae makeASundae(){ return newSundae(); } } public classIceCream { public static voidmain(String[] args) { //! Sundae x = new Sundae(); Sundae x = Sundae.makeASundae(); } }///:~
-
-
-
-
-
protected:“友好的一种”
意味着被它修饰的成员可以在同一包中被访问,也可以被其它包中继承它的类的子类所访问
包和子类访问权限
-
作用
-
阻止来自子类和同包类以外的访问
-
-
好处?
-
-
默认包
如果包含类文件位于同一目录下,并用文件中没有明确的包声明,这样的文件被Java看作那个目录“默认包”的一部分,它(们)与目录下的其他文件都是在同一个包内的。
-
-
如何获取对类中成员的访问
-
使类及其成员成为“public”(公共的)。
-
使用默认访问指示符,并将其类置于相同的包内。
-
继承此类后,继承的类可以访问该类的成员(被private修饰的成员除外)
-
提供“获取/设置”方法,以便读取和修改值
如何访问不同包中的类及其成员
-
使用全限定(指名所属包及其所属的所有上层包)的类名
-
如:java.util.Scannerinput = new java.util.Scanner(System.in);
-
-
导入要访问的类
-
使用import关键字
import包全名(包括完整的包路径);例如,importjava.util.Scanner;
-
-
-
导入要访问的类所属包中所有的类
-
如:importjava.util.*;
-
-
-
编译带有包声明的源文件,javac中可以用到的选项
-
-d文件路径
功能:设置class文件的目标路径。路径必须存在。
注:javac不会创建这个路径。如果一个class是一个package的一部分。javac将把class文件放入对应package名字的子目录内,必要时创建该子目录。例如,如果你定义-dC:\myclasses而class名为com.mypackage.MyClass,那么产生的class文件是C:\myclasses\com\mypackage\MyClass.class。如果-d没有定义,javac将所有class文件放在对应源文件所在的路径。
注意:-d定义的路径不会自动添加到你的userclass路径。
-