Java基礎(chǔ) 類 對象 封裝

“簡單不先于復(fù)雜捏萍,而是在復(fù)雜之后.” —— Alan Perlis
j.jpeg

面向過程的程序設(shè)計:

面向過程,一種較早的編程思想譬重,在過程的角度思考問題午磁,強(qiáng)調(diào)的就是功能行為,功能的執(zhí)行過程,即先干什么,后做什么搭盾。每一個功能都使用函數(shù)實現(xiàn)

這是分割線.jpg

面向?qū)ο蟮某绦蛟O(shè)計(OOP):

面向?qū)ο蟪绦蛟O(shè)計,顧名思義,該思想是站在對象的角度思考問題,我們把多個功能合理的放到不同對象里茅撞,強(qiáng)調(diào)的是具備某些功能的對象.
面向?qū)ο蟪绦蛟O(shè)計是當(dāng)今主流的程序設(shè)計規(guī)范,更加適合使用于解決規(guī)模較大的問題,但是千萬不要誤解為面向?qū)ο笠欢ň蛢?yōu)于面向過程的設(shè)計.

這是分割線.jpg

面向?qū)ο笕筇卣鳎?/h4>
  • 封裝(Encapsulation):將對象的實現(xiàn)細(xì)節(jié)隱藏起來,然后通過公共的方法來向外暴露該對象的功能

  • 繼承(Inheritance):當(dāng)子類繼承父類后巨朦,子類是一種特殊的父類米丘,能直接或間接獲得父類里的成員。

  • 多態(tài)(Polymorphism):可以直接把子類對象賦給父類變量糊啡,但是運(yùn)行時依然表現(xiàn)出子類的行為特征拄查,這意味著同一類型的對象在運(yùn)行時可能表現(xiàn)出不同的行為特征。

面向?qū)ο?jpeg
這是分割線.jpg

抽象

抽象是指從特定的角度出發(fā)棚蓄,從已經(jīng)存在的一些事物中抽取我們所關(guān)注的特性堕扶、行為,從而形成一個新的事物的思維過程梭依,是一種從復(fù)雜到簡潔的思維方式稍算。

這是分割線 .jpg

類(Class)定義了一件事物的抽象特點(diǎn)。通常來說睛挚,類定義了事物的屬性和它可以做到的(它的行為)邪蛔。
具有相同特性(狀態(tài))和行為(功能)的對象的抽象就是類

舉例來說,“人”這個類會包含人的一切基礎(chǔ)特征,即所有“人”都共有的特征或行為侧到,例如有眼睛,有鼻子,會吃飯勃教。


代碼
 public class User {
    private String name;
    private int age;

    public void eat() {
        System.out.println("");
    }

    public User(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
}
這是分割線.jpg

對象

對象(Object)是類的實例。

例如匠抗,“狗”這個類列舉狗的特點(diǎn)故源,從而使這個類定義了世界上所有的狗。而萊絲這個對象則是一條具體的狗汞贸,它的屬性也是具體的绳军。狗有皮毛顏色,而萊絲的皮毛顏色是棕白色的矢腻。因此门驾,萊絲就是狗這個類的一個實例。一個具體對象屬性的值被稱作它的“狀態(tài)”多柑。(系統(tǒng)給對象分配內(nèi)存空間奶是,而不會給類分配內(nèi)存空間。這很好理解竣灌,類是抽象的系統(tǒng)不可能給抽象的東西分配空間聂沙,而對象則是具體的。)

對象: 對象是唯一的
創(chuàng)建對象:類名 對象名 = new 類名()
使用對象:對象.屬性 / 對象.方法名()

總結(jié):對象是類的實例初嘹,類是對象的抽象及汉。

這是分割線.jpg
JAVA中set() 和 get() 方法的理解及使用

set是設(shè)置的意思,而get是獲取的意思屯烦,比如setAge()和getAge()坷随,表示設(shè)置年齡和獲取年齡
然后我們來了解一下JAVA面向?qū)ο缶幊讨械姆忾]性和安全性,封閉性即對類中的域變量進(jìn)行封閉操作漫贞,即用private來修飾他們甸箱,如此一來其他類則不能對該變量訪問。這樣我們就將這些變量封閉在了類內(nèi)部迅脐,這樣就提高了數(shù)據(jù)的安全性芍殖,當(dāng)我們想要操作這些域變量怎么辦呢?我們可以通過兩種方法谴蔑,第一中即通過public方式的構(gòu)造器(或稱構(gòu)造函數(shù))豌骏,對象一實例化就對該變量賦值。第二種就是通過上面提到的set和get方法隐锭,這里我舉一個特定的例子窃躲,我定義一個Person類,該類中有name钦睡、age這兩個私有域變量蒂窒,然后我定義setname()、getname()、setage()洒琢、getage()這四個方法秧秉,通過這四個方法來實現(xiàn)對name和age的操作。這樣一來衰抑,我不用直接對Person類中的域變量操作象迎,而是通過set和get方法間接地操作這些變量,這樣就能提高域變量的安全性呛踊,同時又保證了域變量的封裝型砾淌。
set和get方法的使用場景,一般來說set和get方法都是對私有域變量進(jìn)行操作的谭网,所以大多數(shù)都是使用在包含特定屬性的類實體中汪厨。

代碼

public class UserAccount {

    private String userName;
    private String sex;

    public void setUserName(String name) {
        userName = name;
    }

    public String getUserName() {
        return userName;
    }
    public void setSex(String str) {

        if (str.equals("男") || str.equals("女")) {
            sex = str;
        } else {
            sex = "男"; 
        }
    }
    public String getSex() {
        return sex;
    }
}


這是分割線.jpg

封裝

概念
  • 將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問蜻底,而是通過該類提供的方法類實現(xiàn)對隱藏信息的操作和訪問骄崩。

優(yōu)點(diǎn)
  • 隱藏實際細(xì)節(jié),提供公共的訪問方式
  • 提高了代碼的復(fù)用性
  • 提高安全性
  • 封裝原則
  • 將不需要對外提供的內(nèi)容都隱藏起來
  • 把屬性隱藏薄辅,提供公共方法對其訪問

實現(xiàn)步驟

① 修改屬性的可見性:設(shè)為private
② 創(chuàng)建getter/setter方法:用于屬性的讀寫
③ 在getter/setter方法中加入屬性控制語句:對屬性值的合法性進(jìn)行判斷

這是分割線.jpg

構(gòu)造函數(shù)

構(gòu)造函數(shù)的作用: 給對應(yīng)的對象進(jìn)行初始化。


構(gòu)造函數(shù)的定義的格式:

修飾符  函數(shù)名(形式參數(shù)){
    函數(shù)體...
}

構(gòu)造函數(shù)要注意的細(xì)節(jié):
  1. 構(gòu)造函數(shù) 是沒有返回值類型的抠璃。
  2. 構(gòu)造函數(shù)的函數(shù)名必須要與類名一致站楚。
  3. 構(gòu)造函數(shù)并不是由我們手動調(diào)用的,而是在創(chuàng)建對應(yīng)的對象時搏嗡,jvm就會主動調(diào)用到對應(yīng)的構(gòu)造函數(shù)窿春。
  4. 如果一個類沒有顯式的寫上一個構(gòu)造方法時,那么java編譯器會為該類添加一個無參的構(gòu)造函數(shù)的采盒。
  5. 如果一個類已經(jīng)顯式的寫上一個構(gòu)造方法時,那么java編譯器則 不會再為該類添加 一個無參 的構(gòu)造方法旧乞。
  6. 構(gòu)造函數(shù)是 可以在一個類中以函數(shù)重載 的形式存在多個 的。
這是分割線.jpg
構(gòu)造函數(shù)與普通 函數(shù)的區(qū)別:
  1. 返回值類型的區(qū)別:
    1. 構(gòu)造函數(shù)是沒有返回值類型 的磅氨,
    2. 普通函數(shù)是有返回值類型的尺栖,即使函數(shù)沒有返回值,返回值類型也要寫上void烦租。
  2. 函數(shù)名的區(qū)別:
    1. 構(gòu)造函數(shù)的函數(shù)名必須要與類名一致延赌,
    2. 普通函數(shù)的函數(shù)名只要符合標(biāo)識符的命名規(guī)則即可。
  3. 調(diào)用方式的區(qū)別:
    1. 構(gòu)造函數(shù)是 在創(chuàng)建對象的時候由jvm調(diào)用的叉橱。
    2. 普通函數(shù)是由我們使用對象調(diào)用的挫以,一個對象可以對象多次普通 的函數(shù),
  4. 作用上的區(qū)別:
    1. 構(gòu)造函數(shù) 的作用用于初始化一個對象窃祝。
    2. 普通函數(shù)是用于描述一類事物的公共行為的掐松。

代碼

以下Baby類中提供了兩個構(gòu)造函數(shù):
//嬰兒類
class Baby{

    int id; //身份證

    String  name;  //名字

    //構(gòu)造函數(shù)
    public  Baby(int i , String n){
        id  = i;
        name = n;
        System.out.println("baby的屬性初始化完畢!!");
    }

    //無參 的構(gòu)造函數(shù)
    public Baby(){
        System.out.println("無參的構(gòu)造函數(shù)被調(diào)用了..");
    }

    public void cry(){
        System.out.println(name+"哇哇哭...");
    }    
}
這是分割線.jpg

this關(guān)鍵字

  • this關(guān)鍵字代表了所屬函數(shù)的調(diào)用者對象大磺。

this關(guān)鍵字作用:
  1. 如果存在同名成員變量與局部變量時抡句,在方法內(nèi)部默認(rèn)是訪問局部變量的數(shù)據(jù),可以通過this關(guān)鍵字指定訪問成員變量的數(shù)據(jù)量没。
  2. 在一個構(gòu)造函數(shù)中可以調(diào)用另外一個構(gòu)造函數(shù)初始化對象玉转。

this關(guān)鍵字調(diào)用其他的構(gòu)造函數(shù)要注意的事項:
  1. 存在同名的成員變量與局部變量時,在方法的內(nèi)部訪問的是局部變量(java 采取的是“就近原則”的機(jī)制訪問的殴蹄。)
  2. 如果在一個方法中訪問了一個變量究抓,該變量只存在成員變量的情況下,那么java編譯器會在該變量的 前面添加this關(guān)鍵字袭灯。

this關(guān)鍵字調(diào)用其他的構(gòu)造函數(shù)要注意的事項:

  1. this關(guān)鍵字調(diào)用其他的構(gòu)造函數(shù)時刺下,this關(guān)鍵字必須要位于構(gòu)造函數(shù)中 的第一個語句。
  2. this關(guān)鍵字在構(gòu)造函數(shù)中不能出現(xiàn)相互調(diào)用 的情況稽荧,因為是一個死循環(huán)橘茉。
這是分割線.jpg

static關(guān)鍵字

  • static靜態(tài)變量(也稱類成員)
  • 它屬于整個類所有,而不是某個對象所有姨丈,被類的所有對象所共享畅卓。
  • 靜態(tài)成員可使用類名直接訪問,也可以使用對象名進(jìn)行訪問蟋恬。
  • 靜態(tài)成員屬于整個類翁潘,當(dāng)系統(tǒng)第一次使用該類時,就會為其分配內(nèi)存空間直到該類被卸載才會進(jìn)行資源回收歼争。

static靜態(tài)函數(shù)
1. static修飾成員變量 :如果有數(shù)據(jù)需要被共享給所有對象使用時拜马,那么就可以使用static修飾。

    靜態(tài)成員變量的訪問方式:

            方式1: 可以使用對象進(jìn)行訪問沐绒。
                格式: 對象.變量名俩莽。

            方式二: 可以使用類名進(jìn)行訪問。
                格式: 類名.變量名;

        注意: 
            1. 非靜態(tài)的成員變量只能使用對象進(jìn)行訪問乔遮,不能使用類名進(jìn)行訪問扮超。
            2. 千萬不要為了方便訪問數(shù)據(jù)而使用static修飾成員變量,只有成員變量的數(shù)據(jù)是真正需要被共享的時候
            才使用static修飾申眼。

    static修飾成員變量的應(yīng)用場景: 如果一個數(shù)據(jù)需要被所有對象共享使用的時候瞒津,這時候即可好實用static修飾。

靜態(tài)代碼塊:
static {
  /// 要執(zhí)行的語句
}

static(靜態(tài)括尸、修飾符)
static修飾成員變量時:static修飾成員變量時,那么該成員變量的數(shù)據(jù)就是一個共享的數(shù)據(jù).

    靜態(tài)成員變量的訪問方式:

            方式一: 使用對象進(jìn)行訪問巷蚪。
                    對象.屬性名
            方式二:可以使用類名進(jìn)行訪問。
                    類名.屬性名
    注意:
        1. 非靜態(tài)成員變量不能類名直接訪問濒翻,只能使用對象進(jìn)行訪問屁柏。
        2. 千萬不要為了方便訪問成員變量而使用static修飾啦膜,一定要是該數(shù)據(jù)是共享數(shù)據(jù) 時才使用static修飾。

static修飾方法(靜態(tài)的成員方法):

    訪問方式:

        方式一:可以使用對象進(jìn)行訪問淌喻。
                對象.靜態(tài)的函數(shù)名();

        方式二:可以使用類名進(jìn)行訪問僧家。
                類名.靜態(tài)函數(shù)名字。

    推薦使用是類名直接訪問靜態(tài)的成員裸删。
這是分割線.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末八拱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涯塔,更是在濱河造成了極大的恐慌肌稻,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匕荸,死亡現(xiàn)場離奇詭異爹谭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)榛搔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門诺凡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人践惑,你說我怎么就攤上這事腹泌。” “怎么了尔觉?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵真屯,是天一觀的道長。 經(jīng)常有香客問我穷娱,道長,這世上最難降的妖魔是什么运沦? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任泵额,我火速辦了婚禮,結(jié)果婚禮上携添,老公的妹妹穿的比我還像新娘嫁盲。我一直安慰自己,他們只是感情好烈掠,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布羞秤。 她就那樣靜靜地躺著,像睡著了一般左敌。 火紅的嫁衣襯著肌膚如雪瘾蛋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天矫限,我揣著相機(jī)與錄音哺哼,去河邊找鬼佩抹。 笑死,一個胖子當(dāng)著我的面吹牛取董,可吹牛的內(nèi)容都是我干的棍苹。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼茵汰,長吁一口氣:“原來是場噩夢啊……” “哼枢里!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹂午,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤栏豺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后画侣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冰悠,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年配乱,在試婚紗的時候發(fā)現(xiàn)自己被綠了溉卓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡搬泥,死狀恐怖桑寨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忿檩,我是刑警寧澤尉尾,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站燥透,受9級特大地震影響沙咏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜班套,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一肢藐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吱韭,春花似錦吆豹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猿规,卻和暖如春衷快,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坎拐。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工烦磁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留养匈,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓都伪,卻偏偏與公主長得像呕乎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子陨晶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361

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