在编写Java程序时,随着程序架构越来越大,类的个数也越来越多,这时就会发现管理程序中维护类名称也是一件很麻烦的事,尤其是一些同名问题的发生。有时,开发人员可能需要将处理同一方面的问题的类放在同一个目录下,以便管理。
为解决上述问题,Java引入了包(package)机制,提供了类的多层命名空间,用于解决类的命名冲突、类文件管理等问题。
包允许将类组合成较小的单元(类似文件夹),它基本上隐藏了类,避免了名称上的冲突。包允许在更广泛的范围内保护类、数据和方法。你可以在包内定义类,而在包外的代码不能访问该类。这使你的类互相之间有隐私
包的3个作用1、区分相同名称的类
2、能够较好的管理大量的类
3、控制访问范围
包定义Java中使用package语句定义包,package语句应该放在源文件的第一行,在每个源文件中只能有一个包定义语句,并且package语句适用于所有类型(类、接口、枚举和注释)的文件。
语法:package 包名;Java包的命名规则
1、包名全部由小写字母(多个单词也全部小写)
2、如果包名包含多个层次,每个层次用" . "分隔
3、包名一般由倒置的域名开头,比如com.baidu,不要有www
4、自定义包不能Java开头
注意
如果在源文件中没有定义包,那么类、接口、枚举、和注释类型文件将会放进一个无名包中,也称为默认包。在实际企业开发中,通常不会把类定义在默认包下
包导入如果使用不同包中的其他类,需要使用该类的全面(包名+类名)
example.Test test = new example.Test();
其中,example是包名,Test是包中的类名,test是类对象
为了简化程序,Java引入了import关键字,import可以向某个Java文件中导入指定包层次下的某个类或者全部类。import语法位于package语句之后,类定义之前,一个Java源程序只能包含一个package语句,但可以包含多个import语句
使用import语句导入单个类语法如下import 包名+类名;上面语句用于直接导入指定类,例如导入前面example.Test类
import example.Test;使用import语句导入指定包下全部类的用法如下
import example.*;
上面import语句中的星号(*)代表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类,则只能使用该类的全名
java.sql.Date d = new java.sql.Date();



