包及訪問權(quán)限

包是一個文件夾,它是類的一種特殊性質(zhì),可以更合理的管理大量的類文件,設(shè)置他人對類成員的訪問權(quán)等。
在Java開發(fā)大型項目時,通常要把類分門別類地存到文件夾里,在將這些文件夾一起編譯執(zhí)行,這樣的程序代碼更易于維護。同時將類分割開后,對于類的使用也就有了相應(yīng)的訪問權(quán)限。


包(package)的基本概念
當(dāng)一個大型程序由多個不同的組別或人員共同開發(fā)時,不可能保證每個人寫的類名稱是完全不同的,這樣一來就可能出現(xiàn)同文件覆蓋的問題。那么為了解決這樣的麻煩確保程序可以正常運行,就必須通過使用package關(guān)鍵字來幫忙。所謂的包(package)指的就是一個文件夾,即在不同的文件夾之中可以保存同名的類文件。
包的使用方法:在類或接口當(dāng)然最上面一行加上package的聲明。通常包全部用小寫字母命名。
package package 名稱[.package 名稱2.package 名稱3…];

程序中如果有package語句,該語句一定是源文件中第一條可執(zhí)行語句,它的前面只能有注釋或空行。另外一個文件中最多只能有一條package語句。
經(jīng)過package的聲明之后,同一文件內(nèi)的接口或類就都會被保存在相同的package中。
包的名字有層次關(guān)系,各層以點分隔。包層次必須與Java開發(fā)系統(tǒng)的文件系統(tǒng)結(jié)構(gòu)相同。
若包聲明如下:package java.awt.a,則文件中的接口和類都存放在…java\awt\a目錄下。

package的使用
package demo.java;   //聲明package,相當(dāng)于將Perso類和TestPerson1類放入demo\java文件夾之下
class Person
{
    public String talk()
    {
        return"Person>>>>talk()";
    }
}
class TestPackage1
{
    public static void main(String args[])
    {
        System.out.println(new Person().talk());
    }
}

包的導(dǎo)入
使用包可以將功能相似的若干類保存在一個文件目錄之中,但這樣一來就有可能出現(xiàn)包之間的互相訪問問題,當(dāng)一個程序需要其他包中類的時候可以通過import完成導(dǎo)入操作。package導(dǎo)入方法如下
import package 名稱.類名稱;
若某個類需要被訪問時,則必須把這個類公開出來,即此類必須聲明public。通過import命令,可將某個package內(nèi)的整個類導(dǎo)入,后續(xù)程序可直接使用類名稱,而不用再寫上被訪問的package的名稱。

若在不同的package中存在相同類名的public類,若要訪問某個public類的成員時,
在程序代碼內(nèi)必須明確指明“被訪問package的名稱.類名稱”。

包的導(dǎo)入使用范例

package demo.java.a;
public class Person
{
public String talk()  //類中的方法
{
return "Person>>>talk()";
}
}
//聲明一個demo.java.b包 并調(diào)用demo.java.a中的類方法
package demo.java.b;
import demo.java.a.Peraon;
//將demo.java.a包中的Person類導(dǎo)入此包中
class TestPerson2
{
    public static void main(String args[])
    {
        //調(diào)用demo.java.a中的方法并輸出
        System.out.println(new Person().talk());
    }
}
第一句聲明一個demo.java.b包將TestPerson2類放入此包中。
第二句使用import語句,將demo.java.a包中的Person類導(dǎo)入到此包中。
最后一句調(diào)用demo.java.a包中的Person類中的talk()方法。

提示:如果一個項目中有幾百個類時,為了方便導(dǎo)入可以使用“包.”的形式完成。雖然使用的是“包.”,但實際上并不表示此包之中所有類都會被導(dǎo)入,導(dǎo)入的時候也只是導(dǎo)入所需要的類,不需要的類是不會有任何加載的,所以分開導(dǎo)入和使用“*”導(dǎo)入從性能上講是完全一樣的。

上面程序也可以寫成如下形式:

package demo.java.b;
class TestPerson3
{
public static void main(String args[])
{
//在程序中將寫出所用類的具體位置
System.out.println(new demo.java.a.Person().talk());
}
}
程序中沒有使用import語句,但是使用Person類
的時候使用了“包名.類名”的方式,所以在程序中也可以使用此方法來使用
非本類所在包中的類。
很多時候有可能在程序開發(fā)之中導(dǎo)入的包里面有同名的類,則這個時候再使用類的話就
必須寫上類的完整名稱“包名.類名”才可以正確操作。

JDK中常見的包

包名 描述
java.lang java.lang包含一些java語言的核心類,如String,Math,Integer,System和Thread,提供常用功能。在java.lang包中還有一個子包:java.lang.reflect,用于實現(xiàn)java類的反射機制(Java1.2以后所有版本中java.lang這個包會自動導(dǎo)入,對于其中的類,不需要使用import語句來導(dǎo)入,如System類)。
java.awt java.awt包含構(gòu)成抽象窗口工具集(abstract window toolkits)的多個類,這些類被用來構(gòu)建和管理應(yīng)用程序的圖形用戶界面(GUI)。
avax.swing avax.swing此包用于建立圖形用戶界面,包含的組件相對于java.awt包而言是輕量級組件。
java.applet java.applet包含applet運行所需要的一些類??梢詫崿F(xiàn)圖形繪制、字體和顏色控制、動畫和聲音的插入、人機交互及網(wǎng)絡(luò)交流等功能.Apple還提供各種名為抽象窗口工具箱
java.net java.net包含執(zhí)行與網(wǎng)絡(luò)相關(guān)的操作的類。
java.io java.io包含能提供多種輸入/輸出功能的類。
java.util java.util包含一些實用工具類,如定義系統(tǒng)特性與日期日歷相關(guān)的方法。

導(dǎo)入一個Applet程序所需要的包

package demo.java;    //聲明包demo.java
import java.applet.*;   //導(dǎo)入java.applet中所有包
import java.awt.*;     //導(dǎo)入java.awt中所有包
 public class MyApplet extends Applet   //聲明一個MyApplet類繼承Applet類。
{
    public void paint(Graphics g)
    {
        g.drawString("世界,你好!",30,30);   //輸出一行字,調(diào)用Java中自帶的方法在圖形化窗口輸出一行字
        g.drawLine(50,50,100,100);  //畫一條線,調(diào)用Java中自帶的方法在圖形化窗口輸出一條線段
    }
}
第2,3行導(dǎo)入實現(xiàn)小窗口應(yīng)用程序的包。

Applet程序必須繼承一個Applet類,Java是單繼承局限,所以此程序不會在用了。Applet程序和Application程序有一個最大區(qū)別:Applet不是依靠主方法運行,而Application是依靠主方法運行的,Applet已經(jīng)成為了一個過去。

類成員的訪問控制權(quán)限
Java中四種訪問控制權(quán)限,private,default,protectedpublic。
private:如果一個成員方法或成員變量名前使用private訪問控制符,那么這個成員只能在這個類內(nèi)部使用。
default:如果一個成員方法或成員變量名前沒有使用任何訪問控制符,那么這個成員擁有的是默認(rèn)的(default)訪問控制符。默認(rèn)的訪問控制成員可以被這個包中的其他類訪問。如果一個子類與其父類位于不同包中,子類也不能訪問父類中的默認(rèn)訪問控制成員。
protected:如果一個成員方法或成員變量名前使用protected訪問控制符,那么這個成員既可以被同一個包中的其他類訪問,也可以被不同包中的子類訪問。
public:如果一個成員方法或成員變量名前使用了public訪問控制符,那么這個成員可以被所有的類訪問,不管類與被訪問類是否在同一個包中。

權(quán)限 private default protected public
同一類
同一包中的類
不同包的子類
其他包中的類

類成員的訪問控制權(quán)限使用范例

范例1
package demo.java.b;
import demo.java.a.*; //通過導(dǎo)入demo.java.a.*;而導(dǎo)入所需要的Person類
public class Student extends Person
{
public Student(String name)
{
this.name=name;   //Stude類訪問Person類中的name屬性
}
public String talk()
{
return "Person>>talk(),"+this.name;
}
}

范例

package demo.java.c;
import demo.java.b.*;
class TestPackage
{
public static void main(String args[])
Student s=new Student("javafans");
s.name="javafans";  //通過對象調(diào)用受保護的屬性
System.out.println(s.talk());
}
}

Java命名規(guī)范
JDK中類的聲明,方法的聲明,常量的聲明有一定規(guī)律
1,包名中的字母一律小寫,如demo.java。
2,類名、接口名應(yīng)當(dāng)使用名詞,每個單詞首字母大寫。如TestPerson。
3,變量名(屬性名)第一個單詞小寫,后面單詞的首字母大寫。如newLxh。
4,方法名的第一個單詞小寫,后面每個單詞大寫,如talkMySelf()。
5,常量名中的每個字母一律大寫,如COUNTRY。


打包工具>>>jar命令的使用
jar文件即java archive file的縮寫,其應(yīng)用與Java息息相關(guān)。jar文件就是一種壓縮文件,與常見的ZIP壓縮文件格式兼容,習(xí)慣上稱之為jar包。如果開發(fā)者開發(fā)了許多類,當(dāng)需要把這些類提供給用戶時,通常都會將這些類壓縮到j(luò)ar文件中,以jar包的方式提供給用戶使用。只要別人的classpath環(huán)境變量的設(shè)置中包含這個jar文件,Java虛擬機就能自動在內(nèi)存中解壓這個jar文件,把這個jar文件當(dāng)做一個目錄,在這個jar文件中去尋找所需要的類名及包名所對應(yīng)的目錄結(jié)構(gòu)。
jar命令是Java中提供的一個非常有用的一個命令,可以用來對大量的類(.class文件)進行壓縮,然后存為.jar文件。jar壓縮文件可以方便管理大量的類文件,,進行壓縮也減少了文件所占的空間。

只要在命令行中使用以下命令就可以將一個包打成一個jar文件。
jar-cvf create.jar demo

-c:創(chuàng)建新的存檔
-v:生成詳細(xì)輸出到標(biāo)準(zhǔn)輸出上。
-f:指定存檔文件名。
create.jar:是生成jar文件的名稱。
demo:要打成jar文件的包


單例設(shè)計模式

package demo.java.b
class Singleton
{
private static Singleton inst=new Singleton();   //實例化對象
private Singleton(){}  //此時類中不會再生成無參的什么都不做的構(gòu)造
public static Singleton getInst()
{
return inst;
}
public void print()
{
System.out.println("HelloWorld");
}
}
class Test1
{
public static void main(String args[])
{
Singleton inst=null;   /聲明對象
inst=Singleton.getainst();
inst.print();
}
}

如果想要產(chǎn)生類的實例化對象,那么一定要調(diào)用構(gòu)造方法,如果把一個類的構(gòu)造方法卡死了,那么就表示外部無法調(diào)用此構(gòu)造,就意味著外部無法產(chǎn)生實例化對象。同時在類內(nèi)部定義的本類實例化對象使用的是static定義,static特點是在全局?jǐn)?shù)據(jù)區(qū)之中保存,是一個公共屬性。那么不管外部聲明多少個對象實際上只是取得了唯一的一個實例化對象。這樣的設(shè)計模式稱之為單例設(shè)計模式。


多例設(shè)計模式
多例設(shè)計模式指的是一個類可以定義指定多個對象,不管是單例還是多例,構(gòu)造方法都不可以使用public定義。

public demo.java.d;
classSex  //性別
{
private String title;  //保存信息
private static final Sex MALE=new Sex("男");
private static final Sen FEMALE=new Sen("女");
private Sex(String title)
{
this.title=title;
}
public static Sex getInst(int ch)
{
switch(ch)
{
case 0:
return MALE;
case 1:
return FEMALE;
default:
return null;
}
}
public String toString()
{
return this.title;
}
}
public class Test
{
public static void main(String args[])
{
System.out.println(Sex.getInst(0));
}
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評論 6 342
  • 今天,朋友圈被楊絳先生去世的消息刷屏了,我方驚訝于我屌絲環(huán)繞的周遭,盡還有那么多深藏的知識分子。這些年,我除了專業(yè)...
    再續(xù)朝圣路閱讀 405評論 0 1
  • 認(rèn)識朋友小A的時候,他已經(jīng)從導(dǎo)游成功轉(zhuǎn)型當(dāng)了旅游達人了。每天滿世界飛來飛去,免費住各種豪華的酒店,吃各類精致的美食...
    未末小七閱讀 979評論 0 2
  • 多少人生 如同是在一個軌道上 還沒有進入軌道 就已經(jīng)知道軌道那頭的結(jié)果 單行的軌道 非要不偏不倚 必須沿著軌跡 一...
    順山先生閱讀 291評論 3 7

友情鏈接更多精彩內(nèi)容