亚洲国产日韩欧美在线a乱码,国产精品路线1路线2路线,亚洲视频一区,精品国产自,www狠狠,国产情侣激情在线视频免费看,亚洲成年网站在线观看

Java初始化和回收的面試題9個

時間:2025-12-14 14:59:49 java語言

精選Java初始化和回收的面試題9個

  Java的初始化和回收相關知識是公司在面試開發(fā)人員時?疾斓膯栴},以下是百分網(wǎng)小編搜索整理的關于精選Java初始化和回收的面試題9個,供參考借鑒,希望對大家有所幫助!想了解更多相關信息請持續(xù)關注我們應屆畢業(yè)生考試網(wǎng)!

精選Java初始化和回收的面試題9個

  1.Java中是如何區(qū)分重載方法的?

  通過重載方法的參數(shù)類型和順序來進行區(qū)分的。

  注意:若參數(shù)類型和順序均相同時,不管參數(shù)名是否相同,編譯器均會報錯,提示方法已經(jīng)被定義。且不能根據(jù)返回值類型來區(qū)分,如果根據(jù)返回值來區(qū)分的話,有時程序里調用方法時并不需要返回值,那么程序都無法確定該調用那個重載方法。

  2.閱讀以下程序,解釋其中的錯誤。

  public static void testLong(long i) {

  System.out.println("test long");

  }

  public static void testFloat(float i) {

  System.out.println("test float");

  }

  public static void main(String[] args) {

  testLong(50);

  testFloat(1.5);

  }

  testLong沒有問題,因為傳遞的參數(shù)50是int型的,而接收方參數(shù)是long型的,小范圍可以自動轉型為大范圍的數(shù)據(jù)類型;testFloat不會通過編譯,因為傳遞的參數(shù)1.5是double類型的,而接收方參數(shù)是float類型的,大范圍轉型為小范圍數(shù)據(jù)類型需要顯式轉換,即改為testFloat(1.5f)。

  3.閱讀以下程序,解釋其中的錯誤。

  public static class A {

  A(int i) {

  System.out.println("A(int i)");

  }

  }

  public static void main(String[] args) {

  A a = new A();

  }

  在定義了自定義構造器后,若要使用默認構造器,則需要顯式指定默認構造器,否則A a = new A();不能編譯通過。

  4.閱讀以下程序,解釋其中的錯誤。

  public static class A {

  A() {

  System.out.println("A()");

  }

  A(int i) {

  System.out.println("A(int i)");

  }

  A(int i, int j) {

  A();

  A(i);

  System.out.println("A(int i, int j)");

  }

  }

  在一個構造器中調用其它構造器時,需要使用this關鍵字進行調用,如this();在一個構造器中可調用僅一個其它構造器,并且調用其它構造器的語句需放在調用者(即發(fā)出調用行為的構造器)語句塊的第一行。

  5.閱讀以下程序,寫出執(zhí)行結果。

  public static class A {

  private int i;

  private String j;

  int getI() {

  return i;

  }

  String getJ() {

  return j;

  }

  A(int i) {

  i = i;

  }

  A(String j) {

  this.j = j;

  }

  }

  public static void main(String[] args) {

  System.out.println(new A(5).getI());

  System.out.println(new A("hello").getJ());

  }

  執(zhí)行結果為:

  0

  hello

  對于i = i;這個語句而言,它并未改變實例變量i的值,且i的默認值為0,因此結果也為0,若需要改變實例變量i的值,需要改為this.i = i;

  6.在一個類中,聲明了若干個static方法和非static方法,請談談聲明的static方法是否能訪問聲明的非static方法,說明理由?

  static方法不能訪問非static方法,因為static方法是屬于這個類本身的一個方法,在編譯期間就已經(jīng)確定了;而非static方法是屬于這個類的對象的方法,需要在實例化之后才能訪問到。若在static方法中訪問非static方法,將不能通過編譯。

  7.static關鍵字為何不能修飾局部變量?

  static關鍵字修飾的變量或方法是屬于類的,在編譯時就已經(jīng)確定了;而普通變量或方法是屬于該由類生成的對象,需要在實例化后才能確定。因此,若static關鍵字修飾了方法的局部變量,一方面方法需要在實例化之后才能確定,另一方面static修飾的變量需要在編譯時確定,這就會導致矛盾。

  8.finalize()有何用途?什么情況下需要調用這個函數(shù)?

  在需要釋放內存的地方調用finalize(),則在下一輪垃圾回收時會回收占用的內存,一般情況下不需要顯式調用此函數(shù)。

  垃圾回收器只能回收那些由new關鍵字創(chuàng)建的對象所占用的內存,那么有些不是通過這種方式(比如調用C++本地方法)所占用的內存如何回收呢?那么就需要使用finalize()了。由于C++中需要使用free()函數(shù)來釋放內存,所以Java程序在調用C++時需要調用finalize()方法來釋放內存。

  9.列出并簡要解釋幾種常見垃圾回收技術。

  引用計數(shù):每個對象都包含了一個引用計數(shù)器,每被引用一次,計數(shù)器都加1,引用者被置為null或者銷毀,計數(shù)器就減1。垃圾收集器進行輪詢,一旦發(fā)現(xiàn)計數(shù)器的值小于1,就回收該對象占用的內存。

  停止復制:在垃圾回收機制運行時,程序需要停止運行,將每個活動的對象由一個堆轉移到另一個堆,留下的垃圾會被回收。

  標記清除:從堆棧和靜態(tài)存儲區(qū)域開始,尋找到活的對象就對其進行標記,所有的標記過程完成后,就對垃圾進行回收。

【Java初始化和回收的面試題9個】相關文章:

Java類和對象的初始化順序10-17

Java內存回收01-19

總結Java垃圾回收器的方法和原理12-04

java垃圾回收機制12-19

Java內存回收相關知識12-04

java垃圾回收算法講解01-16

Java面試題(精選)01-28

java面試題12-18

Java繼承結構中類的初始化09-23