4對(duì)象與類

4對(duì)象與類

  • 面向?qū)ο蟪绦蛟O(shè)計(jì)
  • 如何創(chuàng)建標(biāo)準(zhǔn)java類庫(kù)中的類對(duì)象
  • 如何編寫(xiě)自己的類

4.1概述

  • 程序由對(duì)象構(gòu)成,每個(gè)對(duì)象包含對(duì)用戶公開(kāi)的特定功能部分和隱藏的實(shí)現(xiàn)部分洛史。一些對(duì)象來(lái)自于標(biāo)準(zhǔn)庫(kù)虹菲,一些是自定義的掉瞳。在OOP中陕习,不必關(guān)心對(duì)象的具體實(shí)現(xiàn)该镣,只要能滿足用戶需求即可损合。

.1類

  • (class)是構(gòu)造對(duì)象的模板或藍(lán)圖嫁审。由類構(gòu)造(construct)對(duì)象的過(guò)程稱為創(chuàng)建類的實(shí)例(instance)律适。用java編寫(xiě)的所有代碼都位于某個(gè)類的內(nèi)部捂贿。
  • 封裝(encapsulation)厂僧,將數(shù)據(jù)和行為組合在一個(gè)包中颜屠,并對(duì)對(duì)象的使用者隱藏了數(shù)據(jù)的實(shí)現(xiàn)方式汽纤。
  • 對(duì)象中的數(shù)據(jù)稱為實(shí)例域(instance field)蕴坪,操縱數(shù)據(jù)的過(guò)程稱為方法(method)背传。
  • 實(shí)現(xiàn)封裝的關(guān)鍵在于絕對(duì)不能讓類中的方法直接地訪問(wèn)其他類的實(shí)例域径玖。程序僅通過(guò)對(duì)象的方法與對(duì)象數(shù)據(jù)進(jìn)行交互梳星,即“黑盒”特性。
  • 可以通過(guò)拓展一個(gè)類來(lái)建立一個(gè)新的類辕近,所有類都來(lái)自于一個(gè)超類Object移宅。通過(guò)拓展一個(gè)類來(lái)建立另一個(gè)類的過(guò)程稱為繼承(inheritance)漏峰。

.2對(duì)象

  • OOP中浅乔,對(duì)象的三個(gè)主要特征:
    • 對(duì)象的行為(behavior):可以對(duì)對(duì)象施加哪些操作童擎,或可以對(duì)對(duì)象施加哪些方法
    • 對(duì)象的狀態(tài)(state):當(dāng)施加那些方法時(shí)顾复,對(duì)象如何響應(yīng)
    • 對(duì)象標(biāo)識(shí)(identify):如何辨別具有相同行為和狀態(tài)的不同對(duì)象
  • 每個(gè)對(duì)象都包含著描述當(dāng)前特征的信息芯砸,即對(duì)象的狀態(tài)。狀態(tài)是非自發(fā)的动羽,對(duì)象狀態(tài)的改變必須通過(guò)調(diào)用方法實(shí)現(xiàn)运吓,如若不然拘哨,則封裝性受到破壞倦青。作為一個(gè)類的實(shí)例,每個(gè)對(duì)象的標(biāo)識(shí)永遠(yuǎn)是不同的,狀態(tài)也經(jīng)常存在差異贾虽。

.3識(shí)別類

  • 首先從設(shè)計(jì)類開(kāi)始,然后再往每個(gè)類中添加方法菇肃。

.4類之間的關(guān)系

  • 在類之間,最常見(jiàn)的關(guān)系有:
    • 依賴(uses-a)
    • 聚合(has-a)
    • 繼承(is-a)
  • 依賴(dependence):如果一個(gè)類的方法操控另一個(gè)類的對(duì)象取募,我們就說(shuō)一個(gè)類依賴于另一個(gè)類琐谤。應(yīng)該盡可能將相互依賴的關(guān)系減至最少,即讓類之間的耦合度最小玩敏。
  • 聚合(aggregation):類A的對(duì)象包含類B的對(duì)象斗忌。
  • 繼承(inheritance):是用于表示特殊與一般關(guān)系的。

4.2使用預(yù)定義類

.1對(duì)象與對(duì)象變量

  • 要想使用對(duì)象旺聚,就必須首先構(gòu)造對(duì)象,并指定其初始狀態(tài)砰粹。然后唧躲,對(duì)對(duì)象應(yīng)用方法。
  • 在java語(yǔ)言中碱璃,使用構(gòu)造器(constructor)構(gòu)造新實(shí)例弄痹。構(gòu)造器名應(yīng)該與類名相同。
  • 例如:new Name();
  • 通常將對(duì)象存放在一個(gè)變量中:Name name = new Name();嵌器,以便多次使用肛真。
  • 定義對(duì)象變量之后,必須先初始化爽航,才可以引用對(duì)象/應(yīng)用方法蚓让。
  • 一個(gè)對(duì)象變量并沒(méi)有實(shí)際包含一個(gè)對(duì)象,而僅僅引用一個(gè)對(duì)象岳掐。在Java中凭疮,任何對(duì)象變量的值都是對(duì)存儲(chǔ)在另一個(gè)地方的一個(gè)對(duì)象的引用。new操作的返回值也是一個(gè)引用串述。
  • 局部變量不會(huì)自動(dòng)地初始化為null执解,而必須通過(guò)調(diào)用new或?qū)⑺鼈冊(cè)O(shè)置為null進(jìn)行初始化。
  • 所有Java對(duì)象都存儲(chǔ)在堆中。

.2Java類庫(kù)中的GregorianCalendar類

  • 紀(jì)元(epoch)衰腌,UTC時(shí)間新蟆,1970年1月1日00:00:00
  • Date類表示時(shí)間點(diǎn),GregorianCalendar類表示日歷右蕊。
  • Date可以使用before/after方法表示早于/晚于:today.before(birthday)
  • GregorianCalendar構(gòu)造器表達(dá)式:
    new GregorianCalendar();
    new GregorianCalendar(1999, 11, 31);//年月日
    new GregorianCalendar(1999, Calendar.DECEMBER, 31);//常量
    new GregorianCalendar(1999, Calendar.DECEMBER, 31, 23, 59, 59);//時(shí)間

.3更改器方法與訪問(wèn)器方法

  • 對(duì)實(shí)例域做出修改的方法稱為更改器方法(mutator method)琼稻,僅訪問(wèn)實(shí)例域而不進(jìn)行修改的方法稱為訪問(wèn)器方法(accessor method)。通常為get和set饶囚。

4.3用戶自定義類

  • 要想創(chuàng)建一個(gè)完整的程序帕翻,應(yīng)該將若干類組合在一起。

.1Employee類

  • 實(shí)例域萝风、構(gòu)造器嘀掸、方法

.2多個(gè)源文件的使用

.3剖析Employee類

  • 類通常包含類型屬于某個(gè)類類型的實(shí)例域。

.4構(gòu)造器

  • 構(gòu)造器總是伴隨著new操作符的執(zhí)行被調(diào)用规惰,而不能對(duì)一個(gè)已經(jīng)存在的對(duì)象調(diào)用構(gòu)造器來(lái)達(dá)到重新設(shè)置實(shí)例域的目的睬塌。
    • 構(gòu)造器與類同名
    • 每個(gè)類可以有一個(gè)以上的構(gòu)造器
    • 構(gòu)造器可以有0個(gè)、1個(gè)或多個(gè)參數(shù)
    • 構(gòu)造器沒(méi)有返回值
    • 構(gòu)造器總伴隨著new操作一起調(diào)用
    • ps:不要在構(gòu)造器中定義與定義域重名的局部變量

.5隱式參數(shù)與顯式參數(shù)

public void raiseSalary(double byPersent){
    double raise = Salary * byPersent / 100;
    Salary += raise;
}
number007.raiseSalary(5);
  • 隱式(implicit)參數(shù)歇万,是出現(xiàn)在方法名前的類對(duì)象揩晴;顯式(explicit)參數(shù),位于方法名后面的括號(hào)中贪磺。顯式參數(shù)明顯地列在方法聲明中硫兰,隱式參數(shù)沒(méi)有出現(xiàn)在方法聲明中。在每一個(gè)方法中缘挽,關(guān)鍵字this表示隱式參數(shù)瞄崇。

.6封裝的優(yōu)點(diǎn)

  • 一個(gè)只讀域,一旦在構(gòu)造器中設(shè)置完畢壕曼,就沒(méi)有任何一個(gè)辦法可以對(duì)它進(jìn)行修改苏研,這樣來(lái)確保域不會(huì)受到外界的破壞。
  • 在有些時(shí)候腮郊,需要獲得或設(shè)置實(shí)例域的值摹蘑,應(yīng)提供以下三項(xiàng)內(nèi)容:
    • 一個(gè)私有的數(shù)據(jù)域
    • 一個(gè)公有的域訪問(wèn)器方法
    • 一個(gè)公有的域更改器方法
  • 有下列優(yōu)勢(shì):
    • 可以改變內(nèi)部實(shí)現(xiàn),除了該類的方法之外轧飞,不會(huì)影響其他代碼
    • 更改器方法可以執(zhí)行錯(cuò)誤檢查
    • ps:不要編寫(xiě)返回可變對(duì)象的訪問(wèn)器方法(4.2.1對(duì)象引用)衅鹿。如果需要返回一個(gè)可變對(duì)象的引用,首先應(yīng)該對(duì)它進(jìn)行克隆(clone)过咬。
      class Employee{
      private Date hireDay;
      ...
      public Date getHireDay(){
      return hireDay.clone();
      }
      ...
      }
4-5

.7基于類的訪問(wèn)權(quán)限

class Employee{
...
    public boolean equals(Employee other){
        return name.equals(otehr.name);
    }
}
if(harry.equals(boss))...
  • 該方法訪問(wèn)了harry的私有域大渤,也訪問(wèn)了boss的私有域。這是合法的掸绞,因?yàn)閎oss是Employee類對(duì)象泵三,而Employee類的方法可以訪問(wèn)Employee類的任何一個(gè)對(duì)象的私有域。

.8私有方法

  • 只要方法是私有的,它就不會(huì)被外部的其他類操作調(diào)用烫幕,可以將其刪去俺抽。如果方法是公有的,就不能將其刪去较曼,因?yàn)槠渌a可能依賴它磷斧。

.9final實(shí)例域

  • 將實(shí)例域定義成fianl,構(gòu)建對(duì)象時(shí)必須初始化這樣的域捷犹。也就是說(shuō)弛饭,必須確保在每一個(gè)構(gòu)造器執(zhí)行之后,這個(gè)域的值被設(shè)置伏恐,并且在后面的操作中孩哑,不能在對(duì)它進(jìn)行修改。
  • fianl修飾符大都應(yīng)用于基本(primitive)類型域翠桦,或不可變(immutable)類的域。對(duì)于可變的類胳蛮,使用final修飾符可能會(huì)給讀者造成混亂销凑。

4.4靜態(tài)域與靜態(tài)方法

.1靜態(tài)域

  • 如果將域定義為static,每個(gè)類中都只有一個(gè)這樣的域仅炊。而每一個(gè)對(duì)象對(duì)于所有實(shí)例域卻都有自己的一份拷貝斗幼。例:
    class Employee{
    private static int nextId = 1;
    private int id抚垄;
    ...
    }
  • 現(xiàn)在蜕窿,每一個(gè)雇員對(duì)象都有一個(gè)自己的id域,但這個(gè)類的所有實(shí)例域?qū)⒐蚕硪粋€(gè)nextId域呆馁。換句話說(shuō)桐经,如果有1000個(gè)Employee類的對(duì)象,則有1000個(gè)實(shí)例域id浙滤,但是只有一個(gè)靜態(tài)域nextId阴挣。即使沒(méi)有一個(gè)Employee對(duì)象,靜態(tài)域nextId也存在纺腊。它屬于類畔咧,而不屬于任何獨(dú)立的對(duì)象脯厨。

.2靜態(tài)常量

public static fianl double PI = 3.141592653;

.3靜態(tài)方法

  • 靜態(tài)方法是一種不能向?qū)ο髮?shí)施操作的方法员魏。換句話說(shuō),沒(méi)有隱式的參數(shù)塔鳍∫妓冢可以認(rèn)為靜態(tài)方法是沒(méi)有this參數(shù)的方法拜隧。Employee類的靜態(tài)方法不能訪問(wèn)Id實(shí)例域,因?yàn)樗荒懿僮鲗?duì)象。但是虹蓄,靜態(tài)方法可以 訪問(wèn)自身類中的靜態(tài)域犀呼。例:
    public static int getNextId(){
    return nextId;//returns static field
    }
    int n = Employee.getNextId();

  • 建議使用類名,而不是對(duì)象來(lái)調(diào)用靜態(tài)方法薇组。在如下兩種情況下使用靜態(tài)方法:

    • 一個(gè)方法不需要訪問(wèn)對(duì)象狀態(tài)外臂,其所需參數(shù)都是通過(guò)顯式參數(shù)提供。
    • 一個(gè)方法只需要訪問(wèn)類的靜態(tài)域律胀。

.4工廠方法

  • 靜態(tài)方法的一種常見(jiàn)用途宋光。如NumberFormat類使用工廠方法產(chǎn)生不同風(fēng)格的格式對(duì)象。
  • NumberFormat類不利用構(gòu)造器完成操作的原因:
    • 無(wú)法命名構(gòu)造器炭菌。構(gòu)造器的名字必須與類名相同罪佳,但是這里希望各種實(shí)例采用不同的名字。
    • 當(dāng)使用構(gòu)造器時(shí)黑低,無(wú)法改變所構(gòu)造的對(duì)象類型

.5main方法

  • 不需要使用對(duì)象調(diào)用靜態(tài)對(duì)象赘艳。同理,main函數(shù)也是一個(gè)靜態(tài)方法克握。main方法不對(duì)任何對(duì)象進(jìn)行操作蕾管。事實(shí)上,在啟動(dòng)程序時(shí)還沒(méi)有任何一個(gè)對(duì)象菩暗。靜態(tài)的main方法將執(zhí)行并創(chuàng)建程序所需要的對(duì)象掰曾。

4.5方法參數(shù)

  • 術(shù)語(yǔ):按值調(diào)用(call by value)表示方法接收的是調(diào)用者提供的值。按引用調(diào)用(call by reference)表示方法接收的是調(diào)用者提供的變量地址停团。一個(gè)方法可以修改引用所對(duì)應(yīng)的變量值旷坦,而不能修改傳遞值調(diào)用所對(duì)應(yīng)的變量值。Java總是采用按值調(diào)用佑稠。也就是說(shuō)秒梅,方法得到的是所有參數(shù)值的一個(gè)拷貝。特別是讶坯,方法不能修改傳遞給它的任何參數(shù)變量的內(nèi)容番电。
    public static void tripleValue(double x){
    x=3*x;//doesn't work
    }
    double percent = 10;
    tripleValue(percent);
  • 對(duì)于基本數(shù)據(jù)類型的參數(shù)。無(wú)論怎樣調(diào)用辆琅,percent的值都不會(huì)改變漱办。x只是被初始化為percent值的一個(gè)拷貝。
    public static void tripleSalary(Employee x){
    x.raiseSalary(200);//raise to 200%
    }
    harry = new Employee(...);
    tripleSalary(harry);
  • 對(duì)于對(duì)象引用婉烟,具體的執(zhí)行過(guò)程為:
    • 1)x被初始化為harry值得拷貝娩井,這里是一個(gè)對(duì)象的引用。
    • 2)raiseSalary方法應(yīng)用于這個(gè)對(duì)象引用似袁。x和harry同時(shí)引用的那個(gè)Employee對(duì)象的薪金提高了200%洞辣。
    • 3)方法結(jié)束后咐刨,參數(shù)變量x不再使用。當(dāng)然扬霜,對(duì)象變量harry繼續(xù)引用那個(gè)薪金增至300%的雇員對(duì)象定鸟。


      4-7
  • 所以說(shuō),實(shí)現(xiàn)一個(gè)改變對(duì)象參數(shù)狀態(tài)的方法并不是一件難事著瓶。理由是联予,方法得到的是對(duì)象引用的拷貝,對(duì)象引用及其他的拷貝同時(shí)引用同一個(gè)對(duì)象材原。
  • Java總是采用按值調(diào)用沸久。對(duì)于Java采用引用調(diào)用的反例:
    public static void swap(Employee x, Employee y){
    Employee temp = x;
    x = y;
    y = temp;
    }
    swap(a, b);//never work
  • 如果Java對(duì)對(duì)象采用的是引用調(diào)用,那么該方法就能夠?qū)崿F(xiàn)交換數(shù)據(jù)的效果余蟹。實(shí)際上方法沒(méi)有改變存儲(chǔ)在變量a和b中的對(duì)象引用卷胯。在方法結(jié)束時(shí),參數(shù)變量x和y被丟棄了威酒。原來(lái)的a,b仍然引用這個(gè)方法調(diào)用之前所引用的對(duì)象窑睁。
  • Java中方法參數(shù)的使用情況:
    • 一個(gè)方法不能修改一個(gè)基本數(shù)據(jù)類型的參數(shù)
    • 一個(gè)方法可以改變一個(gè)對(duì)象參數(shù)的狀態(tài)
    • 一個(gè)方法不能讓對(duì)象參數(shù)引用一個(gè)新的對(duì)象

4.6對(duì)象構(gòu)造

.1重載

  • 重載(overloading):多個(gè)方法有相同的名字、不同的參數(shù)兼搏,便產(chǎn)生了重載卵慰。編譯器通過(guò)匹配挑選出相應(yīng)的方法,若不存在便會(huì)報(bào)錯(cuò)佛呻。
  • 返回類型不是方法簽名的一部分,所以不能有兩個(gè)名字相同病线、參數(shù)類型也相同卻返回不同類型值的方法吓著。

.2默認(rèn)域初始化

  • 如果在構(gòu)造器中沒(méi)有顯示地給域賦予初值,那么就會(huì)自動(dòng)地賦為默認(rèn)值:數(shù)值為0送挑,布爾值為false绑莺,對(duì)象引用為null。局部變量必須明確初始化惕耕,域中變量不初始化會(huì)被賦予初值(這樣不好)纺裁。

.3無(wú)參數(shù)構(gòu)造器

  • 如果在編寫(xiě)一個(gè)類時(shí)沒(méi)有編寫(xiě)構(gòu)造器,那么系統(tǒng)就會(huì)提供一個(gè)無(wú)參數(shù)的構(gòu)造器司澎。這個(gè)構(gòu)造器將所有的實(shí)例域設(shè)置為默認(rèn)值欺缘。
  • 如果類中提供了至少一個(gè)構(gòu)造器,但是沒(méi)有提供無(wú)參數(shù)的構(gòu)造器挤安,則在構(gòu)造對(duì)象時(shí)如果沒(méi)有提供參數(shù)就會(huì)被視為不合法谚殊。

.4顯示域初始化

  • 由于類的構(gòu)造器方法可以重載,所以可以采用多種形式設(shè)置類的實(shí)例域的初始狀態(tài)蛤铜,以確保不管怎樣調(diào)用構(gòu)造器嫩絮,每個(gè)實(shí)例域都可以被設(shè)置為一個(gè)有意義的初值丛肢。
  • 在構(gòu)造器執(zhí)行之前,先執(zhí)行賦值操作剿干。初始值不一定是常量蜂怎。例:
    class Employee{
    private static int nextId;
    private int id = assignId();
    ...
    private static int assignId(){
    int r = nextId;
    nextId++;
    return r;
    }
    ...
    }

.5參數(shù)名

  • 參數(shù)名有字面意思更好。
  • 用this訪問(wèn)實(shí)例域置尔。例:
    public Employee(String name, double salary){
    this.name = name;
    this.salary = salary;
    }

.6調(diào)用另一個(gè)構(gòu)造器

  • 關(guān)鍵字this引用方法的隱式參數(shù)杠步。
  • 如果構(gòu)造器的第一個(gè)語(yǔ)句形如this(...),這個(gè)構(gòu)造器將調(diào)用同一個(gè)類的另一個(gè)構(gòu)造器撰洗。例:
    public Employee(double s){
    //call Employee(String, double)
    this("Employee #"+nextId, s);
    nextId++;
    }
    調(diào)用new Employee(60000)時(shí)篮愉,Employee(double)構(gòu)造器將調(diào)用Employee(String, double)。

.7初始化塊

  • 初始化數(shù)據(jù)域:1)在構(gòu)造器中設(shè)置值差导;2)在聲明中賦值
  • 3)初始化塊(initialization block)试躏,例:
    class Employee{
    private static int nextId;
    private int id;
    private String name;
    private double salary;
    //object initialization block
    {
    id = nextId;
    nextId++;
    }
    public Employee(String n, double s){
    name = n;
    salary = s;
    }
    public Employee(){
    name = "";
    salary = 0;
    }
    ...
    }
    建議將初始化塊放在域定義之后。
  • 調(diào)用構(gòu)造器的具體步驟:
    • 1)所有數(shù)據(jù)域被初始化為默認(rèn)值(0设褐、false或null)
    • 2)按照在類聲明中出現(xiàn)的次序颠蕴,依次執(zhí)行所有域初始化語(yǔ)句和初始化塊
    • 3)如果構(gòu)造器第一行調(diào)用了第二個(gè)構(gòu)造器,則執(zhí)行第二個(gè)構(gòu)造器主體
    • 4)執(zhí)行這個(gè)構(gòu)造器主體

4.7包(Package)

  • 從編譯器角度看助析,嵌套的包之間沒(méi)有任何關(guān)系犀被。如,java.util與java.util.jar毫無(wú)關(guān)系外冀。

.1類的導(dǎo)入

  • 一個(gè)類可以使用所屬包中的所有類寡键,以及其他包中的公有類(public class)
  • 訪問(wèn)其他包中的公有類雪隧,第一種方式是在每個(gè)類名之前添加完整的包名西轩。第二種是使用import語(yǔ)句。
  • 導(dǎo)入的包內(nèi)類發(fā)生命名沖突時(shí)脑沿,需要指定藕畔。

.2靜態(tài)導(dǎo)入

  • import增加了導(dǎo)入靜態(tài)方法和靜態(tài)域的功能。如:
    import static java.lang.System.*
    就可以使用System類的靜態(tài)方法和靜態(tài)域庄拇,而不必加類名前綴注服。

.3將類放入包中

  • 將包名放在源文件的開(kāi)頭,如果沒(méi)有該語(yǔ)句措近,則放置在一個(gè)默認(rèn)包(defaulf package)中溶弟。

.4包作用域

  • 標(biāo)記為public的部分可以被任意的類使用,標(biāo)記為private的部分只能被定義它們的類使用熄诡。如果沒(méi)有指定可很,這個(gè)部分可以被同一個(gè)包中的所有方法訪問(wèn)。包密封(package sealing)

4.8類路徑

  • 類存儲(chǔ)在文件系統(tǒng)的子目錄中凰浮,類的路徑必須與包名匹配我抠。另外苇本,類文件也可以存儲(chǔ)在JAR文件中。
  • 為了使類能夠被多個(gè)程序共享菜拓,需要做到以下幾點(diǎn):
    • 1)把類放到一個(gè)目錄中
    • 2)將JAR文件放在一個(gè)目錄中
    • 3)設(shè)置類路徑(class path)瓣窄,類路徑是所有包含文件的路徑的集合。類路徑包括:
      • 1)基目錄/home/user/classdir或c:\classes纳鼎;
      • 2)當(dāng)前目錄俺夕;
      • 3)JAR文件/home/user/archives/archive.jar或c:\archives\archive.jar

4.9文檔注釋

.1注釋的插入

  • javadoc實(shí)用程序(utility)從下面幾個(gè)特性中抽取信息:
    • 公有類與接口
    • 公有的和受保護(hù)的構(gòu)造器及方法
    • 公有的和受保護(hù)的域
  • 每個(gè)注釋在標(biāo)記/**...*/之后緊跟著自由格式文本(free-form text)。標(biāo)記有@開(kāi)頭贱鄙,第一句應(yīng)該是一個(gè)概要行的句子劝贸,javadoc會(huì)自動(dòng)將這些句子抽取出來(lái)形成概要頁(yè)。

.2類注釋

  • 類注釋放在import語(yǔ)句之后逗宁,類定義之前映九。

.3方法注釋

  • 每一個(gè)方法注釋必須放在所描述的方法之前。除了通用標(biāo)記以外瞎颗,還可以使用以下標(biāo)記:
    • @param變量描述
    • @return描述
    • @throws類描述

.4域注釋

  • 只需要對(duì)公有域(通常指的是靜態(tài)常量)建立文檔

.5通用注釋

  • 下列標(biāo)記可以用在類文檔的注釋中:
    • @author姓名:作者
    • @version文本:版本描述
    • @since文本:對(duì)引入特性的版本描述
    • @see引用:提供javadoc中的超鏈接

.6包與概述注釋

  • 想要產(chǎn)生包注釋件甥,就需要在每一個(gè)包目錄中添加一個(gè)單獨(dú)的文件『甙危可以選擇:
    • 1)提供一個(gè)以package.html命名的HTML文件引有。在標(biāo)記<body>...</body>之間的所有文本都會(huì)被抽取出來(lái)
    • 2)提供一個(gè)以package-info.java命名的Java文件。這個(gè)文件必須包含一個(gè)初始的以/**和*/界定的Javadoc注釋倦逐,緊跟在報(bào)語(yǔ)句之后譬正。它不應(yīng)該包含更多的代碼和注釋。

.7注釋的抽取

  • 步驟:
    • 1)切換到包含想要生成文檔的源文件目錄檬姥。
    • 2)如果是一個(gè)包导帝,應(yīng)該運(yùn)行命令:javadoc -d docDirectory nameOfPackage
      還有多個(gè)文件和在默認(rèn)包中的情況。

4.10類設(shè)計(jì)技巧

  • 1)一定要保證數(shù)據(jù)私有穿铆,絕對(duì)不要破壞封裝性
  • 2)一定要對(duì)數(shù)據(jù)域初始化
  • 3)不要再類中使用過(guò)多的基本類型
  • 4)不是所有的域都需要獨(dú)立的域訪問(wèn)器和域更改器
  • 5)將職責(zé)過(guò)多的類進(jìn)行分解
  • 6)類名和方法名要能夠提現(xiàn)它們的職責(zé)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市斋荞,隨后出現(xiàn)的幾起案子荞雏,更是在濱河造成了極大的恐慌,老刑警劉巖平酿,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凤优,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蜈彼,警方通過(guò)查閱死者的電腦和手機(jī)筑辨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)幸逆,“玉大人棍辕,你說(shuō)我怎么就攤上這事暮现。” “怎么了楚昭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵栖袋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我抚太,道長(zhǎng)塘幅,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任尿贫,我火速辦了婚禮电媳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庆亡。我一直安慰自己匾乓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布身冀。 她就那樣靜靜地躺著钝尸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搂根。 梳的紋絲不亂的頭發(fā)上珍促,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音剩愧,去河邊找鬼猪叙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛穴翩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锦积,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼芒帕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丰介?” 一聲冷哼從身側(cè)響起背蟆,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哮幢,沒(méi)想到半個(gè)月后带膀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡橙垢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年垛叨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柜某。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嗽元,死狀恐怖敛纲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情还棱,我是刑警寧澤载慈,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站珍手,受9級(jí)特大地震影響办铡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜琳要,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一寡具、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稚补,春花似錦童叠、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至乍惊,卻和暖如春杜秸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背润绎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工撬碟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人莉撇。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓呢蛤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親棍郎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子其障,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,967評(píng)論 6 13
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法涂佃,內(nèi)部類的語(yǔ)法静秆,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法巡李,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,631評(píng)論 18 399
  • 5繼承 5.1 類、超類和子類 重用部分代碼扶认,并保留所有域侨拦。“is-a”關(guān)系辐宾,用extends表示狱从。 已存在的類被...
    我快要上天啦閱讀 775評(píng)論 1 3
  • 6 接口與內(nèi)部類 后面將介紹Java的幾種常用的高級(jí)技術(shù)膨蛮,掌握以完善自己的Java工具箱。 首先季研,接口(inter...
    我快要上天啦閱讀 459評(píng)論 0 1
  • 今天也是感覺(jué)被生活過(guò)了敞葛,卻沒(méi)有自己。工作一直在忙与涡,卻不知道要忙什么惹谐。腦袋一直沒(méi)有休息,卻不知道在思考什么驼卖。做一個(gè)想...
    yi生有你閱讀 136評(píng)論 0 1