轉載:JAVA企業面試題精選 OOP 11-20

假裝鎮定發表於2018-09-30

轉載:https://blog.csdn.net/qq_38131668/article/details/75202806

2.11.是否可以繼承String類?

參考答案:

  String類是final類,故不可以繼承

2.12.闡述一下static關鍵字的作用

參考答案:

  static表示”靜態”的意思,用來修飾成員變數和成員方法,也可以形成靜態程式碼塊.只要這個類被載入,Java虛擬機器就能根據類名在執行時資料區的方法區找到它們.因此staitc成員可以在它的任何物件建立之前訪問,無需引用任何物件.
  1)修飾成員變數.用static修飾的成員變數不屬於物件的資料結構;static變數是屬於類的變數,通常可以通過類名來引用static成員;static成員變數和類的資訊一起儲存在方法區,而不是在堆中,一個類的static成員變數只有”一份”,無論該類建立了多少物件.
  2)修飾成員方法.static修飾的方法則不需要針對某些物件進行操作,其執行結果僅與輸入的引數有關,呼叫時直接用類名引用.由於static在呼叫時沒有具體的物件,因此在static方法中不能對非static成員(物件成員)進行訪問.static方法的作用在於提供一些”工具方法”和”工廠方法”等.
  3)static塊:屬於類的程式碼塊,在類載入期間執行的程式碼塊,只執行一次,可以用來在軟體中載入靜態資源.

2.13.解釋Java關鍵字的含義及用法

1)abstract
2)extends
3)final/finally
4)implements
5)import
6)instanceof
7)synchronized
8)throw/throws

參考答案:

1)abstract:抽象,修飾類和方法.含有abstract方法的類是抽象類,抽象方法主要是為了讓子類繼承實現.
2)extends:繼承,子類通過繼承父類來新增變數或方法,或者覆蓋父類的方法;子介面繼承父藉口來新增方法.
3)final/finally:final用於定義常量.finally用來執行一段程式碼,不管在前面定義的try語句中是否有異常或執行時錯誤發生.
4)implements:在類的宣告中是可選的,用來指明當前類實現的介面.
5)import:在原始檔的開始部分指明後面將要引進的一個類或整個包.
6)instanceof:判斷其指向物件的實際型別.
7)synchronized:修飾方法或方法塊.防止多個執行緒同時訪問這個類中的synchronized塊.
8)throw/throws:throw允許使用者丟擲一個exception物件或者任何實現throwable的物件.throws用在方法的宣告中來說明哪些異常這個方法是不處理的,而是提交到程式的更高一層.

2.14.靜態變數和例項變數的區別?

參考答案:

  靜態變數也稱為類變數,歸全類共有,它不依賴於某個物件,可通過類名直接訪問,而例項變數必須依存於某一例項,只能通過物件才能訪問到它.

2.15.GC是什麼?為什麼要有GC?

參考答案:

  GC是垃圾回收的意思(Gabage Collection),記憶體處理是程式設計人員容易出現問題的地方,忘記或者錯誤的記憶體回收會導致程式或系統的不穩定甚至崩潰,Java提供的GC功能可以自動檢測物件是否超過作用域從而達到自動回收記憶體的目的.Java程式設計師程式設計的時候不用考慮變數不用時釋放記憶體,Java虛擬機器可以自動判斷出並回收垃圾.

2.16.件數垃圾回收的優點和原理.並舉例2中回收機制

參考答案:

  Java語言中一個顯著的特點就是引入了垃圾回收機制,使C++程式設計師最頭疼的記憶體管理的問題迎刃而解,它使得Java程式設計師在編寫程式的時候不再需要考慮記憶體管理.由於有個垃圾回收機制,Java中的物件不再有”作用域”的概念,只有物件的引用才有”作用域”.垃圾回收可以有效的防止記憶體洩漏,有效的使用可以使用的記憶體.
  垃圾回收器通常是作為一個單獨的低階別的執行緒執行,不可預知的情況下對記憶體堆中已經死亡的或者長時間沒有使用的物件進行清除和回收,程式設計師不能實時的呼叫垃圾回收器對某個物件或所有物件進行垃圾回收.
1)增量收集器
  增量收集器把堆疊分為多個域,每次僅從一個域收集垃圾.這會造成較小的應用程式中斷.
2)分代收集器
  這種收集器把堆疊分為兩個或多個域,用以存放不同壽命的物件.JVM生成的新物件一般放在其中的某個域中.過一段時間,繼續存在的物件將獲得使用期並轉入更長壽命的域中.分代收集器對不同的域使用不同的演算法以優化效能.

2.17.介面是否可繼承介面?抽象類是否可實現(implements)介面?抽象類是否可繼承實體類(concrete class)?

參考答案:

1)介面可以繼承介面
2)抽象類可以實現(implements)介面
3)抽象類可繼承實體類

2.18.public class MyString extends String{}有什麼錯?

參考答案:

  String類是final類,不能被繼承.

2.19.子類A繼承父類B,A a = new A();則父類B建構函式,父類B靜態程式碼塊,父類B非靜態程式碼塊,子類A建構函式,子類A靜態程式碼塊,子類A非靜態程式碼塊執行的先後順序是?

參考答案:

父類B靜態程式碼塊->子類A靜態程式碼塊->父類B非靜態程式碼塊->父類B的建構函式->子類A非靜態程式碼塊->子類A建構函式

2.20.簡述”類(class)”,”類庫(class library)”,”包(package)”,”jar檔案”這四個概念間的聯絡

參考答案:

1)類(class)實際上是對某種型別的物件定義變數和方法的原型.它表示對現實生活中一類具有共同特徵的事物的抽象.
2)為了更好地組織類,Java提供了包機制.包(package)是類的容器,用於分隔類名空間.
3)類庫(class library)是用來實現各種功能的類的集合.
4)jar檔案用於釋出和使用類庫,可被編譯器和JVM直接使用.

相關文章