2018Java面試題(Java基礎部分)
1.Java中有哪些基本資料型別?String是基本資料型別嗎?String類是否能夠繼承?
答:1.java定義了4中類8種基本型別:
整型:byte、short、int、long
浮點型:float、double
布林型: boolean
字元型: char
2.String不是基本資料型別,String屬於引用型別。
3.String類是一個final類,因此不能被繼承。
2.簡述++i和i++的區別?
答:
int i=0;
System.out.print("++i先自加1再賦值得到結果是=");
System.out.println(++i);
控制檯列印:++i先自加1再賦值得到結果是=1
----------------------------------------
int i=0;
System.out.print("i++先賦值,然後再自加1得到結果=");
System.out.println(i++);
控制檯列印:i++先賦值,然後再自加1得到結果=0
3.short s=1;s=s+1;有什麼錯?short s=1;s+=1;有什麼錯?
答:1.對於short s=1;s=s+1;由於short資料型別和int資料型別表示範圍不一樣,所以需要進行型別轉換,解決方案是:要麼將short改為int,要麼強制型別轉換(short)s+1。
2.對於 short s=1;s+=1;由於+=是Java的規定運算子,Java編譯器會對它進行特殊處理,因此可以正確編譯。
4.Integer和int的區別?
答:參考部落格 Integer是一個封裝int型別的封裝類,預設值為null,int是Java中8中資料型別之一,預設值為0.
5.&和&&的區別?
答:&表示邏輯運算子:必須計算左右兩個表示式之後再取結果值。&&表示運算子先計算左邊表示式如果為true,則不計算右邊。如果左邊表示式為false那麼就需要計算右邊表示式。
6.使用最有效的方式計算出2乘以4等於幾?
答:使用位運算:2<<2
位運算子 | 功能 | 案例 | 說明 |
---|---|---|---|
<< | 左移 | a< < b | 將a各位元位向左移動b位 |
7.String s=new String(“xyz”)建立了幾個物件?
答:建立2個String物件,一個是=null的s,一個是=“xyz”的string。
8. 靜態變數和例項變數的區別?
答:1.在語法上的區別:靜態變數前需要加static關鍵字,而例項變數不需要加。
2.靜態變數不是某一個例項物件的屬性,它屬於類屬性,只要程式載入類的位元組碼,不需要建立任何例項物件靜態變數就可以分配空間從而被使用。必須先建立例項物件,例項變數才會被分配空間,才能使用這個例項變數。
3. 無論建立多少例項物件,永遠只分配一個靜態變數。建立一個例項物件靜態變數會加1,但是每建立一個例項物件就會分配一個例項變數,每個例項變數的值只會自加1.
public class TestProblem {
static int a=0;
int b=0;
public TestProblem() {
a++;
b++;
System.out.println("靜態變數數值:"+a);
System.out.println("例項變數數值:"+b);
}
public static void main(String[] args) {
TestProblem testProblem=new TestProblem();
System.out.println("------------");
TestProblem testProblem1=new TestProblem();
}
}
控制檯列印結果:
靜態變數數值:1
例項變數數值:1
------------
靜態變數數值:2
例項變數數值:1
9.switch語句能否作用在byte上,能否作用在long上,能否作用在String上?
答:1.switch常量表達式的值必須是整型(必須是int)或字元型。
2.在.switch表示式中,括號表示式只能是一個整型表示式或列舉常量整數表示式可以是int基本資料型別會Integer包裝型別。由於byte、short、char都可以隱式轉換為int,所以這些基本資料型別及其包裝型別都可以。
3.long和String無法隱式轉換為int型別所以不能在switch中使用。
10.簡述String、StringBuffer 和 StringBuilder 區別
答:1.String和StringBuffer的區別:它們都是用於儲存和操作字串,01.String是一個final類表示的類容不可改變。StringBuffer表示的內容可以修改。02.String實現了equals()方法,StringBuffer沒有。
2.StringBuffer 和 StringBuilder 區別:01.StringBuffer是執行緒安全的可以在多執行緒中使用。 StringBuilder是執行緒不安全的,但是執行效率非常高!
3.參考部落格String、StringBuffer 和 StringBuilder 區別
11.簡述自動裝箱和自動拆箱
12.簡述Java中實現多型的機制是什麼?
答:過載(overloading)、重寫(overriding)
1.過載(overloading):是一個類中多型的表現,比如一個類中定義多個同名的方法,但它們具有不同的引數或不同引數型別都稱之為過載。
2.重寫(overriding):子類定義一個方法和父類的方法名稱引數都相同,那麼父類的方法被重寫。
3.參考:理解java的三大特性之多型
13.簡述Java反射機制及其作用?
答:1.Reflection:是Java被視為一種動態語言的一個關鍵性質,這個機制允許程式在執行時通過Reflection API獲取任意一個已知名稱Class的內部資訊。並可在執行時改變欄位內容,喚起methods。
2.參考:Java反射機制詳解
3.Java API:Class類中的方法
14.簡述ArrayList和LinkedList的區別?
答:1.ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。
3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。
4.參考:ArrayList和LinkedList的區別
15.簡述HashMap的工作原理及HashMap和Hashtable的區別?
16.簡述java中super()和this()、super和this的區別?
答:1.super()和this()區別:
- super():呼叫父類無形參的構造方法;
- super(形參):呼叫父類中某個帶形參的構造方法;
- this(形參):呼叫本類中另一種形式的構造方法
注意:放在方法的首行;
2.super和this的區別:super.父類的成員變數;
- super.父類的方法;
- super:當子類中的成員變數、方法和父類的相同時,實現呼叫父類的成員變數和方法;
- this:代表當前的物件;
- 使用的地方:若函式的形參和成員變數同名時,需要用this.成員變數名