一開(kāi)始學(xué)Java,就用的eclipse。對(duì)包的印象就是右鍵新建而已。至于導(dǎo)入包,等報(bào)錯(cuò)了再導(dǎo)。
被IDE奴役的傻孩子=。=
現(xiàn)在就清晰地梳理一遍吧~
本文基于Mars老師的Java4Android視頻。
包的作用
軟件包為Java類(lèi)提供了命名空間。根據(jù)包名,會(huì)生成相應(yīng)的文件夾,將類(lèi)存儲(chǔ)在里面。
打包時(shí),使用package指令。如下所示:
package org.sia;
class Test {
public static void main(String args []) {
System.out.println("Hello,package!");
}
}
一個(gè)類(lèi)的全名,應(yīng)該是“包名” + “.” + “類(lèi)名”。
比如上面的代碼,類(lèi)名應(yīng)該是 org.sia.Test
。
包名的命名規(guī)范
- 包名所有字母小寫(xiě)
- 包名一般情況下,是你的域名倒過(guò)來(lái)寫(xiě),再加上包的用途。比如假裝我有一個(gè)域名=。=,是sia.org,有一個(gè)包下面放的是用戶相關(guān)的類(lèi),包名就應(yīng)該是
package org.sia.user
。包名中每一個(gè) “.” 都生成一層新的文件夾。
Java當(dāng)中的訪問(wèn)權(quán)限
分為四大類(lèi):
1、 public:公共權(quán)限
- 既可以修飾類(lèi),又可以修飾成員變量和成員函數(shù)。public表示沒(méi)有限制,你行你上,沒(méi)人攔著。在同一個(gè)或不同的包中,都可以訪問(wèn)。
- public類(lèi)中的成員變量和函數(shù),只有被public修飾時(shí),才可以被外界包訪問(wèn)。
- 如果一個(gè)類(lèi)被聲明為public,那么類(lèi)名必須和文件名一樣。(被default修飾時(shí),就可以不同,不過(guò)不推薦這樣做)
- 如果在別的包里,生成public修飾的類(lèi)中對(duì)象的引用,類(lèi)名必須用全名。即:
package org.sia;
public class Person {
public String name;
public void introduce() {
System.out.println("name");
}
}
package org.coding;
class Test {
public static void main(String args []) {
//聲明一個(gè)Person的引用
org.sia.Person p = new org.sia.Person();
p.name = "sia";
}
}
- 但是這樣非常麻煩,所以可以先導(dǎo)入要用的類(lèi)或者包。
import org.sia.Test; //或者import org.sia.*;
class Test {
public static void main(String args []) {
Person p = new Person();
p.name = "sia";
}
}
2、private:私有權(quán)限
- 能夠修飾變量和函數(shù),表示變量和函數(shù)只能在當(dāng)前類(lèi)中使用。
- 只能修飾內(nèi)部類(lèi),不能修飾其他的類(lèi)。
3、default:包級(jí)別訪問(wèn)權(quán)限
- 變量、函數(shù)和類(lèi)前面不加權(quán)限修飾符,就是default權(quán)限。
- default權(quán)限,表示在同一個(gè)包中可以自由訪問(wèn)。
4、protected:受保護(hù)權(quán)限
- 這個(gè)權(quán)限主要和繼承有關(guān)系。
- protected首先擁有和default權(quán)限一樣的功能,但是該權(quán)限只能修飾成員變量和成員函數(shù)。
- protected還允許跨包繼承。注意,它和public的區(qū)別在于,跨包的情況下,也只有子類(lèi)能使用這些成員,被public修飾的,沒(méi)有繼承關(guān)系也能用。
5、繼承中的權(quán)限問(wèn)題
- 如果父類(lèi)是public,子類(lèi)和父類(lèi)不在一個(gè)包中,子類(lèi)可以繼承到父類(lèi)中default權(quán)限的成員變量和成員函數(shù),但是由于權(quán)限不夠,無(wú)法使用。(之所以說(shuō)子類(lèi)可以繼承,是因?yàn)榫幾g報(bào)錯(cuò)不是找不到該成員,而是權(quán)限問(wèn)題無(wú)法訪問(wèn))。
- 如果父類(lèi)是public,父類(lèi)中的成員變量和成員函數(shù)是private,則只能在父類(lèi)中使用它們。
總結(jié):
public > protected > default > private ;
修飾類(lèi),除了內(nèi)部類(lèi)可以用private,只能用public,或者不寫(xiě)(就是default);
權(quán)限,應(yīng)該盡可能的小,這是面向?qū)ο蠓庋b性的體現(xiàn)。