Java概念總結(一)【面向對象--多線程】

1、重載的概念、特點是什麼?有什麼好處?

答:概念:在同一個類中,允許存在多個同名函數,只要他們的參數類型或參數個數不同即可。

特點:與返回值無關,只於參數列表有關。

好處:方便閱讀,優化了程序,是多態性的一種體現。

 

2、構造函數的特點、作用是什麼?多個構造函數之間是以什麼形式存在的?

答:特點是函數名與類名相同,不用定義返回值,不可以用return語句。作用是對對象進行初始化。是以重載的形式存在的。

 

3、構造代碼塊的作用是什麼?和構造函數有什麼區別?

答:作用:對對象進行初始化,對象一建立就運行,且優先於構造函數運行。

區別:構造代碼塊是對所有對象進行統一初始化,而構造函數是給對應的對象進行初始化。

 

4、this是什麼?有什麼作用?

答:this是指向本類對象的一個指針,它只能用於方法體內,當對象創建後,Java虛擬機(JVM)就會給這個對象分配一個引用自身的指針,這個指針就是this。

      this指針只能在類的非靜態方法中使用,靜態方法和靜態的代碼塊中不能使用this,因爲this只能和特定的對象關聯,而不能和類關聯,同一個類的不同對象有不同的this。

作用:

1.     表示當前對象的引用。

2.     當函數的參數和成員變量重名的時候,表示調用的是成員變量而非函數參數。

3.     用於構造函數之間互相調用,指定特定參數類型的構造函數,但是隻用引用一個構造函數,且必須位於第一行。

 

5、static是什麼?

答:static表示“靜態”的意思,用來修飾成員變量和成員函數,也可以形成靜態的static代碼塊。被static修飾的成員變量和成員方法獨立於該類的任何對象。也就是說,它不依賴特定的實例,被類的所有實例共享。

只要類被加載,虛擬機就能根據類名在運行時方法區內找到它們。因此,static可以在任何對象創建之前訪問,無需引用任何對象。

(1)static有以下四個特點:

1.     隨着類的加載而加載

2.     優先於對象存在

3.     被所有對象所共享

4.     可以直接被類名調用

(2)static的使用注意事項:

1.     靜態的方法只能使用靜態的成員。而非靜態的方法既可以使用靜態成員又可以使用非靜態成員。

2.     靜態方法內沒有this、super等關鍵字。

 

(3)static的利與弊:

利:

1.節省空間。只在類的加載時分配一次空間,所有對象共同享用。

2.使用方便。可以直接被類名調用,而不用事先創建任何對象。

弊:

1.     生命週期太長。

2.     訪問出現侷限性。

 

 

6、類變量和實例變量的區別?

答:首先,存放的位置不同。類變量隨着類的加載而存在於方法區中,而實例變量隨着對象的建立而存放於堆內存中。

      其次,生命週期不同。類變量的生命週期最長,隨着類的消失而消失。實例變量生命週期隨着對象的消失而消失。

 

7、建立對象的過程?

 

8、單例設計模式的思路是什麼?

答:想要保證對象唯一。

1,爲了避免其他程序過多建立該類對象。先禁止其他程序建立該類對象。(構造函數私有化)

2,還爲了讓其他程序可以訪問到該類對象,只好在本類中,自定義一個對象。(在類中創建本類對象)

3,爲了方便其他程序對自定義對象的訪問,可以對外提供一些訪問方式。(提供一個方法可以獲取到該對象)

 

9、繼承的作用

答:1.提高了代碼的複用性。

       2.使類與類之間產生了關係,有了這個關係,纔有了多態的特性。

 

10、final關鍵字有什麼作用。

答:是一個修飾符,代表“最終”的意思。

1.     被final修飾的類不能被繼承。

2.     被final修飾的方法不能被複寫。

3.     被final修飾的變量是一個常量,只能被賦值一次。既可以修飾成員變量,也可以修飾局部變量。

4.     常量的作用在於方便理解和閱讀,所有字母都大寫,單詞之間通過“_”連接。

5.     內部類定義在類中的局部位置上時,只能訪問該局部被final修飾的局部變量。

 

11、什麼是模板方法模式?

答:在定義功能時,功能的一部分是確定的,但有一部分是不確定的,而確定的部分在使用不確定的部分,那麼這時就將不確定的部分暴露出去,有該類的子類去實現,這就是模板方法模式。

 

12、接口的定義、成員修飾符、以及意義?

答:接口用interface關鍵字定義,他的成員修飾符是固定的:

成員常量:public static final

成員函數:public abstract

接口的特點:

1.     接口是對外暴露的規則。

2.     接口是程序的功能擴展。

3.     接口可以用來多實現。

4.     類與接口直接是實現關係,而類在繼承一個類的同時可以同時實現多個接口。

5.     接口與接口直接可以有繼承關係。

 

13、創建線程有幾種方法?有什麼區別?

答:線程的創建有兩種方法,一種是繼承Thread類,並複寫run方法,最後用start()調用。第二種是實現Runnable接口,覆蓋Runnable接口中的run方法,通過Thread建立線程對象,將Runnable的子類對象賦給Thread的構造函數,最後通過start調用。

      這兩種方式一個是繼承,一個是實現,繼承Thread時,線程運行代碼放在Thread的run方法中,實現Runnable時,線程運行代碼放在Runnable的run方法中。

      另外,採用實現Runnable接口時,可以很好的避免單繼承的侷限性,所以建議使用實現的方式創建線程。

 

14、如果同步函數被靜態修飾,使用的鎖是什麼?

答:首先,靜態同步函數的鎖不是this,因爲靜態方法中沒有this。靜態進內存時,內存中沒有本類對象,但是一定有該類對應的字節碼文件對象,所以使用的鎖是該方法所在類的字節碼文件對象:類名.class。

 

15、單例設計模式有哪幾種?有什麼區別?

答:單例設計模式分爲餓漢式和懶漢式,餓漢式是在創建對象的同時加載,而懶漢式是先定義一個引用,延時加載。

 

16、懶漢式的延時加載有沒有問題?如何解決?

答:有,多線程訪問時會出現安全問題,可以通過加同步代碼塊或同步函數來解決,不過建議使用同步代碼塊,因爲使用同步時效率很低,使用同步代碼塊可以用雙重判斷提高效率。

 

17、如果使用同步代碼塊,那麼使用的鎖是哪一個?

答:是方法所屬類的字節碼文件對象。

 

18、爲什麼操作線程的方法都定義在Object類中?

答:因爲這些方法在操作線程時,都必須要標識他們特有的鎖,只有同一個鎖上等待的線程可以被同一個鎖上的notify喚醒,而鎖可以是任意對象,所以可以被任意對象調用的方法只有定義在Object類中。

 

19、如何讓線程停止?

答:讓線程停止只有等run方法結束,開啓多線程時,運行代碼一般都是循環結構,只要控制住循環,就可以讓run方法結束,也就是讓線程結束。

      當然,也有特殊情況,那就是如果線程處於凍結狀態中,無法讀到控制循環的標記,那麼這個線程就不會結束。

      當沒有指定的方式讓被凍結的線程回覆到運行狀態時,這時需要對凍結進行清除,強制讓線程恢復到運行狀態中來,這樣就可以操作標記讓線程結束。

      清除凍結可以使用Thread類提供的interrupt方法。

 

20、什麼是守護線程?

在Thread類中提供了setDeamon方法,該方法可以將某線程標爲守護線程或用戶線程,該方法需要在啓動前被調用。在線程運行過程中,若線程池中剩餘的都是守護線程,則程序結束。

 

21、什麼是join?

答:join是Thread類中提供的方法,當A線程執行到B線程調用的jion方法時,A線程會等待,等到B線程執行完畢後再繼續執行。

join方法可以用來臨時加入線程執行。

 

22、如何設置線程優先級?

答:可以使用Thread類中的setPriority方法設置優先級。

 

23、yield方法有什麼作用?

答:暫停當前執行的線程對象,並執行其他線程。

 

24、s1和s2有什麼區別?

String s1 = “abc”;

String s2= newString(“abc”);

答:s1在內存中只有一個對象,而s2在內存中有兩個對象。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章