Java包(package)详解
Java包(package)详解
在编写Java程序时,随着程序架构越来越⼤,类的个数越来越多,这时候会发现管理程序中维护类名称也是⼀件很⿇烦的事情,尤其是⼀些同名问题的发⽣。有时候,开发⼈员还可能需要将处理同⼀⽅⾯的问题的类放到同⼀个⽬录下,以便于管理。
为了解决以上的问题,Java引⼊了包(package)机制,提供了类的多层命名空间,⽤于解决类的命名冲突,类⽂件管理等问题。
包允许将类组合成娇⼩的单元(类似于⽂件夹),它基本上隐藏了类,并避免了名称上的冲突。包允许在更⼴泛的范围内保护类,数据和⽅法。你可以在包内定义类,⽽包外的⽅法不能直接访问该类。这使你的类相互之间有了访问权限的限制。
包的作⽤如下:
1.区分相同名称的类。
2.能够较好地管理⼤量的类。
3.能控制访问范围。
包定义
Java中使⽤package语句定义包,package语句应该放在源⽂件的第⼀⾏,在每⼀个源⽂件中只能有⼀个包定义语句,并且package语句适⽤于所有的类型(类,接⼝,枚举和注释)的⽂件。
定义包语法如下:
package包名;
Java包的命名规则如下:
包名全部由⼩写字母组成(多个单词也全部⼩写)。
如果包名包含多个层次,每个层次⽤“.”分割。
包名⼀般由倒置的域名开头,⽐如com.baidu,不要有www。
⾃定义包不能由java开头。
注意:如果在源⽂件那个没有定义包,那么类,接⼝,枚举和注释类型⽂件会被放进⼀个⽆名的包中,也称为默认包。在实际的企业开发中,通常不会把类定义在默认包下。
包导⼊
Java引⼊了import关键字来实现包的导⼊这个功能,import可以向某个Java⽂件中导⼊指定包层次下的某个类或全部类。import语句位于package语句之后,类定义之前。⼀个Java源⽂件只能包含⼀个package语句,但是可以包含多个import语句。
使⽤import导⼊单个类的语法格式如下:
import包名+类名;
上⾯语句⽤于直接导⼊指定类,例如导⼊example包中的Test类,代码如下:
import example.Test;
使⽤import语句导⼊指定包下的全部类的语法如下:
import example.*;
上⾯语句中的星号(*)只能代表类,不能代表包,表明导⼊example包下的所有类。
提⽰:使⽤星号(*)可能会增加编译时间,特别是导⼊多个⼤包时,所以在导⼊类时最好明确的导⼊你想要⽤到的类。需要注意的是使⽤星号对运⾏时间和类的⼤⼩没有影响。
通过使⽤import语句可以简化编程,但import语句并不是必须的,如果在类⾥使⽤其他类的全名,可以不使⽤import语句。
Java默认所有源⽂件导⼊java.lang包下的所有类,因此前⾯在Java程序中使⽤String,System类时都⽆需使⽤import语句来导⼊这些类。但对于像Arrays这些类,其位于java.util包下,则必须要使⽤import语句来导⼊该类。
在⼀些极端的情况下,import语句也帮不了我们,此时只能在源⽂件中使⽤类全名。例如,需要在程序中使⽤java.sql包下的类,也需要使⽤java.util包下的类,则可以使⽤import语句:
import java.util.*;
import java.sql.*;
如果接下来在程序中要使⽤到Date类,则会引起以下编译错误:
Test.java:25:对Date的引⽤不明确,
java.sql中的类java.sql.Date和java.util中的类java.util.Date都匹配
上⾯的错误提⽰:在Test.java⽂件的第25⾏使⽤了Date类,⽽import语句导⼊的java.sql和java.util包下都包含了Date类,系统不知道使⽤了哪个包下的Date类。在这种情况下,如果需要指定包下的Date类,则只能使⽤该类的全名,代码如下:
// 为了让引⽤更加明确,即使使⽤了 import 语句,也还是需要使⽤类的全名
java.sql.Date d =new java.sql.Date();
系统包
Java SE提供了⼀些系统包,其中包含了Java开发中常⽤到的基础类。在Java语⾔中,开发⼈员可以⾃定义包,也可以使⽤系统包,常⽤的系统包如下表所⽰。
包说明
java.lang Java 的核⼼类库,包含运⾏ Java 程序必不可少的系统类,如基本数据类型、基本数学函数、 字符串处理、异常处理和线程类
等,系统默认加载这个包
java.io Java 语⾔的标准输⼊/输出类库,如基本输⼊/输出流、⽂件输⼊/输出、过滤输⼊/输出流等java.util包含如处理时间的 Date 类,处理动态数组的 Vector 类,以及 Stack 和 HashTable 类
java.awt 构建图形⽤户界⾯(GUI)的类库,低级绘图操作 Graphics 类、图形界⾯组件和布局管理 (如 Checkbox 类、Container 类、LayoutManger 接⼝等),以及⽤户界⾯交互控制和事 件响应(如 Event 类)
java.awt.image处理和操纵来⾃⽹上的图⽚的 Java ⼯具类库
java.wat.peer很少在程序中直接⽤到,使得同⼀个 Java 程序在不同的软硬件平台上运⾏java实现⽹络功能的类库有 Socket 类、ServerSocket 类flect提供⽤于反射对象的⼯具java.util.zip实现⽂件压缩功能
java.awt.datatransfer处理数据传输的⼯具类,包括剪贴板、字符串发送器等java.sql实现 JDBC 的类库import语句
⼤家现在只需要对这些包有⼀个⼤致的印象即可,随着博客后⾯的介绍,⼤家会逐渐熟悉他们的⽤法。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。