java經典面試筆試題(掃盲貼)

一、什麼是對象序列化,爲何要使用?
html

所謂對象序列化,就是把一個對象以二級制的方式保存到硬盤上,方便遠程調用。java

二、值傳遞與引用傳遞的區別?android

值傳遞就是把一個對象的值傳給一個新的變量,可是系統會給這個新的變量開闢一個新的內存空間。不改變原有的值。算法

引用傳遞就是把一個對象在堆保存的數據傳遞給一個變量,此時新的變量與原有的變量對應同一個內存存儲空間,當新的變量修改對象屬性是,內存中的數據也會被修改。編程

三、接口與抽象類的區別?api

1:接口裏面不能夠實現方法體,抽象類能夠實現方法體數組

2:接口能夠多個接口,抽象類不能夠安全

3:接口須要子類實現,抽象類要須要子類單一繼承網絡

4:接口中只能有公有的方法和屬性並且必須賦初值,抽象類中隨意多線程

5:接口中不能有靜態方法,但屬性能夠有final,抽象中方法能夠有靜態方法,屬性也能夠

四、談談繼承,爲何要使用繼承?

繼承就是找出幾個類的共同部分,提取出來做爲父類。而子類只須要繼承父類,就能夠共享父類的方法,使用繼承可以減小重複代碼。

五、方法重載的好處(overload)

重載就是在同一個類中能夠定義多個相同的方法,可是方法的參數類型和參數的個數以及順序要不一樣。

重載的好處是可以讓咱們很快掌握該方法的功能,咱們只要記住該方法就能很快理解該方法的參數和參數的做用。

六、項目中印象最深的部分

反射技術的強大之處,

一、當加入新的功能是,不會修改原有代碼(面向接口編程)

二、當咱們寫一個類能夠重複的運用於其餘項目。(代碼的服用性)

三、當寫一個新類的時候要考慮到他的課擴展性。(靈活性)

七、談談集合框架

集合框架分爲三部分,第一部分是Collection接口,第二部分是Map接口、第三部分是collections幫助類

collection接口下分爲set接口,list接口,往下是他們的實現類。

實現類再分爲兩部分,第一部分是set的實現類TreeSet、HashSet,第二部分是list的實現類ArrayList、LinkedList、Vector

八、再說Map接口,map接口下面有treeMap、HashMap、HashTable三個實現類。

最後說collections幫助類,collections提供了一系列靜態方法實現對各類集合的搜索、排序,線程安全化等操做

九、什麼是異常?描述下異常處理

異常就是在執行程序的時候發生的錯誤,會使程序終止

異常處理:

一、使用try-catch捕獲異常

二、使用throw-throws拋出異常

十、多線程的優先級?爲何要分優先級?

由於有一些線程很重要,因此才劃分優先級

Trowable是全部錯誤的超類,它下面有兩個子類;error和Execption

error表明系統級別的錯誤能捕捉,但不能處理。Exception表明異常主要自於程序,能夠捕獲也能處理

Exception有分爲兩類:編譯器異常、運行期異常。

區別他是運行期異常仍是編譯期異常就看它是否是RuntimeException的子類,若是是的話,即是運行期異常。

十一、說一下iterator

iterator是一個接口,用於實現對容器裏面的元素遍歷操做。

任何遍歷均可以使用iterator。

十二、什麼是泛型,泛型的好處?

泛型就是本身指定的一種類型,之後存放的東西就只能有這一種類型。泛型的好處是在編譯的時候檢查類型安全,而且全部的強制類型轉換都是自動和隱式的,提升代碼的重用率。

1三、說一下你在項目中遇到的異常,並說出何時發生,怎麼解決的。

空指針異常最多見。根據異常的提示找到相應的類進行處理,發生的緣由有不少,好比變量沒有初始化,沒有賦值,對android來講,activity,service等沒有註冊,

根據錯誤提示找到出錯的api進行相應的處理

1四、java爲何是跨平臺的?

對於不一樣的系統有不一樣的虛擬機,虛擬機提供了硬件平臺規範。用java開發的程序被編譯成java虛擬機指令組成的字節代碼,虛擬機將這些指令翻譯成對應OS的指令(jvm屏蔽了底層操做系統的硬件)。

1五、private變量能不能被其它類訪問?若是能,怎麼訪問?

能,經過反射。詳情請見:http://my.oschina.net/carbenson/blog/496931

1六、演示java項目如何打包成jar文件

http://blog.csdn.net/cyb_23/article/details/40341857

java的環境變量怎麼配置?爲何要配置?

1:在個人電腦->屬性->高級->環境變量->系統變量

新建變量名JAVAHOME,設置java的JDK目錄(不能有中文)

2:選擇系統變量PATH,前面添加%JAVAHOME%\bin;

3:運行dos,輸入java -version;若是能看到版本號,說明安裝成功。

使系統能夠找到程序javac.exe的運行路徑!方便在dos窗口操做

1七、static和非static修飾的變量那個生命週期長?

static更長,由於它一直在內存

什麼是線程同步?

線程同步就是說同一時間訪問某個資源的時候,資源只能被一個線程所使用。

1八、什麼是封裝?封裝的好處是什麼?

封裝就是把一個已經實現好的功能的代碼,放在一個方法中,實現了隱藏。

好處是提升代碼的重用性,安全性,只須要調用該方法無論具體實現。

1九、線程中wait和sleep的區別?

1:wait是Object定義的方法,而sleep是線程Thread定義的方法。

2:sleep是讓當前線程睡眠,因此能夠放在任何位置,而wait是讓當前線程放棄資源的使用權,,必須在同步塊或同步方法裏面調用。

3:sleep不釋放對象鎖,wait會釋放對象同步鎖

4:sleep是等待一段時間後自動醒來,而wait必須讓其餘線程喚醒。

20、Class和class的區別

Class是類的名稱。class是java保留字

2一、awt和swing的區別

awt是重量級的組件,swing是輕量級的組件。

eg:在swing組件中當咱們調用repaint()方法時,會很快調用paint()。而在重量級組件中,會先調用updata()方法,而後在update()方法裏面在調用paint()方法,在重量級組件中實現了雙緩衝,咱們就要重寫update()方法,在重寫的時候記得實現刷新屏幕操做。

2二、爲何實現一個接口必須實現接口裏面全部的方法?

由於這是sun公司的規定。若是不實現它裏面全部的方法那就不叫接口。

2三、線程和進程的區別

進程是一個小的應用程序,須要分配內存空間。

線程是進程中的一個順序控制流,也能夠這樣理解,線程是進程的實體。

2四、java基礎技能中強調程序代碼的讀寫能力,若是一個類很長,你會怎麼讀寫?

1:類分解,每一個類只作他該作的事情。

2:方法分解。

2五、抽象方法能不能是private和static修飾符?

2六、使用接口的好處?

1:使用接口有很好的擴展性。

2:接口能夠多繼承接口。

3:隱藏實現

2七、什麼是反射?

所謂反射就是在編譯的時候不知道加載什麼,只能等到運行的時候才知道執行什麼。

2八、建立對象的方法有哪些?

一、用new語句建立對象,這是最多見的建立對象的方法。

二、運用反射手段,調用java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實例方法。

三、調用對象的clone()方法

四、運用反序列化手段,調用java.io.ObjectInputStream對象的readObject()方法

2九、transient是什麼意思

transient表明沒法到達某一對象所拋出的異常。但也不表明沒有該對象

30、在設計類的時候,你是怎麼使用靜態變量和成員變量的?

若是須要一直存在於內存當中,就選擇靜態變量不然就選擇成員變量。

3一、定義抽象方法的意義何在?

1:爲了減小重複代碼

2:抽象方法有很好的擴展性

3二、集合的遍歷方式

forEach()、for()、interator

for、while是同樣的,形式上不一樣,

forEach(),Iterator也是同樣的,形式上不一樣,性能的話,確定是迭代器好一些。迭代器能直接訪問集合內部元素。並且有得集合沒有索引,根本沒法使用for,只能用迭代器。

3三、java安全性體如今什麼地方?

1:java提供一個用於網絡/分佈式的計算環境。所以,java強調安全性,如確保無病毒、小應用程序運行安全控制等等

2:java的驗證技術是以公鑰(public-key)加密算法爲基礎,並且從環境變量、類加載器、文件系統、網絡資源和名字空間等方面實施安全策略。

3四、談談線程所擁有的幾種狀態

就緒:線程分配了CPU之外的所有資源,等待得到CPU調度

執行:線程得到CPU,正在執行

阻塞:線程因爲發生I/O或者其餘的操做致使沒法繼續執行,就放棄處理機,轉入線程就緒隊列

掛起:因爲終端請求,操做系統的要求等緣由,致使掛起。

3五、面向對象的特徵有哪些?

封裝、繼承、多態(每一個java碼農必須熟記於心)

3六、解析一下在項目裏面你怎麼去實現多線程的。

通常是實現Runnable接口,重寫run();new Thread(new MyThread()).start();

(假如MyThread已經實現了Runnable接口)

3七、啓動線程是能夠調用run()方法嗎?

能夠,由於run方法裏面執行的代碼就是所要執行的方法。

3八、java程序的執行過程是怎樣的?

java源程序 編譯.class字節碼 -> 類加載器 -> 字節碼校驗器  -> 解析執行

3九、java程序的引用數據類型有哪些?

對象、集合、數組、接口

40、變量按做用域分類分爲幾種?

分兩種:全局變量和局部變量

4一、集合裏面的接口有哪些?

Collection接口、set接口、list接口、map接口、iterator接口

4二、int與Integer的區別

int是原始數據類型,integer是int的包封裝類,他提供轉換類型的不少方法。

4三、checked異常與unchecked異常的區別是什麼?

區別是看他們是否是runtime的子類,若是是runtime的子類那麼就是運行期異常,不然是編譯期異常

4四、final,finally和finalize的區別

final用於聲明屬性,方法和類,分別表示屬性不可更改,方法不可重寫,類不可繼承

finally是異常處理語句結構的一部分,它表示老是執行。

finalize是Object類的一個方法,在垃圾收集器執行的時候會調用回收對象的此方法,能夠覆蓋此方法提供垃圾收集是的其餘資源回收,好比關閉文件等。

4五、重寫與重載的區別?參數同樣,返回類型不同,是重載嗎?

重載:方法名相同,參數類型不一樣,參數個數不相同,參數順序不一樣

重寫:方法名相同,參數類型相同,返回的類型相同。

返回類型不相同的不是重載,重載是根據參數類判斷的。

4六、寫一個數組的建立

int [] i = new int[5];

int [] i = {1,2,3,4};

4七、何時用輸入流,何時用輸出流?

讀寫數據的時候使用輸入流,寫入數據的時候用輸出流,相對內存來講。

4八、雙緩衝如何實現?爲何要雙緩衝?

如今內存中分配一個和咱們動畫窗口同樣大的空間(內存中的空間咱們是看不到的),而後利用getGraphics_r()方法去得到空間並將它所有一次性的顯示到咱們的屏幕上,這樣在咱們的動畫窗口上面的顯示效果會很是流暢,避免了閃爍的效果。

4九、舉出經常使用的list類,哪一種狀況用哪一個

ArrayList、LinkedList、Vector

ArrayList是連續的控件,遍歷速度快,插入和刪除就比較慢。

LinkedList是一個雙向鏈表存放數據,若是刪除和添加元素比較多的話,要效率高的就是用LinkedList。

Vector和ArrayList的功能同樣,惟一的區別是vector是線程安全的,而ArrayList是線程不安全的。

50、map、list、與set的區別?裏面經常使用的類有哪些?

map是以鍵值對的方式存放數據。

list裏面的數據能夠重複,有順序。

set裏面的數據不能夠重複,沒有順序。

list的經常使用類有arraylist

set的經常使用類有treeset

map的經常使用類時hashmap

5一、何時用繼承Thread?何時實現Runnable接口

當一個類中沒有繼承的時候能夠繼承Thread。

若是類中已經繼承了別的類,只能建立一個類並實現Runnable接口,在初始化的時候必須new Thread(new MyThread());

5二、對象如何進行比較,爲什麼大多數狀況下不能使用「==」?

若是對象不是String的話,==與equals並無區別。由於String他是重寫了object的方法,因此纔有了equals比較內容,==比較地址。

5三、靜態變量與成員變量的區別

靜態變量在對象加載以前初始化,而成員變量是在編譯期間初始化。

靜態變量能夠直接經過類點名的方式進行訪問,而成員變量不行。

5四、修飾符有哪幾種?他們之間的區別?

前提:在一個項目裏

public 能夠在全部包中的全部類隨意進行訪問

private 只能被當前的類訪問

protected 在同一包中,或子類能夠進行訪問

默認:同包下能被訪問。

5五、對象序列化怎麼實現?

實現Serializable接口。

5六、講一下多態的概念。

多態就是在相同的行爲不一樣的體現方式。(好比:愛好,每一個人都要有本身的愛好,可是愛好都不一樣)

5七、子類中怎麼調用父類的方法

經過super.方法

5八、this、super的用法與區別

this是訪問當前類的屬性和方法

super是訪問父類的屬性和方法

5九、什麼是構造方法?構造方法的做用?

構造方法是在調用的時候被new出來的,每一個類都有構造方法。

做用:爲對象分配內存、初始化類變量、初始化屬性、返回引用。

60、error和exception的區別是什麼?

error是系統級別的錯誤,能夠捕獲,但不能處理。

exception是程序錯誤,能夠捕獲也能夠進行處理。

6一、輸入輸出流分幾種?分別在何時使用?

輸入流:InputStream、Read

輸出流:OutputStream、Writer

讀取字節,使用InputStream    

以字符讀取使用Read

輸出字節,使用OutputStream

以字符輸出使用Writer

6二、異常捕獲的流程?若是異常發生是怎樣的流程

try{

容易發生異常的代碼

}catch(錯誤的類型){

打印錯誤信息

}finally{

無論有沒有異常都要執行

}

6三、String是基本的數據類型嗎?基本數據類型有哪些?

不是,基本的數據類型有:

byte  8bit

short  16bit

int   32bit

long  64bit

float  32bit

double   64bit

char   16bit

boolean  

6四、Collection與Collections的區別?

Collection是一個接口

Collections是一個幫助類(主要對查找、排序)

6五、HashMap等是實現Collection接口的嗎?

不是,HashMap是實現map接口的。

6六、若是try快有多個異常,在catch中怎麼處理?

直接在catch中寫一個Exception異常,由於Exception是全部異常的超類

6七、如何拋出異常?

使用throw明確要拋出異常的代碼,在方法中使用throws拋出異常的類型

throw關鍵字一般用在方法體中

eg:if(y<0)

{  throw new MyException("除數不能爲負數");}

throws關鍵字一般被應用在聲明的地方,用來指定可能拋出的異常。若是發生異常,就會將異常拋出給指定的對象。

6八、GUI相應一個事件的代碼如何寫?

肯定事件源:肯定監聽器,監聽器須要實現監聽器接口,重寫其中的方法:完成事件源和監聽器的註冊

6九、JVM是什麼?它的做用是什麼?它和java運行環境有什麼區別

JVM就是java虛擬機,具備一個指令集並使用不一樣的存儲區域。

它負責執行指令,還要管理數據、內存和寄存器。java解析器負責將字節代碼翻譯成特定機器的機器代碼

沒有java虛擬機就更不要說運行環境了。

70、集合和數組的區別。

1:集合中能夠存放不一樣類型的元素,而數組中只能放同一種類型的數據

2:集合的長度能夠隨元素的多少自動增加,數組不行

3:集合只能放置對象,數組能夠是對象,也能夠是基本數據類型。

4:集合提供很好的算法,數組提供的算法有限

7一、String能否被繼承?

不能夠,String類被final修飾

7二、基本數據類型和引用數據類型的區別是什麼?

基本數據類型表明元素的實際值,也就是說基本數據類型是存在棧中的。引用數據類型是元素所表明的內存中所指向的一個地址,在棧中只是保存對象的地址。而對象的具體內容是保存在堆中

7三、byte的取值範圍?

-128~~+127

7四、java中採用什麼字符集?char類型能不能放入一箇中文字?

Unicode編碼。能

7五、java語言的特色是什麼?

簡單、健壯、安全、分佈式、跨平臺、解釋性、多線程、面向對象、垃圾回收。

7六、String的幾個經常使用方法

http://www.cnblogs.com/crazyac/articles/2012791.html

7七、接口能夠定義常量嗎?

能夠定義,必須加上public 且初始化完畢

7八、斷言有什麼做用?

調試程序

7九、列舉出switch()括號中能接受的全部數據類型。

int 、double、float、long

80、如何獲取String或數組的長度

String使用length(),數組使用length屬性

8一、JDK與JRE分別是什麼?

jdk:開發環境

jre:運行環境

相關文章
相關標籤/搜索