面試題--Java
&與&&區別?
&與&&都是邏輯運算子,都是判斷兩邊為真則為真,兩邊為假則為假,但是&&如果第一個條件不成立的話,後面的將不會再繼續執行,而&是繼續執行,直到整個條件語句執行完畢為止
使用 final 關鍵字修飾一個變數時,是引用不能變,還是引用的物件不能變?
使用final關鍵字修飾一個變數的時候,是引用變數不能變 引用變數所指的物件的內容還是可以變化的
靜態變數和例項變數的區別?
在語法定義的區別:
靜態變數前面要加上關鍵字static 而例項變數不需要
在程式執行時的區別:
例項變數屬於某個物件的屬性,必須建立了例項物件,其中的實力變數才會分配空間,才可以使用這個例項變數
靜態變數不屬於某個物件的屬性,而是屬於類所以也稱為類變數,只要程式載入了類的位元組碼,不用建立任何例項物件,靜態變數就會被分配空間,靜態變數就可以使用了
總之:
例項變數必須建立物件後才可以通過這個物件來使用,靜態變數則可以直接使用類名來引用。
靜態變數使用時通過類名 名稱,例項變數必須要初始化以後才可以使用,實力變數是例項化後才分配空間的,而靜態變數是當類在載入的時候就分配空間了
是否可以從一個 static 方法內部發出對非 static 方法的呼叫?
不可以。
因為非 static 方法是要與物件關聯在一起的,必須建立一個物件後,才可以在該對 象上進行方法呼叫,而 static 方法呼叫時不需要建立物件,可以直接呼叫。也就是 說,當一 個 static 方法被呼叫時,可能還沒有建立任何例項物件,如果從一個 static 方法中發出對非 static 方法的呼叫,那個非 static 方法是關聯到哪個物件上的 呢?這個邏輯無法成立,所以, 一個 static 方法內部發出對非 static 方法的呼叫。
非static方法可以訪問static方法.
static方法不能訪問非static方法
"=="和 equals 方法究竟有什麼區別?
==如果判斷值型別的話,判斷內容是否相同。如果判斷引用型別則是判斷記憶體地址是否相同
Equals判斷值內容是否相等
Integer 與 int 的區別?
Integer 是引用型別,預設值是null。而int是是值型別預設值是0
請說出作用域 public, private, protected,以及不寫時的區別
這四個作用域的可見範圍如下表所示。
說明:如果在修飾的元素上面沒有寫任何訪問修飾符,則表示 friendly。
作用域 當前類 同一包( package) 子孫類 其他包( package)
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
過載與重寫區別?
過載是同一個類中,方法名稱相同, 但是引數或個數不同。與返回值沒有關係。
重寫是在多個類中, 產生繼承關係。父類與子類的方法方法必須相同。
final, finally, finalize 的區別。
final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
內部類要訪問區域性變數,區域性變數必須定義成 final 型別,例如,一段程式碼……
finally 是異常處理語句結構的一部分,表示總是執行。
finalize 是 Object 類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可
以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。 JVM 不保證此方法總被
呼叫
String、StringBuffer與StringBuilder的區別
String 字串常量
StringBuffer 字串變數(執行緒安全)
StringBuilder 字串變數(非執行緒安全)
介面和抽象類的區別
介面中不能有構造方法,抽象類中可以有
抽象類中可以包含普通方法,介面中的方法都被隱式指定為public abstract方法並且只能是public abstract的、
抽象類可以有普通的成員變數,介面中的成員變數必須是public static final 的
抽象類中的方法的訪問可以是public ,protected和預設型別
抽象類中可以包含靜態方法,介面中不能包含靜態方法
一個類可以實現多個介面,但是隻能繼承一個抽象類
資料型別轉換
自動資料型別轉換
Byte>short>char>int>long>float>double>long
運算中資料型別轉換
一型別 二型別 轉換後的型別
Byte,short,char int int
Byte,short,char,int long long
Byte,short,char,int,long float float
Byte,short,char,int,long,float double double
所有的類都繼承於object類,你用過的object類的直接子類有哪些,object類常用的方法有哪些
1.clone方法
保護方法,實現物件的淺複製,只有實現了Cloneable接口才可以呼叫該方法,否則丟擲CloneNotSupportedException異常。
2.getClass方法
final方法,獲得執行時型別。
3.toString方法
該方法用得比較多,一般子類都有覆蓋。
4.finalize方法
該方法用於釋放資源。因為無法確定該方法什麼時候被呼叫,很少使用。
5.equals方法
該方法是非常重要的一個方法。一般equals和==是不一樣的,但是在Object中兩者是一樣的。子類一般都要重寫這個方法。
6.陣列有沒有length()這個方法? String有沒有length()這個方法?
答:陣列沒有length()這個方法,有length的屬性。String有有length()這個方法。
7.hashCode方法
該方法用於雜湊查詢,重寫了equals方法一般都要重寫hashCode方法。這個方法在一些具有雜湊功能的Collection中用到。
一般必須滿足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就滿足equals。不過為了提高效率,應該儘量使上面兩個條件接近等價。
7.wait方法
wait方法就是使當前執行緒等待該物件的鎖,當前執行緒必須是該物件的擁有者,也就是具有該物件的鎖。wait()方法一直等待,直到獲得鎖或者被中斷。wait(long timeout)設定一個超時間隔,如果在規定時間內沒有獲得鎖就返回。
呼叫該方法後當前執行緒進入睡眠狀態,直到以下事件發生。
(1)其他執行緒呼叫了該物件的notify方法。
(2)其他執行緒呼叫了該物件的notifyAll方法。
(3)其他執行緒呼叫了interrupt中斷該執行緒。
(4)時間間隔到了。
此時該執行緒就可以被排程了,如果是被中斷的話就丟擲一個InterruptedException異常。
8.notify方法
該方法喚醒在該物件上等待的某個執行緒。
9.notifyAll方法
該方法喚醒在該物件上等待的所有執行緒
反射的優缺點?
反射:就是正在執行動態讀取這個類的完整資訊。
優點:java的反射機制就是增加程式的靈活性、
缺點:
(1)效能問題:使用反射基本上是一種解釋操作,
用於欄位和方法接入時要遠慢於直接程式碼。因此反射機制主要應用在對靈活性和擴充套件性要求很高的系統框架上,普通程式不建議使用。
(2)使用反射會模糊程式內內部邏輯:程式設計師希望在原始碼中看到程式的邏輯,反射等繞過了原始碼的技術,因而會帶來維護問題。反射程式碼比相應的直接程式碼更復雜。
那些地方用到了反射?
例如: jdbc、Java常用框架、jdk的動態代理、android的載入佈局檔案
java 中有幾種型別的流?JDK 為每種型別的流提供了一些抽象類以供繼承, 為每種型別的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
位元組流,字元流。
位元組流繼承於 InputStream OutputStream,字元流繼承於InputStreamReaderOutputStreamWriter。
在 java.io 包中還有許多其他的流,主要是為了提高效能和使用方便。