目录
前言 :
相信常用IDEA或者IDEA community来写java的小伙伴儿,对于package包肯定是不陌生了。所以,这篇博客主要是面向一些刚刚使用IDEA(比如说初学java)的人(即新手向)。
一、什么是包?
所谓包,说白了就是文件夹或者目录,当我们创建了许多类时,就需要包来归类,可以将功能相似或相关的类放在同一包下,不同包下的类可以重名。所以,包的本质其实就是用以区别不同类的文件夹或目录。如下GIF图所示,在IDEA中创建的包,都可以在硬盘中找到对应的文件夹。
二、包的作用 :
1.可以对类进行分门别类的管理,把功能相似或相关联的类或接口放在同一包下,方便查看和使用。(其实java自带的许多类已经做了分包处理,如下GIF图所示 : )
2.区别相同名字的类,同名的两个类可以放在不同的包下。当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。(如下GIF图所示,在不同包下创建了同名的Student类,但并没有引起报错。)
3.限制访问权限,java默认的访问权限是在本包下,用到其他包下的类需要导包。
三、IDEA创建包演示 :
如上图所示,我们需要双击想创建新包的地方,依次点击new,Package,然后输入包名即可,创建多级包需要用" . "来隔开,需要注意的是,IDEA默认并不能直接创建显式的多级包,什么意思呢,如果你直接在空包下创建一个新包,两个包就会“叠”起来,如下图所示:
而我们自然是希望达到这样的效果。
这时,我们只需要先在test包下创建一个类,随便你怎么建,只要test包下不是空的了,你再去创建多级包就可以显式呈现出来。如下GIF图所示 :
四、包的语法格式 :
package 包名 ;
(多级包之间用. 隔开)
事实上,当你创建一个包时,IDEA会自动将该语句写好。eg :
五、包的应用 :
在同一个测试类中,可以用包名来区分两个同名但不同的类,有两种解决方案 :
1.两个类都不引入,都加前缀包名以作区分。
2.引入其中一个类,另一个类加前缀包名以作区分。注意 : 不能同时引入两个类。
该解决方法同样适用于自定义类与java自带类出现重名的情况。
六、java中常用的包:
1.java.lang包,lang包是java的一个基本包,应用很广,java默认引入,不需要再手动引入。
2.java.util包,util包是系统提供的工具包,含有许多常用的工具类,比如Scanner类,List类等等。
3.java.net包,net包是指网络包,主要用于网络开发。
4.java.awt包,awt包用于java的界面开发,如GUI相关。
5.java.io包,io包囊括了与javaIO流相关的许多类。
七、如何导入包?
方式一 :
import 包名.类名;
这是最常用的形式,表示只引入该包下的该类。
方式二 :
import 包名.*;
这中形式可以将某一个包下的全部类都引入,使用频率较低。
当需要引入的类超过3~5种,且都是同一包下类时可以考虑使用此方式以使代码简洁,比如IO流相关,up在一篇讲解IO流基础的博文里,有一个代码演示便用了此方式。
八、注意事项 :
1.package关键字的作用是声明当前类所在的包,因此一个类中最多只有一个package语句,且必须放在类的最顶端。
packageknowledge.succeed; importjava.util.Scanner; importjava.io.*; //演示类,暂且无实际意义publicclassHuaextendsChild{ publicHua() { super(); } publicHua(Stringname, intage) { super(name, age); System.out.println("这是Hua类的有参构造"); } publicvoidhua() { System.out.println("花开花败总归尘。"); } }
例如以上代码,若将package语句放在了导包语句的下面,会报错,如下图所示。
2.import关键字指令,要放在包声明后,类定义前。导包语句可以有多句且无顺序要求。如上面代码中,可以先引入Scanner类,亦可以先导入io包。
System.out.println("END---------------------------------------------------------------");