在开发过程中,会定义很多的类,随着类的定义越来越多,难免会出现类名重复的情况,对类的管理变的很困难,为了方便对类进行管理,我们可以把相关联的类放在同一个目录下,该目录就是一个包,包的实质就是文件夹。
包是对类和接口的封装,给类提供了多层命名空间。这样管理不同的类就可以允许在同一个项目中存在相同名称的类,只需要把相同名称的类放在不同的包里面。
我们把相关联的类放在同一个包中,使用时只需导入包中的类,Java中有三种方法导入包中的类。
示例:
public class Test {
public static void main(String[] args) {
//getTime()方法 从 1970 年 1 月 1 日开始计算到 Date 对象中的时间之间的毫秒数。
java.util.Date time = new java.util.Date();
System.out.println(time.getTime());
}
}
使用此方法每次创建一个对象都需要导入类,比较麻烦。但是优点是不会出现冲突,像在程序开头使用导包的方式就会出现冲突的情况,但是依然建议使用导包的形式导入包中的类,在容易出现冲突的情况下特殊处理。
示例:
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date time=new Date();
System.out.println(time.getTime());
}
}
使用此方法更加的方便,但是会出现冲突。例如,如果不知道 Date 类是哪一个包中的类,可以直接导入 java.util.* ,表示导入 java.util 包中的所有类。示例:
import java.util.*;
import java.sql.*;
public class Test {
public static void main(String[] args) {
Date time=new Date();
System.out.println(time.getTime());
}
}
示例中的代码出现了错误,原因是同时导入的两个包中都存在 Date 类, java.sql 中的类 java.sql.Date 和 java.util 中的类 java.util.Date 都匹配,出现了歧义,不知道调用的是哪一个类。
示例:
//静态导入
import static java.lang.Math.PI;
import static java.lang.Math.random;
import static java.lang.Math.round;
//或者:import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
//静态导入省略"Math."
//不使用静态导入:System.out.println(Math.random());
System.out.println(random());
System.out.println(PI);
System.out.println(round(5.6));
}
}
使用静态导入类时,只需要在 import 关键字后面加上 static 关键字。此方法是在 JDK 5 后面添加,其目的是减少字符输入量,提高代码可读性。但是如果同时导入的两个类中有重命名的静态成员,会出现报错。
在代码的最上方加上一个 package 语句指定该代码位于哪个包中,这样的方式叫做自定义包。如果没有使用 package 语句,代码放在默认包中,包名的定义需要唯一且一般使用域名的颠倒形式,其和代码的路径相同,例如:
package com.baidu.www
接下来我们在 IDEA 中创建一个包:右键 src / 新建 / 包 ,这样我们就创建好了一个包。
在新建的包中添加类:右键新创建的包 / 新建 / 类。
打开相应的文件目录查看是否创建成功。
同样的,此时文件的最上面已经生成了 package 语句。
前面我们使用访问权限修饰符 private 来修饰类的成员属性,使我们无法在类外访问。同样,访问权限修饰符也控制了不同的包之间的访问规则。例如,使用 default 访问权限时,在同一个包中可以互相使用,在不同的包中就无法调用。示例:
此时的错误原因是:TestPackage2.A 在 TestPackage2 中不是公共的; 无法从外部程序包中对其进行访问。
其中使用 java.lang 包中的类时,不需要手动导包,系统会默认导入。
【Java编程进阶】封装继承多态详解
【Java编程进阶】Java抽象类与接口详解
【Java编程进阶】Object类及常用方法详解