Java中源文件声明规则,以及java包,import关键字的使用。
1. 源文件声明规则
当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意以下规则:
a.
一个源文件中只能有一个 public 类
。
b.
一个源文件可以有多个非 public 类
。
c.
源文件的名称必须和 public 类的类名保持一致
。例如:源文件中 public 类的类名是 App,那么源文件应该命名为App.java。
d.
如果一个类定义在某个包中,那么 package 语句应该在源文件的首行。
e.
如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间。如果没有 package 语句,那么 import 语句应该在源文件中最前面。
f.
import 语句和 package 语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
2. Java包
包主要用来对类和接口进行分类。当开发 Java 程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。Java中包的关键字是package
。
包语句的语法格式为:
package pkg1[.pkg2[.pkg3…]];
包的作用:
0、
类似于C++中的命名空间namespace
。
1、
把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
2、
如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突
。
3、
包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
案例:如下图,顶级包_07_JavaPackage中存在两个子包_071_Package1和_072_Package2,每个子包下存在一个同名的类Person。那么如何在App.java中引用_071_Package1中的类Person呢???
答案:直接通过import语句导入即可 或 通过包的层次关系直接来定义也行。
// App.java
package _07_JavaPackage;
import _07_JavaPackage._071_Package1.Person;
//import _07_JavaPackage._071_Package1.*; // 导入包中的所有类
class Demo {
public Demo() {
Person p1 = new Person(101, "Zhang");
// 也可以不通过import语句进行导入,而是直接通过包的层次关系来定义
_07_JavaPackage._072_Package2.Person p2 = new _07_JavaPackage._072_Package2.Person(101, "Wang");
p1.show();
p2.show();
}
}
public class App {
public static void main(String[] args) {
Demo demo = new Demo();
}
}
3. import语句
在 Java 中,如果给出一个完整的限定名,包括包名、类名,那么 Java 编译器就可以很容易地定位到源代码或者类。import 语句就是用来提供一个合理的路径,使得编译器可以找到某个类。
为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用 “import” 语句可完成此功能。在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:
import package1[.package2…].(classname|*);