日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java基礎(chǔ)知識(shí)總結(jié)

 二月石橋 2015-06-22

1.什么是類和對(duì)象?

EVERYTHING IS OBJECT(萬物皆對(duì)象)所有的事物都有兩個(gè)方面:

  • 有什么(屬性):用來描述對(duì)象。
  • 能夠做什么(方法):告訴外界對(duì)象有那些功能。
  • 對(duì)象:對(duì)現(xiàn)實(shí)世界中的實(shí)體的抽象。在計(jì)算機(jī)中,是指可標(biāo)識(shí)的存儲(chǔ)區(qū)域。
  • 類:具有共同屬性和行為的對(duì)象的抽象。類是創(chuàng)建對(duì)象的模板。

 

2.為什么要使用面向?qū)ο螅?/strong>

首先,面向?qū)ο蠓先祟惪创挛锏囊话阋?guī)律。 對(duì)象的方法的實(shí)現(xiàn)細(xì)節(jié)對(duì)其他對(duì)象是屏蔽的。 我們通過類來看待對(duì)象,類是對(duì)象的抽象。

其次,采用面向?qū)ο蠓椒梢允瓜到y(tǒng)各部分各司其職、各盡所能。 對(duì)象之間的耦合性一定要低。這樣才能使每個(gè)對(duì)象本身做成最好的。

對(duì)于對(duì)象的要求:高內(nèi)聚、低耦合,這樣容易拼裝成為一個(gè)系統(tǒng)。

實(shí)現(xiàn)高內(nèi)聚就是要最大限度低提高復(fù)用性(復(fù)用性好是因?yàn)楦邇?nèi)聚)??蓮?fù)用性是OOP的基礎(chǔ)。

 

3.面向過程思想和面向?qū)ο笏枷氡容^?

面向過程的思想:由過程、步驟、函數(shù)組成,以過程為核心;

面向?qū)ο蟮乃枷耄阂詫?duì)象為中心,先開發(fā)類,得到對(duì)象,通過對(duì)象之間相互通信實(shí)現(xiàn)功能。  

 

4.實(shí)例變量和局部變量的比較

  • 實(shí)例變量:定義在類中但在任何方法之外。(New出來的均有初值)
  • 局部變量:定義在方法之中的變量。
  • 局部變量要先賦值,再進(jìn)行運(yùn)算,而實(shí)例變量均已經(jīng)賦初值。這是局部變量和實(shí)例變量的一大區(qū)別。實(shí)例變量的對(duì)象賦值為null。
  • 不允許在同一作用域內(nèi)定義兩個(gè)相同名稱的實(shí)例變量和局部變量,但實(shí)例變量和局部變量允許命名沖突。
  • 區(qū)分實(shí)例變量和局部變量時(shí)一定要寫this。

 

5.介紹一下對(duì)構(gòu)造函數(shù)的理解

構(gòu)造方法是當(dāng)用類生成對(duì)象時(shí),系統(tǒng)在生成對(duì)象的過程中利用的方法。

  • 注意:構(gòu)造方法在生成對(duì)象的時(shí)候會(huì)被調(diào)用,但并不是構(gòu)造方法生成了對(duì)象。
  • 構(gòu)造方法沒有返回值。格式為:public 方法名。
  • 構(gòu)造方法的方法名與類名相同。
  • 構(gòu)造方法是在對(duì)象生成的過程中自動(dòng)調(diào)用,不可能利用指令去調(diào)用。
  • 在一個(gè)對(duì)象的生成周期中構(gòu)造方法只用一次,一旦這個(gè)對(duì)象生成,那么這個(gè)構(gòu)造方法失效。
  • 注意:在對(duì)象變量中存放的是引用(地址);在簡(jiǎn)單變量中存放的是數(shù)值。
  • 可以構(gòu)造多個(gè)構(gòu)造方法,但多個(gè)構(gòu)造方法的參數(shù)表一定不同,參數(shù)順序不同即屬于不同的構(gòu)造方法:
  • 如果我們未給類提供一個(gè)構(gòu)造方法,那么系統(tǒng)會(huì)自動(dòng)提供一個(gè)為空的構(gòu)造方法。

 

6.面向?qū)ο蠓椒ǖ闹剌d(Overloading)和覆蓋(Overriding)

Overloading在一個(gè)類中可以定義多個(gè)同名方法,各個(gè)方法的參數(shù)表一定不同。但修飾詞可能相同,返回值也可能相同。 overloading是編譯時(shí)的多態(tài)。

Overriding指子類與父類之間的同名方法,參數(shù)表順序一定相同,但修飾符和返回值可能不同,構(gòu)造函數(shù)無法覆蓋。Overriding是運(yùn)行時(shí)多態(tài)。  

 

7.this關(guān)鍵字

This表示當(dāng)前對(duì)象。

特別注意:用this調(diào)用其他構(gòu)造方法時(shí),this必須為第一條語句,然后才是其他語句。  

 

8.面向?qū)ο笕筇匦灾庋b

Java中提供4個(gè)修飾符來進(jìn)行對(duì)象屬性和方法的訪問權(quán)限控制:

  • private :類內(nèi)部可見
  • default :包內(nèi)部可見
  • protected :包內(nèi)部或子類可見
  • public :所有可見

 

9.面向?qū)ο笕筇匦灾^承

  • 父類的非私有化屬性和方法可以默認(rèn)繼承到子類。
  • 父類的構(gòu)造方法子類不可以繼承,更不存在覆蓋的問題。(非構(gòu)造方法可以)
  • 如果子類訪問父類的構(gòu)造方法,則在編譯的時(shí)候提示訪問不到該方法。
  • JAVA中不允許多繼承,一個(gè)類有且只有一個(gè)父類(單繼承)。
  • JAVA的數(shù)據(jù)結(jié)構(gòu)為樹型結(jié)構(gòu),而非網(wǎng)狀。(JAVA通過接口和內(nèi)部類實(shí)現(xiàn)多繼承)
  • 對(duì)于方法的修飾詞,子類方法要比父類的方法范圍更加的寬泛。父類為public,那么子類為private則出現(xiàn)錯(cuò)誤。
  • super()表示調(diào)用父類的構(gòu)造方法。super()也和this一樣必須放在第一行。this()用于調(diào)用本類的構(gòu)造方法。如果沒有定義構(gòu)造方法,那么就會(huì)調(diào)用父類的無參構(gòu)造方法,即super()。

當(dāng)構(gòu)造一個(gè)對(duì)象的時(shí)候,系統(tǒng)先構(gòu)造父類對(duì)象,再構(gòu)造子類對(duì)象。構(gòu)造一個(gè)對(duì)象的順序:(注意:構(gòu)造父類對(duì)象的時(shí)候也是這幾步)

  1. 遞歸地構(gòu)造父類對(duì)象;
  2. 順序地調(diào)用本類成員屬性賦初值語句;
  3. 本類的構(gòu)造方法。

 

10.面向?qū)ο笕筇匦灾鄳B(tài)

多態(tài)指的是編譯時(shí)類型不變化,而運(yùn)行時(shí)類型變化。 多態(tài)分兩種:

  • 編譯時(shí)多態(tài):編譯時(shí)動(dòng)態(tài)重載;
  • 運(yùn)行時(shí)多態(tài):指一個(gè)對(duì)象可以具有多個(gè)類型。

 

11.修飾符static

static定義的是一塊為整個(gè)類共有的一塊存儲(chǔ)區(qū)域,其發(fā)生變化時(shí)訪問到的數(shù)據(jù)都是變化之后的。其變量可以通過類名去訪問:類名.變量名。與實(shí)例對(duì)象訪問變量為等價(jià)的。 static 可修飾屬性、方法和代碼塊

  • static修飾的屬性為一個(gè)類的共享變量,屬于整個(gè)類,在不實(shí)例化對(duì)象的情況下就能訪問。
  • static修飾方法表明此方法為類方法(靜態(tài)方法),靜態(tài)方法不需要有對(duì)象,可以使用類名調(diào)用,靜態(tài)方法不能訪問非靜態(tài)成員,包括成員的變量和方法,因?yàn)榇藭r(shí)是通過類調(diào)用的,沒有對(duì)象的概念。this是不可用的。
  • 當(dāng)static修飾代碼塊時(shí)(注:此代碼塊要在此類的任何一個(gè)方法之外),那么這個(gè)代碼塊在代碼被裝載進(jìn)虛擬機(jī)生成對(duì)象的時(shí)候可被裝載一次,以后再也不執(zhí)行了,一般靜態(tài)代碼塊被用來初始化靜態(tài)成員。

一般情況下,主方法是靜態(tài)方法,所以可調(diào)用靜態(tài)方法,主方法為靜態(tài)方法是因?yàn)樗钦麄€(gè)軟件系統(tǒng)的入口,而進(jìn)入入口時(shí)系統(tǒng)中沒有任何對(duì)象,只能使用類調(diào)用。 覆蓋不適用于靜態(tài)方法,靜態(tài)方法不可被覆蓋。(允許在子類中定義同名靜態(tài)方法,但是沒有多態(tài),嚴(yán)格的講,方法間沒有多態(tài)就不能稱為覆蓋。  

 

12.修飾符final

final可修改類、屬性、方法

  • 當(dāng)用final修飾類的時(shí)候,此類不可被繼承,即final類沒有子類。這樣可以用final保證用戶調(diào)用時(shí)動(dòng)作的一致性,可以防止子類覆蓋情況的發(fā)生。
  • 利用final修飾一個(gè)屬性(變量)的時(shí)候,此時(shí)的屬性成為常量。常量的地址不可改變,但在地址中保存的值(即對(duì)象的屬性)是可以改變的。
  • 利用final定義方法:這樣的方法為一個(gè)不可覆蓋的方法。如果在父類中有final定義的方法,那么在子類中繼承同一個(gè)方法。

對(duì)于在構(gòu)造方法中利用final進(jìn)行賦值的時(shí)候,此時(shí)在構(gòu)造之前系統(tǒng)設(shè)置的默認(rèn)值相對(duì)于構(gòu)造方法失效。 常量(這里的常量指的是實(shí)例常量:即成員變量)賦值:

  1. 在初始化的時(shí)候通過顯式聲明賦值。final int x=3;
  2. 在構(gòu)造的時(shí)候賦值(定義時(shí)不賦值)。

局部變量可以隨時(shí)賦值。 注:如果一個(gè)方法前有修飾詞private或static,則系統(tǒng)會(huì)自動(dòng)在前面加上final。即private和static方法默認(rèn)均為final方法。Java中使用final和static組合,聲明常量標(biāo)識(shí)符(固定語法)。final并不涉及繼承,繼承取決于類的修飾符是否為private、default、protected還是public。也就是說,是否繼承取決于這個(gè)方法對(duì)于子類是否可見。 

 

13.抽象修飾符abstract

  • abstract(抽象)可以修飾類、方法
  • 如果將一個(gè)類設(shè)置為abstract,則此類不可生成對(duì)象,必須被繼承使用。
  • abstract可以將子類的共性最大限度的抽取出來,放在父類中,以提高程序的簡(jiǎn)潔性。
  • abstract雖然不能生成對(duì)象,但是可以聲明,作為編譯時(shí)類型,但不能作為運(yùn)行時(shí)類型。
  • final和abstract永遠(yuǎn)不會(huì)同時(shí)出現(xiàn)。
  • 當(dāng)abstract用于修飾方法時(shí),此時(shí)該方法為抽象方法,此時(shí)方法不需要實(shí)現(xiàn),實(shí)現(xiàn)留給子類覆蓋,子類覆蓋該方法之后方法才能夠生效。
  • abstract和static不能放在一起,否則便會(huì)出現(xiàn)錯(cuò)誤。(這是因?yàn)閟tatic不可被覆蓋,而abstract為了生效必須被覆蓋。)

 

14.接口和抽象類的比較

  1. 接口和抽象類都用于抽象,接口是抽象類的抽象。 接口和抽象類都不能被實(shí)例化。
  2. 接口中只有方法聲明,沒有實(shí)現(xiàn);在接口中聲明的方法具有public和abstract屬性,一個(gè)類可以實(shí)現(xiàn)多個(gè)接口(即多繼承),接口以‘,’分隔;接口中的方法必須全部實(shí)現(xiàn)。
  3. 抽象類可以有部分方法實(shí)現(xiàn),抽象類必須通過繼承才能使用。
  4. 表現(xiàn)目的不同:接口用來聲明功能和消息,抽象類用來抽象類,達(dá)到代碼復(fù)用。

 

15.內(nèi)部類

注:所有使用內(nèi)部類的地方都可以不用內(nèi)部類,使用內(nèi)部類可以使程序更加的簡(jiǎn)潔,便于命名規(guī)范和劃分層次結(jié)構(gòu)。內(nèi)部類是一個(gè)編譯時(shí)的概念,一旦編譯成功,就會(huì)成為完全不同的兩類。 內(nèi)部類是指在一個(gè)外部類的內(nèi)部再定義一個(gè)類。內(nèi)部類作為外部類的一個(gè)成員,并且依附于外部類而存在的。

內(nèi)部類同時(shí)具有成員和類的特性(特性不沖突)。 內(nèi)部類的分類:

  • 成員內(nèi)部類
  • 局部?jī)?nèi)部類
  • 靜態(tài)內(nèi)部類
  • 匿名內(nèi)部類(圖形是要用到,必須掌握)

a.成員內(nèi)部類

作為外部類的一個(gè)成員存在,與外部類的屬性、方法并列。

內(nèi)部類和外部類的實(shí)例變量可以共存。在內(nèi)部類中訪問實(shí)例變量:this.屬性,在內(nèi)部類訪問外部類的實(shí)例變量:外部類名.this.屬性。

成員內(nèi)部類的優(yōu)點(diǎn):

⑴內(nèi)部類作為外部類的成員,可以訪問外部類的私有成員或?qū)傩?。(即使將外部類聲明為PRIVATE,但是對(duì)于處于其內(nèi)部的內(nèi)部類還是可見的。)

⑵用內(nèi)部類定義在外部類中不可訪問的屬性。這樣就在外部類中實(shí)現(xiàn)了比外部類的private還要小的訪問權(quán)限。

成員內(nèi)部類不可以有靜態(tài)屬性。

建立內(nèi)部類對(duì)象時(shí)應(yīng)注意: 在外部類的內(nèi)部可以直接使用inner s=new inner();(因?yàn)橥獠款愔纈nner是哪個(gè)類,所以可以生成對(duì)象。)而在外部類的外部,要生成(new)一個(gè)內(nèi)部類對(duì)象,需要首先建立一個(gè)外部類對(duì)象(外部類可用),然后在生成一個(gè)內(nèi)部類對(duì)象。

Outer outer = new Outer; Outer.Inner in=outer.new Inner();

錯(cuò)誤的定義方式: Outer.Inner in=new Outer.Inner()。

注意:當(dāng)Outer是一個(gè)private類時(shí),外部類對(duì)于其外部訪問是私有的,所以就無法建立外部類對(duì)象,進(jìn)而也無法建立內(nèi)部類對(duì)象。

b.局部?jī)?nèi)部類

在方法中定義的內(nèi)部類稱為局部?jī)?nèi)部類。與局部變量類似,在局部?jī)?nèi)部類前不加修飾符public和private,其范圍為定義它的代碼塊。

注意:局部?jī)?nèi)部類不僅可以訪問外部類實(shí)例變量,還可以訪問外部類的局部變量(但此時(shí)要求外部類的局部變量必須為final)??

在類外不可直接生成局部?jī)?nèi)部類(保證局部?jī)?nèi)部類對(duì)外是不可見的)。

要想使用局部?jī)?nèi)部類時(shí)需要生成對(duì)象,對(duì)象調(diào)用方法,在方法中才能調(diào)用其局部?jī)?nèi)部類。

c.靜態(tài)內(nèi)部類

注意:前三種內(nèi)部類與變量類似,所以可以對(duì)照參考變量,靜態(tài)內(nèi)部類定義在類中,任何方法外,用static定義。

靜態(tài)內(nèi)部類只能訪問外部類的靜態(tài)成員。

生成(new)一個(gè)靜態(tài)內(nèi)部類不需要外部類成員:這是靜態(tài)內(nèi)部類和成員內(nèi)部類的區(qū)別。

靜態(tài)內(nèi)部類的對(duì)象可以直接生成:Outer.Inner in=new Outer.Inner(); 而不需要通過生成外部類對(duì)象來生成。這樣實(shí)際上使靜態(tài)內(nèi)部類成為了一個(gè)頂級(jí)類。

靜態(tài)內(nèi)部類不可用private來進(jìn)行定義。

注意:當(dāng)類與接口(或者是接口與接口)發(fā)生方法命名沖突的時(shí)候,此時(shí)必須使用內(nèi)部類來實(shí)現(xiàn)。用接口不能完全地實(shí)現(xiàn)多繼承,用接口配合內(nèi)部類才能實(shí)現(xiàn)真正的多繼承。

d. 匿名內(nèi)部類

匿名內(nèi)部類是一種特殊的局部?jī)?nèi)部類,它是通過匿名類實(shí)現(xiàn)接口。

注:一個(gè)匿名內(nèi)部類一定是在new的后面,用其隱含實(shí)現(xiàn)一個(gè)接口或?qū)崿F(xiàn)一個(gè)類,沒有類名,根據(jù)多態(tài),我們使用其父類名。 因其為局部?jī)?nèi)部類,那么局部?jī)?nèi)部類的所有限制都對(duì)其生效。

匿名內(nèi)部類是唯一一種無構(gòu)造方法類。

匿名內(nèi)部類在編譯的時(shí)候由系統(tǒng)自動(dòng)起名Out$1.class。

如果一個(gè)對(duì)象編譯時(shí)的類型是接口,那么其運(yùn)行的類型為實(shí)現(xiàn)這個(gè)接口的類。因匿名內(nèi)部類無構(gòu)造方法,所以其使用范圍非常的有限。  

 

15、運(yùn)行時(shí)異常與普通異常

異常表示程序運(yùn)行過程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見運(yùn)行錯(cuò)誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常。

Throwable是所有Java程序中錯(cuò)誤處理的父類,有兩種資類:Error和Exception。
  • Error:表示由JVM所偵測(cè)到的無法預(yù)期的錯(cuò)誤,由于這是屬于JVM層次的嚴(yán)重錯(cuò)誤,導(dǎo)致JVM無法繼續(xù)執(zhí)行,因此,這是不可捕捉到的,無法采取任何恢復(fù)的操作,頂多只能顯示錯(cuò)誤信息。
  • Exception:表示可恢復(fù)的例外,這是可捕捉到的。
Java提供了兩類主要的異常:runtime exception和checked exception。
  • checked異常:也就是我們經(jīng)常遇到的IO異常,以及SQL異常都是這種異常。對(duì)于這種異常,JAVA編譯器強(qiáng)制要求我們必需對(duì)出現(xiàn)的這些異常進(jìn)行catch。所以,面對(duì)這種異常不管我們是否愿意,只能自己去寫一大堆catch塊去處理可能的異常。
  • runtime exception,也稱運(yùn)行時(shí)異常,我們可以不處理。當(dāng)出現(xiàn)這樣的異常時(shí),總是由虛擬機(jī)接管。比如:我們從來沒有人去處理NullPointerException異常,它就是運(yùn)行時(shí)異常,并且這種異常還是最常見的異常之一。
出現(xiàn)運(yùn)行時(shí)異常后,系統(tǒng)會(huì)把異常一直往上層拋,一直遇到處理代碼。如果沒有處理塊,到最上層,如果是多線程就由Thread.run()拋出,如果是單線程就被main()拋出。拋出之后,如果是線程,這個(gè)線程也就退出了。如果是主程序拋出的異常,那么這整個(gè)程序也就退出了。運(yùn)行時(shí)異常是Exception的子類,也有一般異常的特點(diǎn),是可以被Catch塊處理的。只不過往往我們不對(duì)他處理罷了。也就是說,你如果不對(duì)運(yùn)行時(shí)異常進(jìn)行處理,那么出現(xiàn)運(yùn)行時(shí)異常之后,要么是線程中止,要么是主程序終止。異常處理的目標(biāo)之一就是為了把程序從異常中恢復(fù)出來。

 

16、Java命名規(guī)范

必須以英文字母、下劃線(’_’)或’$’開始,其余可以有數(shù)字但不允許包含空格,且組合后的名稱不能是Java關(guān)鍵字或保留字。

  • 匈牙利命名法:以m開始為類成員變量,以g開始為全局變量,以v開始為本地局部變量,常量命名一般不以下劃線、美元符開始。
  • 駝峰命名:一般稱由多個(gè)單詞或縮寫組成的變量名,并且該變量名每個(gè)單詞首字母均為大寫(一般類名全部首字母大寫,方法或?qū)傩悦谝粋€(gè)字母小寫)的稱為駝峰命名。

     

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多