java編程小白進(jìn)階包的作用詳解
包的作用,1是為了防止類和方法的重名,2是為了管理眾多的java類。
步驟 1 工具包里面有很多個(gè)工具類
之前講了打印數(shù)據(jù)的方法:System.out.println,寫(xiě)這么多字有點(diǎn)麻煩啊。那么我們不妨創(chuàng)建一個(gè)StringUtil,Util是工具的意思,里面設(shè)計(jì)一個(gè)newLine方法,用于字符串的打印。
StringUtil是一個(gè)工具類,應(yīng)該放在一個(gè)叫做tool的工具包里面。這個(gè)tool就是一個(gè)文件夾,我暫時(shí)把它創(chuàng)建在D盤(pán)的根目錄。
步驟 2 StringUtil
創(chuàng)建一個(gè)StringUtil.java,不必考慮編碼的問(wèn)題,現(xiàn)在肯定是ANSI,其實(shí)就是GBK,除非你用的系統(tǒng)不是簡(jiǎn)體中文。反正它是支持中文的,用Editplus打開(kāi),敲入以下的代碼:
class StringUtil { public static void newLine(String msg){ System.out.println(msg); } }
用javac去編譯它,得到.class文件。
步驟 3 目前的情況
目錄結(jié)構(gòu)是這樣的:
我們的程序在java18文件夾,現(xiàn)在想要調(diào)用tool文件夾中的StringUtil里面的newLine方法。
修改Demo.java
class Demo { public static void main(String[] args){ StringUtil.newLine("StringUtil -> newLine"); } }
編譯代碼:
說(shuō)是找不到符號(hào),也難怪,JVM怎么知道有一個(gè)StringUtil類呢?
步驟 4 CLASSPATH
如果你學(xué)過(guò)java,有一定的Java基礎(chǔ),那么你一定知道CLASSPATH的大名。所謂的CLASSPATH,是class和path兩個(gè)單詞,表示“類路徑”。就是你告訴JVM,哪些文件夾是我存放類(class文件)的路徑。
這個(gè)玩意,也是需要配置環(huán)境變量的,還記得配置JDK環(huán)境變量的步驟嗎?
現(xiàn)在來(lái)配置CLASSPATH環(huán)境變量,如果不記得,可以回去看下之前的章節(jié)。
步驟 5 具體配置
我們一般都是admin用戶登錄的,所以直接新建系統(tǒng)變量,我們把D盤(pán)根目錄配置進(jìn)去,還有一個(gè)句點(diǎn)。
D:;.;
左邊的D:\代表D盤(pán)根目錄,右邊的小句點(diǎn),代表當(dāng)前的那個(gè)目錄。比如你要在java18文件夾里面去java一下Demo,那么JVM得需要知道當(dāng)前的目錄是java18文件夾。
CLASSPATH這玩意,你要么不配置,不配置就默認(rèn)是當(dāng)前目錄,一旦配置了,就別忘記加個(gè)小點(diǎn)號(hào)。
我怕大家不明白,再啰嗦一下,這個(gè)配置的意思就是所有的類路徑。我們這樣配置了以后,JVM會(huì)去把D盤(pán)根路徑,還有你執(zhí)行程序的當(dāng)前目錄當(dāng)做根路徑,這個(gè)待會(huì)還會(huì)細(xì)說(shuō)。
步驟 6 package
D盤(pán)的根目錄是我們的類路徑,已經(jīng)配好了??墒荢tringUtil不在D盤(pán)的根目錄啊,而在D盤(pán)里面一個(gè)叫做tool的文件夾。為了讓JVM能夠知道,我們還得修改StringUtil,加上package。
package tool; class StringUtil { public static void newLine(String msg){ System.out.println(msg); } }
步驟 7 驗(yàn)證
tool文件夾也叫做包,現(xiàn)在我們來(lái)做驗(yàn)證,給StringUtil加一個(gè)main方法。
package tool; class StringUtil { public static void newLine(String msg){ System.out.println(msg); } public static void main(String[] args){ newLine("StringUtil"); } }
用EditPlus的Ctrl+1編譯,然后在外面打開(kāi)CMD黑窗口,不需要進(jìn)入D盤(pán),直接輸入命令。
tool.StringUtil,這個(gè)“.”很有靈性,JVM會(huì)把“.”翻譯成\。
因?yàn)镃LASSPATH里面有D:\,所以最終找到的位置是:D:\tool\StringUtil
這下,就很清楚了吧。
步驟 8 親自做一遍
強(qiáng)烈建議把上面的實(shí)驗(yàn)自己做一遍,我相信很多人都不注重這個(gè)原理,因?yàn)镮DEA真香。但是吧,身為程序員,還是要知道一點(diǎn)的,以后出去吹牛逼也有東西不是?
步驟 9 為什么現(xiàn)在用Editplus運(yùn)行報(bào)錯(cuò)了?
你可以試一下,在Editplus里面運(yùn)行StringUtil,會(huì)報(bào)錯(cuò)的。
原因很簡(jiǎn)單,因?yàn)槟慵恿藀ackage
package tool;
你不加的話,就是一個(gè)默認(rèn)的包(default package),也就是CLASSPATH里面所有的路徑。你一旦加上這句話,那么運(yùn)行的時(shí)候,JVM就得上綱上線,先去CLASSPATH里面找,然后對(duì)應(yīng)著,看看里面是不是有個(gè)tool文件夾。你直接運(yùn)行是啥意思啊,意思就是你打算直接在CLASSPATH里面找一個(gè)StringUtil.class去運(yùn)行??墒荄盤(pán)沒(méi)有這個(gè)StringUtil.class,當(dāng)前目錄到是有,可人家開(kāi)頭有一句package tool啊,它認(rèn)為自己是在D:\tool下面的,也不肯給你運(yùn)行,所以就找不到了。
除非,你把package tool;去掉。
步驟 10 說(shuō)白了
說(shuō)白了,剛才的語(yǔ)句就是
java StringUtil
不加任何包,全裸的,這就叫做默認(rèn)包(default package),默認(rèn)包就是你CLASSPATH配置的那些地方。
步驟 11 包的作用
最后了,點(diǎn)題哈,包的作用有兩個(gè),1是防止類重名,方法重名。比如,我們寫(xiě)了StringUtil,但是據(jù)我所知,很多第三方j(luò)ar包都有StringUtil,如果不用package來(lái)區(qū)分,那豈不是亂套了?
2是為了更好的管理class文件,畢竟,你一個(gè)項(xiàng)目有很多個(gè)class,成百上千個(gè)都有可能,不用package來(lái)分類,那這個(gè)項(xiàng)目還怎么維護(hù)?。?/p>
以上就是java編程小白進(jìn)階包的作用詳解的詳細(xì)內(nèi)容,更多關(guān)于java包的作用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何使用pipeline和jacoco獲取自動(dòng)化測(cè)試代碼覆蓋率
這篇文章主要介紹了如何使用pipeline和jacoco獲取自動(dòng)化測(cè)試代碼覆蓋率,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Spring boot @ModelAttribute標(biāo)注的實(shí)現(xiàn)
這篇文章主要介紹了Spring boot @ModelAttribute標(biāo)注的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Java日期時(shí)間格式化操作DateUtils 的整理
這篇文章主要介紹了Java日期時(shí)間格式化操作DateUtils 的整理的相關(guān)資料,這里總結(jié)了java日期格式化的操作,需要的朋友可以參考下2017-07-07Java中的stream流的概念解析及實(shí)際運(yùn)用總結(jié)
流是指?jìng)鬏敃r(shí)的數(shù)據(jù),Java為流準(zhǔn)備了很多內(nèi)置類,尤其是IO輸入輸出流非常常用,這里我們來(lái)看一下Java中的stream流的概念解析及實(shí)際運(yùn)用總結(jié)2016-06-06Mybatis插入Oracle數(shù)據(jù)庫(kù)日期型數(shù)據(jù)過(guò)程解析
這篇文章主要介紹了Mybatis插入Oracle數(shù)據(jù)庫(kù)日期型數(shù)據(jù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09