Java面試題,每日一總結(1)
Java的跨平臺原理
答:因為不同的作業系統支援的指令集不完全一致,因此在不同的作業系統上就需要執行不同的Java程式碼。
Java為了應對這種情況,就針對不同系統,不同版本,不同位數的作業系統開發了對應的Java虛擬機器(JVM),來遮蔽系統之間的差異,提供統一的介面(Java API)
對於Java開發者而言,在不同的作業系統上,只需要安裝對應的虛擬機器,就可以按照Java的規範編寫程式碼,無需考慮指令集不同。
搭建一個Java的開發環境
答:1.下載安裝JDK。JDK安裝包中包括jre,jvm和jdk原始碼。配置JDK環境變數。zaix在系統變數中新建變數JAVA_HOME,放入JDK安裝路徑。並把%JAVA_HOME%\bin放入PATH變數中。
2.安裝eclipse或idea等開發工具
3.安裝JavaWeb伺服器,例如Tomcat
4.安裝SVN或Git等版本控制工具
Java中的基本資料型別和它所佔的位元組
Java面向物件的特徵(原則:回答比較抽象的問題,要舉例說明)
答:面向物件的四個基本特徵是:封裝、抽象、繼承、多型
封裝:把物件封裝成高度自治和相對封閉的個體。物件的狀態(屬性)由物件自己的行為(方法)來獲取和改變。
例如:張三這個人,名字等屬性是私有的,要自己提供獲取和改變的方法。
抽象:抽象就是將一類事物的相似或共同點抽象出來成為一個類。
繼承:繼承就是把已經存在的類所定義的內容變成自己的內容,並可以新增若干新內容或者修改原來的內容使其適用特殊需求,就是繼承。
例如:繼承遺產
多型:是指程式中定義的引用變數的具體型別和該引用變數發出的方法呼叫,在程式設計時並不確定,而是在程式執行期間才確定。
即一個引用變數到底會指向哪個類的例項物件,這個引用變數發出的方法呼叫到底是哪個類實現的方法,只有在執行時才能確定。
例如:UserDao dao=new UserDaoImpl();
裝箱和拆箱
我覺得這個問題可能是比較靈活的,根據問題來回答就好。
首先了解一下概念。
裝箱:就是把基本資料型別轉換成包裝型別
拆箱:就是把包裝型別轉換成基本資料型別。
基本資料型別有8種,每一種都分別對應一個包裝類。
byte——Byte int——Integer short——Short long——Long,
float——Float double——Double char——Character boolean——Boolean
裝箱和拆箱分為自動和手動(在J2SE5.0以後就提供了自動裝箱和拆箱)
裝箱舉例:
手動:Integer i=Integer.valueOf(1);
自動:Integer i=1;//自動裝箱其實是編譯時底層呼叫了valueOf()
拆箱舉例:
手動:Integer i=100; int j=i.intValue();
自動:Integer i=100; int j=i;//自動拆箱實際上也是呼叫了intValue()
拓展的問題:為什麼有了基本型別,還要有包裝型別呢?
答:Javashiy是一門面向物件的語言。而基本資料型別不具有面向物件的特徵。為了讓其具有面向物件的特性,就有了包裝類。
例如:Integer的預設初始值是null ,而int的預設初始值是0
==和equals的區別
答:==的比較有兩種情況,基本資料型別和引用資料型別。基本型別只需要比較值內容,引用型別比較的是記憶體地址和內容。
而equals方法,繼承自Object類,只能用於比較引用型別之間的特徵。至於比較記憶體地址和值,要看它是否被重寫。
① 比較java基本型別:
比較基本型別只能用"==",不能用"equals",這裡的"=="比較的是兩個基本型別的值;
② 比較包裝類:
包裝類裡重寫了equals()方法,所以==比較地址和值,equals比較值;
③ 比較String:
"=="比較的是記憶體地址,"equals"比較的是值
④ 比較物件:
這裡"=="比較的是記憶體地址,"equals"比較的也是地址,沒有重寫equals方法的類都是呼叫的Object的equals的方法。