3.3 包:库单元
3.3.1 命名空间
- Java引入了包的机制,以提供类的多重命名空间,同时也负责类名空间管理。把因不同目的和不同工作而开发的类放在不同的包中,即使在出现相同的类名的时候,也可以很好地管理。包可以有一定的层次,对应着外存上的目录结构。
- 为了区别于各种平台Java中采用了“.”来分隔目录,与域名地址不同的是,Java将主类从左侧写起。
- Java中提供了大量的包(类库),如java.util、java.lang、java.swing
3.3.2 package
- package语句放在Java源程序文件的第一行,指明该文件中定义的类存放到哪个包中。程序中可以没有package语句,此时类将存放到默认包中。例如:
package pkg1.[pkg2.[pkg3.…]];
package access.mypackage;
- 显然package语句最多只能有一条。
- 描述包的字符都用小写。
- public class: 在每个编译单元中有且仅有一个公共类。
- public class name: 类的名字与文件的名字相同,包括大小写,后缀名为.java。
- additional classes: 主类的支持类。
例如:
package access.mypackage;
public class MyClass {
//…
}
- MyClass是命名在access.mypackage包中的,要想使用这个类,需要用import语句来导入该类。
3.3.3 import语句
- import语句的作用是引入所需的类,以供在程序中使用类库中现有的类。
import pkg1[.pkg2…].classname|*;
- import语句在程序中放在package语句之后,类定义之前。一个Java源程序中可以有多条import语句。
例如,在Java标准类库中有一个工具库java.util,其中有一个名为ArrayList的类,使用ArrayList类的一种方式是用其全名java.util.ArrayList来指定
public class FullQualification {
public static void main(String[] args) {
java.util.ArrayList list = new java.util.ArrayList();
}
}
如果多处都用到了这个标准类,那么程序就显得冗长,可以使用import语句导入该类
import java.util.ArrayList;
public class SignleImport {
public static void main(String[] args) {
ArrayList list = new ArrayList();
}
}
现在就可以不用限定地使用ArrayList类了,但是这样java.util中的其他类仍旧是不可用的。要想导入某个包中年所有的类,可以使用通配符“*”
import java.util.*;
使用通配符只能导入某个包中的所有类,但不能导入该包内的子包,导入子包内的类时,需要再写上一条import语句
package和import关键字可以确保无论多少人使用java编写类,都不会出现名称冲突问题,如果采用简称出现冲突,则需要使用类的全名来描述
import java.util.*;
import access.mypackage.Vector;
Vector v=new Vector();//error
java.util.Vector v=new java.util.Vector();
在这个例子中,在access.mypackage包中声明了一个Vector类,在java.util包中也包含了一个Vector类,如果只通过Vector类名来声明变量的话就会产生冲突,这时候就要用到类在命名空间中的全称,用java.util.Vector或者access.mypackage.Vector来区分。
3.4 Java标准类库
3.4.1 Java常用包:java.lang包、java.util包
- java.lang 包由解释程序自动加载,不需在程序中显式地使用语句import java.lang.*;
- 提供常用的类、接口、一般异常、系统等编程语言的核心内容。如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。
- java.lang包括以下类
- java.util包是Java实用工具类库。
- 提供了一些实用的方法和数据结构。
- Java提供日期(Date)类、日历(Calendar)类来产生和获取日期及时间,提供随机数(Random)类产生各种类型的随机数,还提供了堆栈(Stack)、向量(ArrayList)、位集合(Bitset)以及哈希表(HashTable)等类来表示相应的数据结构。
3.4.2 Object类
- java.lang.Object
- Object类是所有Java类的基类,它处于Java开发环境的类层次树的根部。
- 如果一个类在定义的时候没有包含extends关键字,编译器会将其作为Object类的直接子类。
- Object类定义了所有对象的最基本的一些状态和行为,它提供的方法会被Java中的每个类所继承。
- 可以使用类型为Object的变量引用任意类型的对象
3.4.3 System类
- Java.lang.System
- System不能被实例化, 所有的方法都可以直接引用。
- System类提供了标准输入(in)输出(out)和错误(error)流。
3.4.4 Math类
- Math类包含在java.lang包中,同样由解释器自动加载
- 这些方法是静态方法,不用声明具体的实例,直接使用类名来调用
如三角函数方法
Math.sin(0);//0.0
Math.sin(Math.PI/6);//0.5
Math.cos(Math.PI/6);//0.866