学习内容来自于mooc中华东师范大学课程Java核心技术。
当所有Java类放置在同一个目录下时,类之间的相互调用无需显式声明。但是这样会:
- 同一个目录下文件过多,且文件名称不可重复
- 文件过多,查找和修改不方便
Java支持多个目录放置文件,通过package、import、classpath和jar等机制配合使用,可以跨目录放置和调用Java类。
package:
package和C++的namespace类似。
在Java类文件中第一句话给出包的名称。
比如:我在当前项目下创建一个子目录文件夹,命名为courseTest。那么在该文件夹下创建的文件第一行都会有一句:
package courseTest;
否则就会报错。
包名:和目录层次一样
类的全称:包名+类名
如果我定义一个类,命名为Test。
那么这个类全称则为 courseTest.Test。
这个文件夹的名字就可以称为包(package)名。
包名尽量唯一,需要和目录层次一样。
import:
相当于C++中的include。
若要引用在其它目录下的包,或者Java本身的包,就需要使用import。
按刚刚的例子,如果当前文件和courseTest文件夹在同一目录下,那么引用courseTest.Test类的规则为:
import courseTest.Test;
// 或者 import courseTest.*; 这句话可以引用courseTest下所有文件,但是不包括子文件夹
引用完成后,使用方法和之前正常使用没有差别,写类全称也无妨。
注意:
- import必须放在package后面,类定义之前
- 多个import顺序无关
- 可以用*来引用一个目录下所有类文件,但是不包含其子目录内的文件
- import尽量准确,不推荐使用*
- 当有两个同名类需要使用时,可以通过import引用其中一个,另一个写全称。
jar:
一种扩展名为jar的文件,用于Java可执行文件的传播,实际上是一组class文件的压缩包。
class文件是java文件编译生成的。
项目引入一个jar文件,就可以使用jar文件中所有类(.class文件),无需类的源码(.java文件)。
优势:
- 方便传播
- 简化目录
- 保护源码
- 易于版本控制
命令行编译运行:
类名(全称) | 文件名 | 文件全路径 |
---|---|---|
A.B.C | C.java | c:\m1\A\B\C.java |
D.E.F | F.java | c:\m2\D\E\F.java |
G.H | H.java | c:\m3\G\H.java |
其中,D.E.F 引用了 A.B.C 。
G.H 引用了 D.E.F ,没有直接引用 A.B.C,但是属于间接引用,仍然需要给出路径
编译运行指令为:
类名(全称) | 命令 |
---|---|
A.B.C | 编译 X>javac c:\m1\A\B\C.java |
A.B.C | 运行 X>java -classpath .;c:\m1 A.B.C |
D.E.F | 编译 X>javac -classpath .;c:\m1 c:\m2\D\E\F.java |
D.E.F | 运行 X>java -classpath .:c:\m1;c:\m2 D.E.F |
G.H | 编译 X>javac -classpath .:c:\m1;c:\m2 c:\m3\G\H.java |
G.H | 运行 X>java -classpath .:c:\m1;c:\m2;c:\m3 G.H |
其中X>表示命令行
编译命令解释:
javac (-classpath .;c:\m1) c:\m1\A\B\C.java
javac表示编译。
(-classpath .;c:\m1)表示引用类的路径,不用加括号,其中 -classpath 可以简写为 -cp 。后面的路径可以解释成:
- . 为当前路径
- ; 多个路径的分号
- c:\m1 引用类的路径
运行命令解释:
java -classpath .:c:\m1;c:\m2 D.E.F
java表示运行。
(-classpath .;c:\m1)表示引用类的路径加上本类路径,不用加括号,其中 -classpath 可以简写为 -cp 。后面的路径可以解释成:
- . 为当前路径
- ; 多个路径的分号
- c:\m1 引用类的路径
- c:\m2 本类路径
访问控制
java访问权限
有四类:
- private,私有的,只能本类访问
- default, 默认的,同一个包内访问(可忽略不写)
- protected,同一个包、子类均可访问
- public,公开的,所有类可以访问
适用范围:
- 都可以用来修饰成员变量、方法、构造函数
- default和public可以修饰类
同一个类 | 同一个包 | 不同包的子类 | 不同包的非子类 | |
---|---|---|---|---|
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |