1、Java 包(package)
包帮助将相关的类和接口组织在一起,类似于文件夹结构,便于管理。如果两个类有相同的名字,将它们放在不同的包中可以避免命名冲突。包可以控制类、接口和成员的访问权限,提供更细粒度的安全管理。
1)内建包
Java 提供了许多内建的标准包,如 java.util
、java.io
、java.lang
等。
2)自定义包
开发者可以自定义包来组织自己编写的类和接口。
2、内置包
Java API是Java开发环境中包含的,可免费使用的预编写类的库。
该库包含用于管理输入,数据库编程等的组件。完整列表可以在Oracle网站上找到:https://docs.oracle.com/javase/8/docs/api/。
该库分为包和类。可以导入单个类(以及其方法和属性),也可以导入包含所有属于指定包的类的整个包。
要使用库中的类或包,需要使用import
关键字导入:
语法
import package.name.Class; // 导入单个类 import package.name.*; // 导入整个包
3、使用import导入类
如果要导入使用的类,例如,Scanner
类用于获取用户输入,导入使用以下代码:
例如:
import java.util.Scanner;
在上面的示例中,java.util
是一个包,而Scanner
是java.util
包的类。
要使用Scanner
类,需要创建该类的对象,并使用Scanner
类文档中提供的任何可用方法。在我们的示例中,我们将使用nextLine()
方法,该方法用于读取一行:
例如:
使用Scanner
类获取用户输入:
import java.util.Scanner; class MyClass { public static void main(String[] args) { Scanner myObj = new Scanner(System.in); System.out.println("输入 username"); String userName = myObj.nextLine(); System.out.println("Username 是: " + userName); } }
4、使用import导入包
有很多软件包可供选择。在前面的示例中,我们使用了java.util
包中的Scanner
类。该软件包还包含日期和时间工具,随机数生成器和其他实用程序类。
要导入整个包,需要使用星号(*
)。 以下示例将导入java.util
包中的所有类:
例如:
import java.util.*;
5、用户自定义包
要创建自己的包,需要了解Java使用文件系统目录来存储它们。就像计算机上的文件夹一样:
例如:
└── root └── mypack └── MyPackageClass.java
要创建包,请使用package
关键字:
MyPackageClass.java
package mypack; class MyPackageClass { public static void main(String[] args) { System.out.println("This is my package!"); } }
将文件另存为MyPackageClass.java,并进行编译:
C:\Users\cjavapy> javac MyPackageClass.java
然后编译该包:
C:\Users\cjavapy> javac -d . MyPackageClass.java
这将强制编译器创建“mypack”包。-d
关键字指定保存类文件的位置。可以使用任何目录名称,例如,c:/user(windows),或者,如果要将软件包保留在同一目录中,则可以使用点号.
,注意:软件包名称应使用小写字母,以避免与类名称冲突。
当我们在上面的示例中编译软件包时,创建了一个新文件夹,称为“mypack”。
要运行MyPackageClass.java文件,请编写以下内容:
C:\Users\cjavapy> java mypack.MyPackageClass
输出将是:
This is my package!
6、Java 包的访问控制
Java 中,访问控制 是指对类、方法、变量以及构造函数的可见性和访问权限的管理。通过不同的访问控制修饰符(如 public
、protected
、private
和默认访问修饰符),Java 提供了灵活的机制来控制类和类成员的访问权限。访问控制不仅适用于类内部成员,也适用于类与类之间的交互。
1)public
任何地方都可以访问。无论是同一个包还是不同包中的类都可以访问 public
修饰的成员。当希望一个类或成员对外部完全开放时,可以使用 public
。
2)protected
只有同一个包中的类或者不同包中的子类可以访问 protected
修饰的成员。当希望类的成员在继承关系中可访问,但又不希望公开给所有类时,可以使用 protected
。
3)默认(包级访问,package-private)
如果没有指定访问修饰符,则默认为包级私有,只有同一个包中的类可以访问。当希望类的成员仅在同一个包内访问时,可以使用默认的访问控制(不写修饰符)。
4)private
仅能在同一个类中访问,外部类无法访问 private
成员。当希望类的成员完全私有,仅供当前类内部使用时,使用 private
。
7、包的命名规则
Java 包(Package)用于组织和管理类、接口等,包的命名遵循一定的规则和惯例,这有助于提高代码的可维护性、可读性以及避免命名冲突。
1)小写字母
包名一般使用小写字母,以避免与类名等其他命名产生冲突。如果包名由多个单词组成,建议使用 .
(点号)分隔不同的单词,如 com.example
、org.apache
。
2)避免使用Java的保留字
包名不能是 Java 的保留字。例如,不能使用 int
、class
、super
等作为包名。
3)避免和其他包冲突
为了避免命名冲突,Java 建议使用公司或组织的域名反向作为包名。例如,com.example
、org.apache
。如果是个人项目,可以使用自己名字的反向域名,或根据项目命名。