一,談談final, finally, finalize的區別。java
final—修飾符(關鍵字) 修飾類,則該類不能被繼承;修飾方法,不能被重寫;修飾成員變量,不能被二次賦值(因此說必須給定初始值);不能和abstract同時使用;程序員
finally—專門用於在try-catch塊以後,通常用於關閉某些流之類的。面試
finalize—方法名。專門用在垃圾回收機制的時候;每個對象都有一個finalize()方法;編程
當回收對象的時候,在進行可達性分析後發現沒有與GC Roots相鏈接的引用鏈,會被第一次標記且進行一次篩選,篩 選的條件就是是否有必要執行該方法,當對象沒有覆蓋該方法或者已經被調用過,就不會再執行該方法了;該方法是對 象逃脫死亡的惟一辦法數組
二,Anonymous Inner Class (匿名內部類) 是否能夠extends(繼承)其它類,是否能夠implements(實現)interface(接 口)?安全
匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類能夠做爲一個接口,由另外一個內部類實現。架構
三,Static Nested Class 和 Inner Class的不一樣,說得越多越好(面試題有的很籠統)。編程語言
Nested Class (通常是C++的說法),Inner Class (通常是JAVA的說法)。Java內部類與C++嵌套類最大的不一樣就在因而否 有指向外部的引用上。ide
靜態內部類(Inner Class)意味着建立一個static內部類的對象,不須要一個外部類對象;不能從一個static內部類的一個對 象訪問一個外部類對象函數
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現
HashMap容許將null做爲一個entry的key或者value,而Hashtable不容許
還有就是,HashMap把Hashtable的contains方法去掉了,改爲containsvalue和containsKey。由於contains方法容易讓 人引發誤解。最大的不一樣是,Hashtable的方法是Synchronize的,而HashMap不是,在 多個線程訪問Hashtable時,不須要本身爲它的方法實現同步,而HashMap 就必須爲之提供外同步。
四,&和&&的區別。
&是位運算符;無論前面對與錯,後面都參與運算。
&&是布爾邏輯運算符;只要前面第一個爲true,則後面的就不進行運算。
五,HashMap和Hashtable的區別。
一、HashMap和Hashtable都是Map接口的實現類
二、Hashtable是線程安全的,而HashMap是線程不安全的;
三、HashMap容許key-value做爲null值,可是Hashtable不容許
四、HashMap是採用的快速安全失敗機制來進行訪問的
六,Collection 和 Collections的區別。
都是java.util包下面的
--- Collections是類,它包含有各類有關集合操做的靜態方法。
--- Collection是接口,它是各類集合的父接口.
七,何時用assert。
斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式爲 true。若是表達式計算爲 false,那麼系統會報告一個 AssertionError。它用於調試目的:
assert(a > 0); // throws an AssertionError if a <= 0
斷言能夠有兩種形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 應該老是產生一個布爾值。
Expression2 能夠是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。
斷言在默認狀況下是禁用的。要在編譯時啓用斷言,須要使用 source 1.4 標記:
javac -source 1.4 Test.java
要在運行時啓用斷言,可以使用 -enableassertions 或者 -ea 標記。
要在運行時選擇禁用斷言,可以使用 -da 或者 -disableassertions 標記。
要系統類中啓用斷言,可以使用 -esa 或者 -dsa 標記。還能夠在包的基礎上啓用或者禁用斷言。
能夠在預計正常狀況下不會到達的任何位置上放置斷言。斷言能夠用於驗證傳遞給私有方法的參數。不過,斷言不該該用於驗證傳遞給公有方法的參數,由於不論是否啓用了斷言,公有方法都必須檢查其參數。不過,既能夠在公有方法中,也能夠在非公有方法中利用斷言測試後置條件。另外,斷言不該該以任何方式改變程序的狀態。
八,GC是什麼? 爲何要有GC?
GC是垃圾收集器。Java 程序員不須要擔憂內存管理,由於垃圾收集器會自動進行管理。要請求垃圾收集,能夠調用下面的方 法之一:
System.gc()
Runtime.getRuntime().gc()
九,String s = new String("xyz");建立了幾個String Object?
兩個對象,一個是「xyx」;一個是指向「xyx」的引用對象s。
十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11
十一,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化爲short型。可修改成s1 =(short)(s1 + 1) 。 short s1 = 1; s1 += 1正確。
十二,sleep() 和 wait() 有什麼區別?
wait();不必定須要指定等待時間;釋放執行權的時候釋放鎖
sleep():必須指定等待時間;釋放執行權,可是不會釋放鎖;從運行狀態變爲臨時阻塞狀態
十三,Java有沒有goto?
有,做爲java的保留字存在
十四,數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。
String有length()這個方法。
十五,Overload(重載、過載)和Override(重寫、覆蓋)的區別。Overloaded的方法是否能夠改變返回值的類型?
重寫是父類與子類之間多態性的一種表現,重載是同一個類中多態性的一種表現。
override(重寫)是覆蓋了一個方法而且對其重寫,以求達到不一樣的做用。
overload(重載)它是指咱們能夠定義一些名稱相同的方法,經過定義不一樣的輸入參數來區分這些方法,而後再調用時,JVM就會根據不一樣的參數樣式,來選擇合適的方法執行。
Overload(重載)的方法是能夠改變返回值的類型。
十六,Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?
Set裏的元素是不能重複的,用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。
十七,給我一個你最多見到的runtime exception。
ArithmeticException,ArrayStoreException,BufferOverflowException,BufferUnderflowException,CannotRedoException,CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException, ImagingOpException,IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException,NoSuchElementException,NullPointerException,ProfileDataException,ProviderException,RasterFormatException,SecurityException,SystemException,UndeclaredThrowableException,UnmodifiableSetException, UnsupportedOperationException
十八,error和exception有什麼區別?
error 表示統錯誤或低層資源的錯誤,老是不可被控制的。好比說內存溢出。
exception 表示一種設計或實現問題。 程序員致使的錯誤,好比算數異常等。
我有一個扣扣羣,羣裏不按期分享技術乾貨,行業祕聞,聚集各種奇妙好玩的話題和流行動向!若是你喜歡個人分享,能夠用扣扣搜索650385180加羣關注。
十九,List, Set, Map是否繼承自Collection接口?
List,Set是
Map不是
二十,abstract class和interface有什麼區別?
接口中全部的方法隱含的都是抽象的。而抽象類則能夠同時包含抽象和非抽象的方法。 類能夠實現不少個接口,可是隻能繼承一個抽象類,類若是要實現一個接口,它必需要實現接口聲明的全部方法。可是,類能夠不實現抽象類聲明的全部方法,固然,在這種狀況下,類也必須得聲明成是抽象的。抽象類能夠在不提供接口方法實現的狀況下實現接口。
Java 接口中聲明的變量默認都是 final 的。抽象類能夠包含非 final 的變量。
Java 接口中的成員函數默認是 public 的。抽象類的成員函數能夠是 private,protected 或者是 public。接口是絕對抽象的,不能夠被實例化。抽象類也不能夠被實例化,可是,若是它包含 main 方法的話是能夠被調用的。
二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
都不能
二十二,接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
二十三,啓動一個線程是用run()仍是start()?
啓動線程使用start()方法。當用start()開始一個線程後,線程就進入就緒狀態,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。當cpu分配給它時間時,纔開始執行run()方法(若是有的話)。START()是方法,它調用RUN()方法.而RUN()方法是你必須重寫的. run()方法中包含的是線程的主體
二十四,構造器Constructor是否可被override(重寫)?
重寫是發生在父類與子類之間的事情,然而構造器Constructor不能被繼承,所以不能重寫,但能夠被重載
二十五,是否能夠繼承String類?
String類是final類故不能夠繼承。
public final class Stringextends Objectimplements Serializable, Comparable, CharSequence二十六,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
二十七,try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return 前仍是後?
會執行,在return前執行。
二十八,編程題: 用最有效率的方法算出2乘以8等於幾?
2 << 3
二十九,兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對?
不對,有相同的hashcode。
三十,當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞?
是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例做爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容能夠在被調用的方法中改變,但對象的引用是永遠不會改變的。
三十一,swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上?
switch(expr1)中,expr1是一個整數表達式。所以傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能做用於swtich。
三十二,編程題: 寫一個Singleton出來。
//惡漢式
class singeleton{
//1.私有化構造器,讓在這個類的外部類不能調用這個構造器
private singeleton(){
}
//二、建立這個類的對象,由於構造器被私有化,外部類是不能再 對這個類建立對象,因此只能本類本身建立對象
//由於這個對象是放在屬性的位置,因此能夠進行私有化,提供對外的方法,讓外部類經過方法來調用這個對象
private static singeleton instence=new singeleton();
//3.私有化此instance對象,經過公共的方法來調用
//4.此公共的方法,只能經過類來調用,由於設置爲static的,同時類的的實例也必須爲static
public static singeleton getSingeleton(){//返回類型是singeleton***********調用對象的只能是方法或者類,由於這個類中
//的對象被私有化,只能 是經過類來進行訪問,那麼就要對這個類進行靜態化static修飾
//這個方法的做用就是返回對象instence
return instence;
}
}
//懶漢式
class singeleton2{
private singeleton2(){
}
private static singeleton2 instence2=null;
public static singeleton2 getSingeleton(){
if(instence2!=null){
instence2=new singeleton2();
}
return instence2;
}
}
要朝這java程序員發展或者真心有興趣的。能夠找我要一些java的學習視頻java架構交流羣:650385180,這個是免費的,但願同窗找我要的時候不要有理所應當的態度,畢竟都是個人心血,但願你是真的有一顆想要學好java的心,我也會盡所能的去幫助你成爲一名優秀的程序員。
注:喜歡的朋友能夠點贊加關注,一塊兒學習進步