目录
一、什么是包
包(package)就是java中打包好的一个文件夹,里面有很多可以使用的类。
简单来说,包就就是用来分门别类的管理各种不同类的, 类似于文件夹、建包利于程序的管理和维护。
例如:ArrayList是放在java.util这个包中,顾名思义,java.util包中放了很多工具类。
使用java API的类是很简单的,把它当作是自己写的去用就行了。
唯一的区别就是,需要在程序的某个地方指明函数库类的完整名称,即包的名称+类的名称。
例如:java.util.ArrayList(这个才是ArrayList的完整名字)。
说白了,包就是文件夹,类就是文件夹里面的文件。
同一个包中的类可以互相访问,不用import。
二、包的三大作用
- 区分相同名字的类。同一个文件夹下不能出现同名的文件,因此把两个同名的类分别放在两个包中,就相当于是放在两个文件夹中。
- 当类很多时,可以方便的管理类。
- 控制访问范围。
三、使用包的方式
1. 包的基本语法
相同包下的类可以直接访问, 不同包下的类必须导包,才可以使用
导包格式:import 包名.类名;
假如一个类中需要用到不同类m, 而这个两个类的名称是一样的, 那么默认只能导入一个类, 另一个类要带包名访问
package是关键字,表示打包;后面的是包名。
package java.util
2. 使用包中的类
以ArrayList类为例,如果想要使用java.util中的ArrayList类,有两种方式:
- 使用import,即放一个import语句在文件的最前面:
import java.util.ArrayList //只引入java.util包中的ArrayList类;一般建议用这个,用哪个类就导入哪个
import java.util //引入java.util包中的所有类
- 直接在程序中打出ArrayList的全名,不管在哪里,只要使用了就打出全名。
//声明的时候
java.util.ArrayList<Dog> list = new java.util.ArrayList<Dog>();
//用在参数的时候
public void go(java.util.ArrayList<Dog> list){}
//用作返回类型的时候
public java.util.ArrayList<Dog> foo(){}
Tips:
除非是来自java.lang这个包。使用该包中的类不需要指定全名,其他的包全都需要。
像经常使用的System(System.out.println)、String和Math(Math.Random())都是属于java.lang这个
包。
另外,object类也是属于java.lang包的。
为什么java.lang不需要指定全名呢?java能找到吗?
答案是可以的,因为java.lang是一个预先被引用的包。它是一个经常被用到的基础包,所以可以不
用指定名称。
并且java.lang包中的类,例如:java.lang.String和java.lang.System是独一无二的class,java知道
要去哪里找。
四、包的命名规则和规范
命名规则:
只能包含数字、字母、下划线和“.”,但是不能用数字开头,不能是关键字。
demo.class.ex1 //错误的!因为class是关键字
demo.12a.ex1 //错误的!因为12a是数字开头
demo.a12.ex1 //正确的!
命名规范:
一般都是小写字母+“.”。普遍的命名方式都是:com.公司名.项目名.业务模块名
eg:
com.sina.crm.user //用户模块
com.sina.crm.order //订单模块
com.sina.crm.utils //工具类
五、演示示例
普通方式导入一个类
import com.zheng.oop.oop2.demo1.Student;
静态导入导入另一个类的静态成员
import static com.zheng.oop.oop2.demo1.Student.aaa;
import static com.zheng.oop.oop2.demo1.Student.bbb;
通配符导入 类下所有的静态成员 静态成员变量和静态成员方法
import static com.zheng.oop.oop2.demo1.Student.*;
六、特殊情况
开发中,可以直接使用java.lang包下的类,因为java.lang包下的所有类, 系统会自动导入,无需手动导入
七、类的导入
一个类可以使用所属包中的所有类,以及其他包中的公共类(public class)。
我们可以采用两种方式访问另一个包中的公共类。
第一种方式就是使用完全限定名(fully qualified name);就是包名后面跟着类名。
例如:java.time.LocalDate today = java.time.LocalDate.now();
这显然很烦琐,更简单且更常用的方式是使用import语句。
import语句是一种引用包中各个类的简捷方式。
一旦使用了import语句,在使用类时,就不必写出类的全名了,如上已经简介。
可以使用 import 语句导入一个特定的类或者整个包。
import 语句应该位于源文件的顶部,但位于 package 语句的后面。
例如,可以使用下面这条语句导人 java.util 包中的所有类:import java.util.*;
八、import java 和 javax 有什么区别
刚开始的时候 JavaAPI 所必需的包是 java 开头的包,javax 当时只是扩展 API 包来说使用。
然而随着时间的推移,javax 逐渐的扩展成为 Java API 的组 成部分。
但是,将扩展从 javax 包移动到 java 包将是太麻烦了,最终会破坏 一堆现有的代码。
因此,最终决定 javax 包将成为标准 API 的一部分。
所以,实际上 java 和 javax 没有区别。这都是一个名字。
九、常见的包
- java.lang //lang包是基础包,默认引入,不需要再引入
- java.util //util包是系统提供的工具包,里面有很多工具类
- java.net //网络包,用于网络开发的
- java.awt //是做java的界面开发,GUI