包的概念
我们知道JAVA是由类组成的,其实我们不知道的是JAVA是由包组成的,包里包含了类。
Java 定义了一种名字空间,称之为包:package。一个类总是属于某个包,类名(比如Person)只是一个简写,真正的完整类名是包名.类名,这才是唯一确定一个类路径的写法,不同包中的类名允许重复。包名推荐使用倒置的域名,例如org.apache。
包就是文件夹。
这样我们就对包的作用有了一个较为清晰的认知,因为我们创建文件夹的目的就是管理文件,所以在 Java 中,包就是用来管理不同类和接口的。以及处理同名文件,不同路径中的同名文件不会冲突,在 Java 中,不同包中的同名类也不冲突。与文件中的目录系统一样,Java 中的包使用的也是这种树形的结构。
//包名
package hello;
public class Person {
// 包作用域:
public void hello() {
System.out.println("Hello!");
}
}
新建一个包,src-new-package com.st.course
包相当于文件夹 com是一个文件夹,st是一个文件夹,course是一个文件夹
在Java中,包主要有以下用途
包允许将类组合成较小的单元 (人呆在房子里),有助于避免命名冲突 (一个房子里的人不重名)
包允许在更广的范围内保护类、数据和方法 (外面的人不能随意访问房间的人)
包可以是类、接口和子包的集合(房子里有房间,房间就是子包)
package 包命名;
Java 包的命名规则如下:
1)包名全部由小写字母(多个单词也全部小写)
2)如果包名包含多个层次,每个层次用“.”分割。
3)包名一般由倒置的域名开头,比如 com.baidu,com.company.region.package不要有 www。
4)自定义包不能 java 开头
在idea中 包中创建类,类中就直接带上了包名package;
在一个类文件中的关键字package,import,class出现的顺序是 package import class
不同的包里可以放相同的类
控制权限
包与包之间有控制访问权限的,不同包之间,对方法和属性的访问权限,比如类的访问控制,只能是空或者 public
包名与路径
包名实际上就是路径,但是中间不使用斜杠或者反斜杠分割,而是使用 . 分隔。
Import 关键字
Java 引入了 import 关键字,import 可以向某个 Java 文件中导入指定包层次下的某个类或全部类。
import 语句位于 package 语句之后,类定义之前。一个 Java 源文件只能包含一个 package 语句,但可以包含多个 import 语句。
导入包中的类 使用import,加包名+类名,import关键字作为Java源文件的第一条非注释性语句,指明该源文件定义的类所有的包。
import com.st.Student;
我们前面学的Arrays.toString,我们看到最上面就是导入了包
int[] a = {1,2,3};
Arrays.toString(a);
练习使用idea在src下创建一个包,包名为com.st.couse01在该包下新建一个Car 类
在src下创建一个包com.st.test. 在该包下创建一个Test类
在Test类中导入com.st.couse01中的类。在main方法中new Car类
默认导入包
Java 默认为所有源文件导入 java.lang 包下的所有类,因此前面在 Java 程序中使用 String、System 类时都无须使用 import 语句来导入这些类。但对于 Arrays 类,其位于 java.util 包下,则必须使用 import 语句来导入该类。
相同类名处理
在一些极端的情况下,import 语句也帮不了我们,此时只能在源文件中使用类全名。例如,需要在程序中使用 java.sql 包下的类,也需要使用 java.util 包下的类,则可以使用如下两行 import 语句:
import java.util.*;
import java.sql.*;
代码中强制用全路径来声明需要使用的类
java.sql.Date d = new java.sql.Date();
系统包
Java SE 提供了一些系统包,其中包含了 Java 开发中常用的基础类。在 Java 语言中,开发人员可以自定义包,也可以使用系统包,常用的系统包