Java中容易遺漏的小知識點( 一 )(為了和小白一樣馬上要考試的兄弟準備的,希望小白和大家高過不掛)

康小白kzj發表於2020-06-14

筆者csdn部落格同文地址:https://blog.csdn.net/weixin_45791445/article/details/106597515

我是小康小白,一個平平無奇的Java小白。熱愛有趣的文字,生活和遠方。
個人部落格:https://blog.csdn.net/weixin_45791445

在這裡插入圖片描述

小白最近快考試了,複習的順便總結一下一些小白認為容易忘記的知識點,希望能幫助到大家。

小白的總結系列二,三已上線Java中容易遺漏的常用的知識點( 二 )(為了和小白一樣馬上要考試的兄弟準備的,希望小白和大家高過不掛)
Java中容易遺漏的常用的知識點( 三 )(為了和小白一樣馬上要考試的兄弟準備的,希望小白和大家高過不掛)
  1. Java程式碼執行機制

     1. 編寫原始碼
     	得到的是以“.java”為副檔名的原始檔,原始檔名應與該檔案中被修飾為public的類名相同。
     2. 編譯(使用cmd命令編譯時使用的命令是javac 檔名.java。使用的javac編輯器)
     	編譯後的檔案叫做類檔案。得到的是以“.class”為副檔名的位元組碼檔案。
     	這裡出現的錯誤叫編譯時錯誤。
     	
     然後使用java命令執行,命令格式為:java 專案名(注意這裡沒有字尾))	
     3.類裝載ClassLoader
     4.位元組碼(byte-code)校驗
     5. 解釋
     6. 執行
     這裡出現的錯誤叫執行時錯誤。
    
  2. 在一個簡單的Java程式中有一個獲以上的類組合而成。其次在一個可以獨立執行的Java程式中有且只有一個main()方法,它是程式執行的開端。程式的主體被包含在類中,這個起始的地方被稱為main方法。main方法之前必須加上public,static,void。static表示

  3. switch中的控制表示式必須為char,int,short或byte型別的。case後面的常量表示式必須和控制表示式的型別相同。(書上)

書上這一節後面的習題中有個選項說支援long型別是錯誤的。
在這裡插入圖片描述

switch表示式後面的資料型別只能是byte,short,char,int四種整形型別,列舉型別和java.lang.String型別(從java 7才允許),不能是boolean型別。至於四種基本型別的包裝類是由於有自動拆箱的操作所以支援(實際)

  1. instanceof是物件運算子,用來判定一個物件是否屬於莫個指定的類(或其子類)的例項。

  2. 邏輯運算子分為標準邏輯運算子(!& ^ |)和條件邏輯運算子(&& ||)
    在這裡插入圖片描述

  3. byte:1位元組,short:2位元組,int:4位元組,long:8位元組,float:4位元組,double:8位元組,char:2位元組,boolean:書上此處為空。

switch的格式
在這裡插入圖片描述
do-while的格式(最後要加一個";")
在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述
foreach
在這裡插入圖片描述

  1. 運算子優先順序
    在這裡插入圖片描述
  2. 在判斷語句中的i++和--j是一個完整的獨立語句,先進行自加或者自減後再進行比對。
    (下面是debug測試)
    在這裡插入圖片描述
    在這裡插入圖片描述
  3. outer標籤

outer標籤是什麼,上面的文章講的很詳細。
小白在這裡補充一下break outer;和continue outer;的區別

break outer;是直接完全的跳出到outer標籤標記的迴圈外面。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200608102636433.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTc5MTQ0NQ==,size_16,color_FFFFFF,t_70#pic_center =500x500)
continue outer;的作用並非完全跳出外層迴圈,而是跳出outer標籤標記迴圈的本次迴圈,直接進行此迴圈的下一次迴圈;

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200608102735262.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTc5MTQ0NQ==,size_16,color_FFFFFF,t_70#pic_center =500x500)
12. 構造方法

在這裡插入圖片描述

  1. 類是物件模板,只有例項化之後才可以使用。new運算子用於建立一個類的例項並返回物件的引用。
    預設構造方法對成員變數的初始化原則如下:
    對於整型成員變數,預設初值是0;對與浮點型,預設初值是0.0;對於boolean型別,預設初值是false;對於引用型,預設值是null。

  2. this關鍵字
    this可以出現在類的構造方法和非static修飾的成員方法(即例項方法)中,this代表例項物件自身,可以通過this來訪問例項物件的成員變數或呼叫成員方法。
    類方法中不可以使用this
    由於類方法可以通過類名字直接呼叫,這時可能還沒有任何物件產生,因此指代物件例項本身的this關鍵字不可以出現在類方法中。

  3. 	1)public訪問許可權最具有開放性,可以用來修飾類、類與介面的成員(包括成員變數、成員方法)
    。由public類修飾的類或類成員可被任何類訪問。
    	2)protected可以用來修飾類的成員變數或方法。具有protected訪問特性的類成員可以被本類、
    本包中的其他類訪問,也可以被其他包中的子類繼承,它的可訪問性低於public,高於預設。
    	3)如果在定義類、介面、成員變數、成員方法時沒有指定訪問許可權控制符,他們的許可權就為預設權
    限。具有預設許可權的類、介面、成員變數、成員方法,只能被本類和同一個包中的其他類、介面及成員方
    法引用,因此預設許可權也被稱為包許可權。
    	4)私有訪問控制符private用來宣告類的私有成員,它提供了最高的保護級別。用private修飾的
    成員變數或方法只能被該類自身所訪問和修改,而不能被任何其他類(包括該類的子類)來獲取和引用。
    

Java檔名應與修飾為public的類名相同。且Java檔案中只能有一個public修飾的類
在這裡插入圖片描述
特殊情況:
只有被修飾為public訪問許可權的成員變數和方法才可以被不同包的其他類使用,修飾為protected的成員變數和方法可以被不同包的子類繼承,訪問。不同包的其他類禁止訪問修飾為private和預設許可權的成員變數和方法。

  1. super關鍵字
    子類在繼承父類時,可能會出現變數隱藏、方法覆蓋(overriding)等現象。變數隱藏指子類的成員變數與父類成員同名,此時,父類的成員變數被隱藏。方法覆蓋指子類的方法與父類的方法名相同,方法的返回值型別、入口引數的數目、型別、順序均相同,只是方法實現的功能不同,此時父類的方法被覆蓋。如果子類需要呼叫或訪問父類被隱藏的變數或被覆蓋的方法,可以使用super關鍵字實現。
    當用子類的構造方法建立一個子類物件時,子類的構造方法總會顯式或隱式地先呼叫父類的某個構造方法。如果子類的構造方法沒有明顯地指明呼叫父類的哪個構造方法,Java會預設呼叫父類的無參構造方法;子類也可以通過super關鍵字顯式呼叫父類指定的構造方法,具體呼叫哪個構造方法需要根據super()的引數型別決定。

  2. Java中的子類物件可以向上轉換為父類物件(也稱上轉型物件),允許將子類的例項賦值給父類的引用,也允許一個父類的引用指向子類物件。
    但是反過來,一個父類物件的型別未必可以向下轉換成子類物件,因為子類具有的資訊,父類未必包含,這種轉換是不安全的。只有當父類引用實際上指向一個子類物件時,才可以進行這種轉換。
    在這裡插入圖片描述

  3. 例項變數依附於物件,在使用new關鍵字建立物件時,Java執行系統為每個物件分配一個記憶體空間,不同的例項變數佔用不同的記憶體區域。類變數依附於類(而非物件),對於類變數來說,Java執行系統為類的類變數分配公共的儲存空間,該類的每個例項物件共享同一類變數的儲存空間。因此,每個物件對類變數的修改都會影響其他例項物件。
    (1)類變數可以通過類名直接訪問,而不需要建立物件。
    (2)任何一個物件對類變數的修改,都是在同一記憶體單元上完成的。因此,每個物件對類變數的修改都會影響其他例項物件。

    宣告為static的方法稱為類方法(或稱靜態方法),與此相對,沒有static修飾的成員方法則為例項方法。類方法的本質是該方法屬於整個類,而不是屬於某個例項,可以不建立例項,直接通過類名呼叫。 類方法的使用具有以下特點:
    (1)類方法可以通過類直接呼叫,而不需要建立例項物件。例如:Java Application的入口main()方法就被宣告為static類方法,可以不需要建立任何例項物件對呼叫。
    (2)類方法屬於整個類,被呼叫時可能還沒有建立任何物件例項,因此類方法內只可以訪問類變數,而不能直接訪問例項變數和例項方法。
    (3)類方法中不能使用this關鍵字,因為靜態方法不屬於任何一個例項。

  4. 抽象類和抽象方法(為什麼會有抽象類?
    語法:

    abstract class <類名> [extends<父類>][implements<介面名>]{ <類主體> }
    

如果一個類A需要繼承抽象類,則該類必須實現抽象類中定義的所有抽象方法。否則,該類也必須修飾為抽象類。也就是說,抽象類的子類如果僅實現父類的部分抽象方法,子類也必須宣告為抽象類。

為什麼會有抽象類和抽象方法?
有時候,我們沒有足夠的資訊去描述一個具體的物件,這樣就不能用正常的類來描述它,那麼這時候就需要抽象類了。抽象方法沒有方法體,為什麼呢?小白的理解是我們只知道這個物件有這樣的一種方法(或者理解為" 行為 "),但不知到它的這種方法能夠幹什麼,就沒有寫具體的方法主體。因此,抽象類不能例項化(建立的人都不知道它具體是什麼,怎麼例項成一個具體的物件)
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200607181353317.png#pic_center =240x240)

  1. 介面
    介面(interface)是Java所提供的另一種重要結構。介面是一種特殊的類,但介面與類存在著本質的區別。類有成員變數和成員方法,而介面卻只有常量和抽象方法,也就是說介面的成員變數必須初始化,同時介面中的所有方法必須宣告為abstract方法

語法:

[介面修飾符] interface〈介面名〉[extends〈父類介面列表〉] { 介面體 }

用implements子句表示類實現某個介面。一個類可以同時實現多個介面,介面之間用逗號“,”分隔。 在類體中可以使用介面中定義的常量,由於介面中的方法為抽象方法,所以必須在類體中加入要實現介面方法的程式碼,如果一個介面是從別的一個或多個父介面中繼承而來,則在類體中必須加入實現該介面及其父介面中所有方法的程式碼。 在實現一個介面時,類中對方法的定義要和介面中的相應方法的定義相匹配,其方法名、方法的返回值型別、方法的訪問許可權和引數的數目與型別資訊要一致

介面繼承中出現的方法重名和常量重名
(1)方法重名 如兩個方法完全一樣,只保留一個。 如果兩個方法有不同的引數(型別或個數),那麼子介面中包括兩個方法,方法被過載。 若兩個方法僅在返回值上不同,出現錯誤。
(2)常量重名 兩個重名常量全部保留,並使用原來的介面名作為字首。

  1. 內部類:
    Java支援在一個類中宣告另一個類,這樣的類稱為內部類(InnerClass),而包含內部類的類稱為內部類的外部類(OuterClass)。內部類一般用來實現一些沒有通用意義的功能邏輯。

eaducoder裡面老用。小白表示心累ಥ_ಥಥ_ಥ。

一個類把內部類看成是自己的成員,外部類的成員變數在內部類中仍然有效,內部類可以直接使用外部類中的成員變數和方法,即使他們是private的,這也是內部類的一個好處。

  1. 匿名類(小白表示從未用過,但寫一下吧。萬一考呢。)
    使用類建立物件時,Java允許把類體與物件的建立組合在一起。也就是說,類建立物件時,除了構造方法還有類體,此類體被稱為匿名類。
    實戰:
一個匿名類:
Student3 liu = new Student3() { 
	void speak() { 
			System.out.println("這是匿名類中的方法"); 
		} 
};// 匿名類體結束

重點來了
在這裡插入圖片描述

  1. 泛型
    泛型的本質是引數化型別,也就是說所操作的資料型別被指定為一個引數。這種引數型別可以用在類、介面和方法的建立中,分別稱為泛型類、泛型介面、泛型方法。

1)泛型類宣告:
建立一個簡單的泛型是非常容易的。首先,在一對尖括號(< >)中宣告型別變數,以逗號間隔變數名列表。在類的例項變數和方法中,可以在任何型別的地方使用那些型別變數。
格式:

class 泛型類名<泛型列表>{ 
	類體 
}

泛型類宣告時並不指明泛型列表是什麼型別的資料,可以是任何物件或介面,但不能是基本型別資料。泛型列表處的泛型可以作為類的成員變數的型別、方法的型別以及區域性變數的型別。

2)使用泛型類宣告物件:
使用泛型類宣告物件時,必須指定類中使用泛型的具體具體類名,如: Chorus<Student,Button> model model = new Chorus<Student,Button>();

3)泛型介面:
格式:

Interface 泛型介面名<泛型列表>{
	 介面體 
}

小白沒想到書上對於泛型講的這麼多。(唉,不禁為我的菜雞感覺億點悲傷。)

在這裡插入圖片描述
小白實戰中常用的是:
在建立arraylist或者list集合時加泛型

ArrayList<String> listTest = new ArrayList<String>();

這樣限定了建立集合的型別。對於此小白的理解時泛型是在建立list或者arrayList集合時指定集合中的元素是同一種型別。例如你在建立時指定了建立的list集合中只能有String型別的變數,那麼你向其中新增資料時,如果不是String型別的資料,程式在編譯時就會報錯。如果不是用泛型這種錯誤只有在程式執行時才會報錯。而且,泛型讓我們在get獲得集合中的資料時,無需因為型別不同需要強轉而煩惱。
在這裡插入圖片描述
在這裡插入圖片描述
當你向加了泛型的語句中加入不同資料型別的資料時是會報錯的。但如果不加,這種錯誤就只能在程式執行是才報錯。

這次先寫到這裡小白明天接著寫。

Java中容易遺漏的常用的知識點( 二 )(為了和小白一樣馬上要考試的兄弟準備的,希望小白和大家高過不掛)
Java中容易遺漏的常用的知識點( 三 )(為了和小白一樣馬上要考試的兄弟準備的,希望小白和大家高過不掛)

![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200607181353317.png#pic_center =240x240)

小白的總結系列二已上線Java中容易遺漏的常用的知識點( 二 )(為了和小白一樣馬上要考試的兄弟準備的,希望小白和大家高過不掛)

在這裡插入圖片描述
兄弟們,小白編寫不易。希望各位兄弟們,點贊評論收藏加關注。小白在此謝謝各位老爺們,也祝福和我一樣面臨考試的兄弟們高分通過。
在這裡插入圖片描述
對於白嫖的兄弟們,
在這裡插入圖片描述

相關文章