采用分层结构
同一包中不能有两个同名的类
在缺省情况下,系统会为每一个源文件创建一个无名包
image.png

用户自定义包

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类提供的方法,求两个圆心间的距离,编写一个静态方法判断两个圆是否外切。用两个实际圆验证程序。

  1. import test.Point;
  2. /*【注意】如果一个程序中同时存在package语句、import语句和类定义,
  3. 则package语句为第一条语句,接下来是import语句,然后是类定义。*/
  4. public class Circle {
  5. Point center ;
  6. double r;
  7. public Circle(Point p,double r) {
  8. center = p; this.r = r;
  9. }
  10. public static boolean isCircumscribe(Circle c1,Circle c2) {
  11. return (Math.abs(c1.center.distance(c2.center)-c1.r-c2.r)<0.00001);
  12. }
  13. public String toString() {
  14. return "\"圆心是"+center+",半径="+r+"\"";
  15. }
  16. public static void main(String args[]) {
  17. Point a = new Point(10,10);
  18. Point b = new Point(30,20);
  19. Circle c1 = new Circle(a,10);
  20. Circle c2 = new Circle(b,5);
  21. if (isCircumscribe(c1,c2))
  22. System.out.println(c1+" 和"+c2+"的两圆相外切");
  23. else
  24. System.out.println(c1+" 和"+c2+"的两圆不外切");
  25. }
  26. }