Java知識復(fù)習(xí)

本文是自己在復(fù)習(xí)Java的時候做的一些隨筆,有理解不對的地方歡迎各位大神指正...

一、基礎(chǔ)知識
1. Java概述

1. 1995,sun---2009,cracle收購---至今

2.分類:Java SE標準基礎(chǔ)、Java EE 網(wǎng)頁等JSP、Java ME 嵌入式開發(fā)

3.JVM:.java文件(源文件)---編譯器---.class文件(字節(jié)碼文件)---解釋器----輸出

4. JDK、JRE和JVM:JDK包含JRE,JRE包含JVM

5.環(huán)境變量配置:

Java_Home:JDK安裝路徑

Path:JDK命令文件位置

ClassPath:配置類庫的位置

6.跨平臺:根據(jù)不同平臺不同JVM解釋字節(jié)碼文件進行執(zhí)行。

7.垃圾回收:系統(tǒng)級線程自動檢查,釋放內(nèi)存

8.異常處理機制為魯棒性提供了支持

9.類中包含:屬性+方法;構(gòu)造方法;內(nèi)部類+塊(用得較少)

2.方法重載

一個類中多個方法名相同的叫方法重載。方法的參數(shù)不同,具體表現(xiàn)為:數(shù)量不同、類型不同、順序不同。

跟返回值沒關(guān)系:方法的返回類型可以相同也可以不相同,但僅僅返回類型不同不足以成為方法的重載。

將功能類似的方法進行重載。

說明:

參數(shù)列表不同包括:個數(shù)不同、類型不同和順序不同。

僅僅參數(shù)變量名稱不同是不可以的。

跟成員方法一樣,構(gòu)造方法也可以重載。

聲明為final的方法不能被重載。

聲明為static的方法不能被重載,但是能夠被再次聲明。

3.塊

分為:實例塊和靜態(tài)塊(static修飾)

實例塊:每次調(diào)用構(gòu)造方法前調(diào)用;

靜態(tài)塊:類加載的時候調(diào)用一次,僅一次,與是否創(chuàng)建對象無關(guān)。

4.字符串

String:replace()方法不會改變原來的串,而是生成新串。

StringBuffer:delete(1,4),包括1,但不包括4.涉及大量字符串操作時使用。線程安全

StringBuilder:線程不安全。



5.訪問修飾符

public 共有的,對所有類可見。

protected 受保護的,對同一包內(nèi)的類和所有子類可見,不能修飾類和接口,能被不同包的子類訪問。

private私有的,在同一類內(nèi)可見。類和接口不能聲明為private。

默認的在同一包內(nèi)可見。默認不使用任何修飾符。

6. 變量作用域

在Java中,變量的作用域分為四個級別:類級、對象實例級、方法級、塊級。

類級變量又稱全局級變量或靜態(tài)變量,需要使用static關(guān)鍵字修飾,類級變量在類定義后就已經(jīng)存在,占用內(nèi)存空間,可以通過類名來直接訪問,不需要實例化。

對象實例級變量就是成員變量,實例化后才會分配內(nèi)存空間,才能訪問。

方法級變量就是在方法內(nèi)部定義的變量,就是局部變量。

塊級變量就是定義在一個塊內(nèi)部的變量,變量的生存周期就是這個塊,出了這個塊就消失了,比如 if、for 語句的塊。塊是指由大括號包圍的代碼。

7.This關(guān)鍵字

this 關(guān)鍵字用來表示當(dāng)前對象本身,或當(dāng)前類的一個實例,通過 this 可以調(diào)用本對象的所有方法和屬性。

作為方法名初始化對象:調(diào)用本類的其他構(gòu)造方法(也就是構(gòu)造方法調(diào)用另一個構(gòu)造方法)

值得注意的是:

在構(gòu)造方法中調(diào)用另一個構(gòu)造方法,調(diào)用動作必須置于最起始的位置。

不能在構(gòu)造方法以外的任何方法內(nèi)調(diào)用構(gòu)造方法。

在一個構(gòu)造方法內(nèi)只能調(diào)用一個構(gòu)造方法。

8.Super關(guān)鍵字

super 關(guān)鍵字與this類似,this 用來表示當(dāng)前類的實例,super 用來表示父類。

super 可以用在子類中,通過點號(.)來獲取父類的成員變量和方法。super 也可以用在子類的子類中,Java 能自動向上層類追溯。

super 關(guān)鍵字的功能

(1)調(diào)用父類中聲明為 private 的變量,但一定要在父類中聲明getter方法,否則不能調(diào)用private屬性變量。

(2)調(diào)用已經(jīng)覆蓋了的方法。

(3)作為方法名表示父類構(gòu)造方法。構(gòu)造方法不能被繼承,只能通過super調(diào)用。

注意:無論是 super() 還是 this(),都必須放在構(gòu)造方法的第一行。

最后注意 super 與 this 的區(qū)別:super 不是一個對象的引用,不能將 super 賦值給另一個對象變量,它只是一個指示編譯器調(diào)用父類方法的特殊關(guān)鍵字。

9.方法覆蓋

方法覆蓋的原則:

(1)覆蓋方法的返回類型、方法名稱、參數(shù)列表必須與原方法的相同。

(2)覆蓋方法不能比原方法訪問性差(即訪問權(quán)限不允許縮?。?/p>

(3)覆蓋方法不能比原方法拋出更多的異常。

(4)被覆蓋的方法不能是final類型,因為final修飾的方法是無法覆蓋的。

(5)被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,并沒有對其進行覆蓋。

(6)被覆蓋的方法不能為static。如果父類中的方法為靜態(tài)的,而子類中的方法不是靜態(tài)的,但是兩個方法除了這一點外其他都滿足覆蓋條件,那么會發(fā)生編譯錯誤;反之亦然。即使父類和子類中的方法都是靜態(tài)的,并且滿足覆蓋條件,但是仍然不會發(fā)生覆蓋,因為靜態(tài)方法是在編譯的時候把靜態(tài)方法和類的引用類型進行匹配。

10.多態(tài)

多態(tài)轉(zhuǎn)型:

注意:不能直接將父類的對象強制轉(zhuǎn)換為子類類型,只能將向上轉(zhuǎn)型后的子類對象再次轉(zhuǎn)換為子類類型。也就是說,子類對象必須向上轉(zhuǎn)型后,才能再向下轉(zhuǎn)型。

總結(jié):對象的類型轉(zhuǎn)換在程序運行時檢查,向上轉(zhuǎn)型會自動進行,向下轉(zhuǎn)型的對象必須是當(dāng)前引用類型的子類。

向上轉(zhuǎn)型可以,向下轉(zhuǎn)型請注意!

11.Static

靜態(tài)變量和靜態(tài)方法能夠通過類名來訪問,不需要創(chuàng)建一個類的對象來訪問該類的靜態(tài)成員,所以static修飾的成員又稱作類變量和類方法。靜態(tài)變量與實例變量不同,實例變量總是通過對象來訪問,因為它們的值在對象和對象之間有所不同。

static的內(nèi)存分配

靜態(tài)變量屬于類,不屬于任何獨立的對象,所以無需創(chuàng)建類的實例就可以訪問靜態(tài)變量。之所以會產(chǎn)生這樣的結(jié)果,是因為編譯器只為整個類創(chuàng)建了一個靜態(tài)變量的副本,也就是只分配一個內(nèi)存空間,雖然有多個實例,但這些實例共享該內(nèi)存。實例變量則不同,每創(chuàng)建一個對象,都會分配一次內(nèi)存空間,不同變量的內(nèi)存相互獨立,互不影響,改變 a 對象的實例變量不會影響 b 對象。

靜態(tài)方法:因為靜態(tài)方法不能操作對象,所以不能在靜態(tài)方法中訪問實例變量,只能訪問自身類的靜態(tài)變量。

一個類的靜態(tài)方法不能夠直接調(diào)用非靜態(tài)方法,所以在main方法中必修通過對象來調(diào)用非靜態(tài)方法。

12.final

在 Java 中,聲明類、變量和方法時,可使用關(guān)鍵字 final 來修飾。final 所修飾的數(shù)據(jù)具有“終態(tài)”的特征,表示“最終的”意思。

主要的作用就是阻止繼承和多態(tài)。

13.==和equals

基本數(shù)據(jù)類型,也被稱為原始數(shù)據(jù)類型,他們之間的比較,應(yīng)用雙等號(==),比較的是他們的值。

復(fù)合數(shù)據(jù)類型(類):當(dāng)他們用(==)進行比較的時候,比較的是他們在內(nèi)存中的存放地址,所以,除非是同一個new出來的對象,他們的比較后的結(jié)果為true,否則比較后結(jié)果為false。

JAVA當(dāng)中所有的類都是繼承于Object這個基類的,在Object中的基類中定義了一個equals的方法,這個方法的初始行為是比較對象的內(nèi)存地址,但在一些類庫當(dāng)中這個方法被覆蓋掉了,如String,Integer,Date在這些類當(dāng)中equals有其自身的實現(xiàn),而不再是比較類在堆內(nèi)存中的存放地址了。

14.內(nèi)部類

內(nèi)部類一般分為3類:成員式內(nèi)部類,局部內(nèi)部類,匿名內(nèi)部類。

15.抽象類

事實上,抽象類可以是一個完全正常實現(xiàn)的類,抽象類不一定包含抽象方法,但包含抽象方法的類必須是抽象類。

抽象類不能被實例化,抽象方法必須在子類中被實現(xiàn)。

16.接口

在抽象類中,可以包含一個或多個抽象方法;但在接口(interface)中,所有的方法必須都是抽象的,不能有方法體,它比抽象類更加“抽象”。

注意:接口中聲明的成員變量默認都是 public static final 的,必須顯示的初始化。因而在常量聲明時可以省略這些修飾符。

1) 接口中只能定義抽象方法,這些方法默認為 public abstract 的,因而在聲明方法時可以省略這些修飾符。試圖在接口中定義實例變量、非抽象的實例方法及靜態(tài)方法,都是非法的。

2) 接口中沒有構(gòu)造方法,不能被實例化。

3)一個接口不實現(xiàn)另一個接口,但可以繼承多個其他接口。接口的多繼承特點彌補了類的單繼承。

4)接口可以作為一個類型來使用。

5)Interface的意思是“所有”“實現(xiàn)”這個接口的類都應(yīng)該長成這個樣子,只要用到了這個interface都知道它有哪些方法可以調(diào)用。當(dāng)你implements一個interface的時候,你必須把這個interface的方法定義成public的,不這樣java編譯器就會報錯。

不同的類可以實現(xiàn)同一個接口,這是一種思想,也是邏輯分層的實現(xiàn)。

17.抽象類和接口

1) 抽象類可以為部分方法提供實現(xiàn),避免了在子類中重復(fù)實現(xiàn)這些方法,提高了代碼的可重用性,這是抽象類的優(yōu)勢;而接口中只能包含抽象方法,不能包含任何實現(xiàn)。

2) 一個類只能繼承一個直接的父類(可能是抽象類),但一個類可以實現(xiàn)多個接口,這個就是接口的優(yōu)勢。

原則

行為模型應(yīng)該總是通過接口而不是抽象類定義,所以通常是優(yōu)先選用接口,盡量少用抽象類。

選擇抽象類的時候通常是如下情況:需要定義子類的行為,又要為子類提供通用的功能。

18.泛型

所謂“泛型”,就是“寬泛的數(shù)據(jù)類型”,任意的數(shù)據(jù)類型。

如果在使用泛型時沒有指名具體的數(shù)據(jù)類型,就會擦除泛型類型,并向上轉(zhuǎn)型為 Object,這與不使用泛型沒什么兩樣。

附:通配符(?)可以表示任意的數(shù)據(jù)類型。通配符(?)不但可以限制類型的上限,還可以限制下限。限制下限使用 super 關(guān)鍵字,例如 表示只能接受 Number 及其父類。

19.異常處理

注意在try塊中的對println( )的調(diào)用是永遠不會執(zhí)行的。一旦異常被引發(fā),程序控制由try塊轉(zhuǎn)到catch塊。執(zhí)行永遠不會從catch塊“返回”到try塊。

當(dāng)你用多catch語句時,記住異常子類必須在它們?nèi)魏胃割愔笆褂?。這是因為運用父類的catch語句將捕獲該類型及其所有子類類型的異常。如果子類在父類后面,子類將永遠不會到達。而且,Java中不能到達的代碼是一個錯誤。

如果一段程序中有異常發(fā)生或者拋出異常,要么catch,要么throws。

finally創(chuàng)建一個代碼塊。該代碼塊在一個try/catch 塊完成之后另一個try/catch出現(xiàn)之前執(zhí)行。finally塊無論有沒有異常拋出都會執(zhí)行。
注意:如果finally塊與一個try聯(lián)合使用,finally塊將在try結(jié)束之前執(zhí)行。

可以自己定義異常類來重載某些方法。

附:

(1)想要在Eclipse中輸入命令行參數(shù),可以在目錄中該程序上右鍵,選擇“Run As",選擇”Run configurations"

(2)Eclipse中如何開啟斷言(Assert),方法有二:

A. Run -> Run Configurations -> Arguments頁簽 -> VM arguments文本框中加上斷言開啟的標志:-enableassertions 或者-ea 就可以了

B.B在myEclipse中,Windows -> Preferences ->Java ->Installed JREs ->點擊正使用的JDK ->Edit ->Default VM Arguments文本框中輸入:-ea

20.多線程

(1)線程存在于好幾種狀態(tài)。線程可以正在運行(running)。只要獲得CPU時間它就可以運行。運行的線程可以被掛起(suspend),并臨時中斷它的執(zhí)行。一個掛起的線程可以被恢復(fù)(resume,允許它從停止的地方繼續(xù)運行。一個線程可以在等待資源時被阻塞(block)。在任何時候,線程可以終止(terminate),這立即中斷了它的運行。一旦終止,線程不能被恢復(fù)。

(2)管程(monitor)。管程是一種由C.A.R.Hoare首先定義的控制機制。你可以把管程想象成一個僅控制一個線程的小盒子。一旦線程進入管程,所有線程必須等待直到該線程退出了管程。用這種方法,管程可以用來防止共享的資源被多個線程操縱。

(3)當(dāng)Java程序啟動時,一個線程立刻運行,該線程通常叫做程序的主線程(main thread),因為它是程序開始時就執(zhí)行的。主線程的重要性體現(xiàn)在兩方面:

? ? 它是產(chǎn)生其他子線程的線程;

? ? 通常它必須最后完成執(zhí)行,因為它執(zhí)行各種關(guān)閉動作。

(4)大多數(shù)情況,通過實例化一個Thread對象來創(chuàng)建一個線程。Java定義了兩種方式:實現(xiàn)Runnable 接口+可以繼承Thread類。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,766評論 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,688評論 0 11
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,142評論 0 62
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,267評論 0 2
  • 1.Core Animation是一個復(fù)合引擎,它的職責(zé)就是盡可能快地組合屏幕上不同的可視內(nèi)容,這個內(nèi)容是被分解成...
    歌白梨閱讀 736評論 1 4