乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       二月石橋 2015-06-22

      1.什么是類和對象?

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

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

       

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

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

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

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

      實現(xiàn)高內(nèi)聚就是要最大限度低提高復(fù)用性(復(fù)用性好是因為高內(nèi)聚)。可復(fù)用性是OOP的基礎(chǔ)。

       

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

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

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

       

      4.實例變量和局部變量的比較

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

       

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

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

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

       

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

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

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

       

      7.this關(guān)鍵字

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

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

       

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

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

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

       

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

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

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

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

       

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

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

      • 編譯時多態(tài):編譯時動態(tài)重載;
      • 運行時多態(tài):指一個對象可以具有多個類型。

       

      11.修飾符static

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

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

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

       

      12.修飾符final

      final可修改類、屬性、方法

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

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

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

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

       

      13.抽象修飾符abstract

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

       

      14.接口和抽象類的比較

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

       

      15.內(nèi)部類

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

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

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

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

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

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

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

      ⑴內(nèi)部類作為外部類的成員,可以訪問外部類的私有成員或?qū)傩浴#词箤⑼獠款惵暶鳛镻RIVATE,但是對于處于其內(nèi)部的內(nèi)部類還是可見的。)

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

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

      建立內(nèi)部類對象時應(yīng)注意: 在外部類的內(nèi)部可以直接使用inner s=new inner();(因為外部類知道inner是哪個類,所以可以生成對象。)而在外部類的外部,要生成(new)一個內(nèi)部類對象,需要首先建立一個外部類對象(外部類可用),然后在生成一個內(nèi)部類對象。

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

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

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

      b.局部內(nèi)部類

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

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

      在類外不可直接生成局部內(nèi)部類(保證局部內(nèi)部類對外是不可見的)。

      要想使用局部內(nèi)部類時需要生成對象,對象調(diào)用方法,在方法中才能調(diào)用其局部內(nèi)部類。

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

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

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

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

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

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

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

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

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

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

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

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

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

       

      15、運行時異常與普通異常

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

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

       

      16、Java命名規(guī)范

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

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

           

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多