Java學(xué)習(xí)(上)

前言

暑假的時(shí)候?qū)W過一段時(shí)間的Java,但只是自己買一本書來看,書中的一大段一大段文字顯得十分生硬,因此學(xué)完之后感覺自己對(duì)于一些概念還是一知半解。于是國慶假期我在慕課網(wǎng)重新學(xué)習(xí)了Java,一來是可以復(fù)習(xí)曾經(jīng)學(xué)過的知識(shí),二來是可以弄清楚自己曾經(jīng)感到模糊的概念,三來還可以了解到各路大神對(duì)Java這門語言的見解,加深自己對(duì)其的認(rèn)知與理解。下面我就整理了一些我認(rèn)為在Java的學(xué)習(xí)過程比較關(guān)鍵的內(nèi)容(這里只闡述一些基本概念,具體操作請參考本文最下方提供的參考資料):
一、類與對(duì)象


和我們所熟悉的C++一樣,Java也是面向?qū)ο缶幊痰恼Z言,因此對(duì)象便是Java的核心。

一些概念:

對(duì)象:

在現(xiàn)實(shí)世界中,客觀存在的事物就是對(duì)象,例如人類、書桌、計(jì)算機(jī)等。而對(duì)于計(jì)算機(jī)來說,面向?qū)ο缶褪侵戈P(guān)注具體事物的信息。

類:

類是對(duì)象的類型,確定對(duì)象了對(duì)象擁有的特征行為,翻譯成計(jì)算機(jī)語言就是屬性方法。類是具有相同屬性和方法的對(duì)象的集合,可以把多個(gè)具有相同屬性和方法的對(duì)象有一個(gè)類來表示。但和對(duì)象不同,類并不是客觀存在的事物。

對(duì)象的屬性:

對(duì)象的屬性就是對(duì)象具有的各種特征,而對(duì)于每個(gè)對(duì)象來說,每個(gè)特征都具有特定值。

對(duì)象的方法:

對(duì)象的方法就是對(duì)象執(zhí)行的操作,也可以理解為對(duì)象能干什么。

說了一大堆概念,下面舉一個(gè)更直觀的例子來說明:手機(jī)是一個(gè)總稱,可以把它看成是一個(gè)類,而具體到某一品牌某一型號(hào)的手機(jī)則是手機(jī)類中的一個(gè)對(duì)象。以最新的蘋果產(chǎn)品iPhone7為例(我真的沒有在賣廣告),它的屏幕有大小、內(nèi)存有大小、還有價(jià)格,因此屏幕、內(nèi)存和價(jià)格便是它這個(gè)對(duì)象的特征(屬性),而屏幕的大小、內(nèi)存的大小、具體的價(jià)格就是特征的值(屬性值);除了這些,iPhone7還有打電話、發(fā)短信的功能,這便是它這個(gè)對(duì)象的行為(方法),即能打電話、能發(fā)短信。試想一下,是不是所有手機(jī)都有屏幕、內(nèi)存和價(jià)格這些特征,都有打電話、發(fā)短信這些行為呢(當(dāng)然有些手機(jī)功能更先進(jìn),會(huì)擁有其它手機(jī)沒有的功能,這要用到接口的概念,以后將會(huì)介紹)?可想而知是的,因此手機(jī)便是一個(gè)類,而iPhone7就是手機(jī)類中的一個(gè)具體對(duì)象。同樣,三星Note 7 、華為P9這些手機(jī)也是手機(jī)類中的具體對(duì)象。

成員變量和局部變量:

成員變量在類中定義,用來描述對(duì)象的屬性;局部變量在類的成員方法中定義,用來存放臨時(shí)數(shù)據(jù)。
區(qū)別:

  • 作用域:成員變量的作用域?yàn)檎麄€(gè)類;局部變量的作用域?yàn)樗诘某蓡T方法
  • 初始值:Java會(huì)給成員變量賦一個(gè)初始值,但不會(huì)給局部變量賦一個(gè)初始值(這一點(diǎn)比較容易忽略的,如果不給局部變量賦初始值,則程序會(huì)報(bào)錯(cuò))
  • 名稱:在同一個(gè)方法中不能有同名的局部變量,但在不同的方法中可以有同名的局部變量(局部變量的作用域能很好地解釋這一點(diǎn):第一個(gè)方法中的局部變量并不會(huì)在第二個(gè)方法中生效。因此同名的兩個(gè)(或多個(gè))局部變量是不同的局部變量,只不過名稱相同罷了)
  • 優(yōu)先級(jí):當(dāng)成員變量和局部變量同名時(shí), 局部變量具有更高的優(yōu)先級(jí)(這在Java中是允許的,但調(diào)用這個(gè)局部變量時(shí)優(yōu)先取局部變量的值而不是成員變量的值)
構(gòu)造方法:

構(gòu)造方法是定義類中用來初始化對(duì)象方法。與上面介紹的對(duì)象的方法有所不同,構(gòu)造方法不代表對(duì)象能干什么,但它能創(chuàng)建這個(gè)對(duì)象并給對(duì)象初始化。
在創(chuàng)建對(duì)象的過程中,用new關(guān)鍵字來創(chuàng)建:類名 對(duì)象名 = new 類名() 。這里的類名()其實(shí)就是調(diào)用這個(gè)類的無參構(gòu)造方法(不管是有參還是無參,構(gòu)造方法都與類同名)。
注意:

  • 當(dāng)沒有指定構(gòu)造方法時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用無參的構(gòu)造方法
  • 當(dāng)指定了構(gòu)造方法時(shí),無論這個(gè)方法是有參的還是無參的,系統(tǒng)都不會(huì)調(diào)用無參的構(gòu)造方法(舉個(gè)例子,通過兩種構(gòu)造方法來初始化對(duì)象:類名 對(duì)象名 = new 類名()類名 對(duì)象名 = new 類名(參數(shù)類型 參數(shù)名),如果此時(shí)已經(jīng)定義了有參(或者無參)的方法的話,類名 對(duì)象名 = new 類名()這里系統(tǒng)就會(huì)報(bào)錯(cuò),即系統(tǒng)不會(huì)調(diào)用原本默認(rèn)的無參的構(gòu)造方法來創(chuàng)建對(duì)象,只能通過已定義的有參(或者無參)的構(gòu)造方法來創(chuàng)建對(duì)象)
  • 構(gòu)造方法不但可以給對(duì)象的屬性賦值(即初始化對(duì)象), 還能夠保證給對(duì)象的屬性賦一個(gè)合理的值(舉個(gè)例子,現(xiàn)實(shí)生活中我們知道如今手機(jī)屏幕的大小不可能為負(fù)數(shù),也不可能太大,因此當(dāng)我們定義一個(gè)有參的構(gòu)造方法的時(shí)候就可以給手機(jī)的屏幕大小這一屬性賦一個(gè)合乎常理的值,當(dāng)傳入的參數(shù)小于0或者大于8(單位為英寸),就可以通過構(gòu)造方法強(qiáng)制把屏幕大小設(shè)定為一個(gè)正常值)
權(quán)限修飾符:

權(quán)限修飾符控制著對(duì)類、類的成員變量和類的成員方法的訪問,種類和作用范圍如下圖所示:

權(quán)限修飾符的種類和作用范圍

對(duì)類和對(duì)象的操作:

定義類:

簡單來說,定義Java中的類分為三個(gè)步驟:
1.定義訪問權(quán)限、類名等
2.編寫類的屬性
3.編寫類的方法

即為:

[權(quán)限修飾符] class 類名{
    //屬性(成員變量)
    [權(quán)限修飾符] 屬性1的類型 屬性1;
    [權(quán)限修飾符] 屬性2的類型 屬性2;
    [權(quán)限修飾符] 屬性3的類型 屬性3;
    ...
    //方法
    方法1;
    方法2;
    方法3;
    ...
}

注意:

  • 這里的屬性和方法可為一個(gè)或多個(gè),也可以沒有
  • 類名通常以大寫字母開頭
  • []代表可有可無的內(nèi)容,下同
定義屬性:

定義屬性就是聲明變量賦初始值。
注意:如果變量有初始值就賦初始值,無初始值則賦0(int型、long型)或者0.0(double型)或者" "(String型),以此類推。

定義方法:
[權(quán)限修飾符] 返回值類型 方法名(參數(shù)類型 參數(shù)名){
    //方法體
    return 返回值;
}

注意:

  • 方法名后的括號(hào)內(nèi)容可以為空,即代表無參的方法
  • 方法也可以無返回值,此時(shí)返回值類型為void
  • 方法體可以為空
  • 返回值的類型一定要與第一行所聲明的返回值類型相符,否則程序會(huì)報(bào)錯(cuò)
  • 方法名如果由多個(gè)單詞構(gòu)成,不使用下劃線,而是除第一個(gè)單詞外其余單詞首字母大寫,其余字母均小寫,以此區(qū)分
調(diào)用對(duì)象的屬性:

對(duì)象名.屬性

調(diào)用對(duì)象的方法:

對(duì)象名.方法名()

二、封裝

首先要強(qiáng)調(diào),面向?qū)ο笸瑫r(shí)也是Java三大特性:封裝、繼承多態(tài)。

封裝:

封裝是指將類的某些信息隱藏在類的內(nèi)部,不允許外部程序直接訪問,只能通過該類提供的成員方法來實(shí)現(xiàn)對(duì)這些信息的訪問與操作。這樣使得外部程序只能通過規(guī)定的方法訪問和操作類中的數(shù)據(jù),提高了程序的安全性。
封裝的實(shí)現(xiàn)步驟為:
1.修改成員變量(屬性)的可見性(將權(quán)限修飾符設(shè)為private,即只能在本類中調(diào)用)
2.創(chuàng)建getter和setter方法,用于屬性的讀寫(這里不必糾結(jié)于這兩種方法的名稱,知道它們的具體代碼和作用就好。實(shí)際上只要正確,用其他方法也可以實(shí)現(xiàn)屬性的讀寫,但規(guī)范來說應(yīng)使用getter和setter方法)
3.在getter和setter方法中加入一些控制語句,對(duì)屬性值是否合法(合乎常理)進(jìn)行判斷

this關(guān)鍵字:

在Java中,this關(guān)鍵字被隱式地用來引用本類中的成員變量和成員方法,常常與封裝聯(lián)系起來使用。

現(xiàn)在以上文提到的手機(jī)類為例描述封裝的具體實(shí)現(xiàn),先定義Phone類:

package com.project;//聲明包
public class Phone{//定義Phone類
    private float screen;//定義屏幕屬性(單位為英寸)
    private float CPU;//定義內(nèi)存屬性(單位為G)
    private int price;//定義價(jià)格屬性(單位為元)
    //這里封裝了3個(gè)屬性,用private修飾它們的訪問權(quán)限
    public float getScreen(){//定義screen屬性的getter方法
        return screen;//返回screen屬性的值
    }
    public void setScreen(float screen){//定義screen屬性的setter方法
        this.screen = screen;//把screen屬性的值設(shè)置為傳入的參數(shù)的值
    }

}

這樣就定義好了Phone類中screen屬性的getter和setter方法,外部程序可以通過對(duì)象名.getScreen()對(duì)象名.setScreen(float型數(shù)據(jù))來獲得對(duì)象的screen屬性值和設(shè)置對(duì)象的screen屬性值。
PS:利用開發(fā)工具(Eclipse、Myeclipse)能快速創(chuàng)建getter和setter方法,小伙伴們可以自行試試應(yīng)該怎么操作。
在倒數(shù)第三行代碼中出現(xiàn)了this關(guān)鍵字,在這里它的作用是引用phone類中的成員變量screen,而this.screen = screen語句中第二個(gè)screen是指形參screen,這條語句的作用就是將形參screen的值賦給成員變量screen。由于它們同名,因此需要使用this關(guān)鍵字來區(qū)分它們。
此外,this關(guān)鍵字還可以引用本類中的成員方法,還是以上文的Phone類為例:

package com.project;
public class Phone{
    ...
    public void call(){//定義無參無返回值的call方法
        System.out.println("手機(jī)具有打電話的功能");//打印輸出“手機(jī)具有打電話的功能”這句話
    }
    public void sendMessage(){//定義無參無返回值的sendMessage方法
        System.out.println("手機(jī)具有發(fā)短信的功能");//打印輸出“手機(jī)具有發(fā)短信的功能”這句話
    }
    public void function(){//定義無參無返回值的function方法
        System.out.println("手機(jī)具有以下功能");
        this.call();
        this.sendMessage();
    }
}

新建一個(gè)項(xiàng)目測試類用于測試功能的實(shí)現(xiàn):

package com.project;
public class Test {
    public static void main(String[] args) {
        Phone iPhone7 = new Phone();//創(chuàng)建Phone類對(duì)象iPhone7
        iPhone7.function();調(diào)用iPhone7的function()方法
}
}

控制臺(tái)界面會(huì)輸出以下信息:

控制臺(tái)顯示

說明this關(guān)鍵字既可以引用本類中的成員變量,又可以引用本類中的成員方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評(píng)論 18 399
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,428評(píng)論 0 2
  • Win7下如何打開DOS控制臺(tái)? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,710評(píng)論 4 12
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,815評(píng)論 0 11
  • 清風(fēng),微雨,水花打著轉(zhuǎn)兒。 門很低,手伸起來, 剛好就碰到了。 房子一定孤單極了, 所以, 一直想著 你和我。 閃...
    聽曉風(fēng)語閱讀 163評(píng)論 0 0

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