采用分层结构
同一包中不能有两个同名的类
在缺省情况下,系统会为每一个源文件创建一个无名包
用户自定义包
package语句放在源文件的第一行。
创建包就是在指定目录路径下创建一个 子文件夹 ,这个包中类的字节码文件将存放在该文件夹下
package test;
public class Point {
……
}
对定义包程序的编译
方法1:创建一个test子目录,将源程序文件存放到该目录,编译时指明路径。
javac test/Point.java
或者,进入到子目录内,对源程序进行编译。
运行: java test.Point//指明类的包路径
方法2:采用带路径指示的编译命令:
格式:javac –d destpath Point.java
编译器将自动在destpath指定的目录下建一个test子目录,并将产生的字节码文件保存到该子目录下 。
典型用法是源程序放在当前目录下,用如下命令编译
javac –d . Point.java
编译后将在当前目录下自动创建test子目录
引用其它包的类的方法
(1) 在引用类时使用包名作前缀。
例 :new java.util.Date()
(2) 用import语句加载需要使用的类。
例:import java.util.Date;
然后在程序中可以直接通过类名创建对象
如:new Date();
(3) 用import语句加载整个包—-用“”号代替类名位置。
它将加载包中的所有的类。
例如:import java.util.;
【例5-6】编写一个代表圆的类,其中包含圆心(用Point表示)和半径两个属性,利用本章Point类提供的方法,求两个圆心间的距离,编写一个静态方法判断两个圆是否外切。用两个实际圆验证程序。
import test.Point;
/*【注意】如果一个程序中同时存在package语句、import语句和类定义,
则package语句为第一条语句,接下来是import语句,然后是类定义。*/
public class Circle {
Point center ;
double r;
public Circle(Point p,double r) {
center = p; this.r = r;
}
public static boolean isCircumscribe(Circle c1,Circle c2) {
return (Math.abs(c1.center.distance(c2.center)-c1.r-c2.r)<0.00001);
}
public String toString() {
return "\"圆心是"+center+",半径="+r+"\"";
}
public static void main(String args[]) {
Point a = new Point(10,10);
Point b = new Point(30,20);
Circle c1 = new Circle(a,10);
Circle c2 = new Circle(b,5);
if (isCircumscribe(c1,c2))
System.out.println(c1+" 和"+c2+"的两圆相外切");
else
System.out.println(c1+" 和"+c2+"的两圆不外切");
}
}