精選Java初始化和回收的面試題9個
Java的初始化和回收相關知識是公司在面試開發人員時常考察的問題,以下是本站小編搜索整理的關於精選Java初始化和回收的面試題9個,供參考借鑑,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!
中是如何區分重載方法的?
通過重載方法的參數類型和順序來進行區分的。
注意:若參數類型和順序均相同時,不管參數名是否相同,編譯器均會報錯,提示方法已經被定義。且不能根據返回值類型來區分,如果根據返回值來區分的話,有時程序裏調用方法時並不需要返回值,那麼程序都無法確定該調用那個重載方法。
2.閲讀以下程序,解釋其中的錯誤。
public static void testLong(long i) {
tln("test long");
}
public static void testFloat(float i) {
tln("test float");
}
public static void main(String[] args) {
testLong(50);
testFloat(1.5);
}
testLong沒有問題,因為傳遞的參數50是int型的,而接收方參數是long型的,小範圍可以自動轉型為大範圍的數據類型;testFloat不會通過編譯,因為傳遞的參數1.5是double類型的,而接收方參數是float類型的,大範圍轉型為小範圍數據類型需要顯式轉換,即改為testFloat(1.5f)。
3.閲讀以下程序,解釋其中的錯誤。
public static class A {
A(int i) {
tln("A(int i)");
}
}
public static void main(String[] args) {
A a = new A();
}
在定義了自定義構造器後,若要使用默認構造器,則需要顯式指定默認構造器,否則A a = new A();不能編譯通過。
4.閲讀以下程序,解釋其中的錯誤。
public static class A {
A() {
tln("A()");
}
A(int i) {
tln("A(int i)");
}
A(int i, int j) {
A();
A(i);
tln("A(int i, int j)");
}
}
在一個構造器中調用其它構造器時,需要使用this關鍵字進行調用,如this();在一個構造器中可調用僅一個其它構造器,並且調用其它構造器的語句需放在調用者(即發出調用行為的構造器)語句塊的第一行。
5.閲讀以下程序,寫出執行結果。
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) {
tln(new A(5)());
tln(new A("hello")());
}
執行結果為:
0
hello
對於i = i;這個語句而言,它並未改變實例變量i的值,且i的默認值為0,因此結果也為0,若需要改變實例變量i的值,需要改為this.i = i;
6.在一個類中,聲明瞭若干個static方法和非static方法,請談談聲明的static方法是否能訪問聲明的非static方法,説明理由?
static方法不能訪問非static方法,因為static方法是屬於這個類本身的`一個方法,在編譯期間就已經確定了;而非static方法是屬於這個類的對象的方法,需要在實例化之後才能訪問到。若在static方法中訪問非static方法,將不能通過編譯。
ic關鍵字為何不能修飾局部變量?
static關鍵字修飾的變量或方法是屬於類的,在編譯時就已經確定了;而普通變量或方法是屬於該由類生成的對象,需要在實例化後才能確定。因此,若static關鍵字修飾了方法的局部變量,一方面方法需要在實例化之後才能確定,另一方面static修飾的變量需要在編譯時確定,這就會導致矛盾。
lize()有何用途?什麼情況下需要調用這個函數?
在需要釋放內存的地方調用finalize(),則在下一輪垃圾回收時會回收佔用的內存,一般情況下不需要顯式調用此函數。
垃圾回收器只能回收那些由new關鍵字創建的對象所佔用的內存,那麼有些不是通過這種方式(比如調用C++本地方法)所佔用的內存如何回收呢?那麼就需要使用finalize()了。由於C++中需要使用free()函數來釋放內存,所以Java程序在調用C++時需要調用finalize()方法來釋放內存。
9.列出並簡要解釋幾種常見垃圾回收技術。
引用計數:每個對象都包含了一個引用計數器,每被引用一次,計數器都加1,引用者被置為null或者銷燬,計數器就減1。垃圾收集器進行輪詢,一旦發現計數器的值小於1,就回收該對象佔用的內存。
停止複製:在垃圾回收機制運行時,程序需要停止運行,將每個活動的對象由一個堆轉移到另一個堆,留下的垃圾會被回收。
標記清除:從堆棧和靜態存儲區域開始,尋找到活的對象就對其進行標記,所有的標記過程完成後,就對垃圾進行回收。
-
java構造函數調用技巧
Java是一個純的面向對象的程序設計語言,它繼承了C++語言面向對象技術的核心,Java捨棄了C++語言中容易引起錯誤的指針(以引用取代)、運算符重載(operatoroverloading)、多重繼承(以接口取代)等特性,增加了垃圾回收器功能用於回收不再被引用的對象所佔據的內存空間,...
-
java中反射機制
導語:Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++裏難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。下面我們來看看java中反射機制,希望對大家有所幫助。Java中什麼是反射機制:(JavaReflactioninaction)Java反射...
-
java圖片處理功能介紹
java可實現縮放圖像、切割圖像、圖像類型轉換、彩色轉黑白、文字水印、圖片水印等常用功能,本文是本站小編搜索整理的關於java圖片處理功能介紹,供參考學習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!代碼如下複製代碼importaComposi...
-
新手學習Java最高效的10個計劃
對於新手來説學習Java如同堵天書,下面是本站小編收集的關於新手學習Java最高效的10個計劃,希望可以為您的學習帶來幫助!計劃一:瞭解未來技術發展方向兩耳不聞窗外事,在如今是不合適的,尤其是在瞬息萬變的互聯網時代,作為一個開發者技術跟不上可以去專研,思想要跟不上,...