該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
java基礎知識點整理1.&和&&的區別?
&:邏輯與(and),運算符兩邊的表達式均為true時,整個結果才為true。
&&:短路與,如果第一個表達式為false時,第二個表達式就不會計算了。
2.在java中如何跳出當前的多重循環?
在循環語句外前面定義一個標號,然后在里層循環體的代碼中使用帶有標號的break語句,即可跳出循環。
比如:
ok:for (int i = 0; i < 10; i++) {{for (int j = 0; j < 10; j++) {break ok;}}}
3.最有效率的方法算出2X8等于幾?
使用位運算,效率最高:2<<3,表示2向右移動了3位,就相當于2乘以2的3次方,結果:16。
4.”==”和equals方法究竟有什么區別?
==:表示兩個變量的值是否相等,比較兩個基本數據類型的數據或者引用變量,用==。
equals:用于比較兩個獨立對象的內容是否相同。字符串的比較也用equals。
5. Int和integer的區別?
Int是Java的8中基本數據類型之一,integer是int的封裝類。Int類型的默認值為0,integer默認值為null,所以區別在于,integer能區分出null值和0的區別。
6.三個與取整有關的方法:
Math.ceil():表示向上取整;Math.ceil(11.3)=12;Math.ceil(-11.3)=-12。
Math.floor():表示向下取整;Math.floor(11.6)=12;Math.floor(-11.6)=-12。
Math.round():表示四舍五入;Math.round(11.5)=12;Math.round(-11.5)=-11;
Marh.round(11.3)=11;Math.round(-11.3)=--11;
7.重載和重寫的區別?
重載(Overload):函數名相同,參數不同。可以改變返回值類型,參數的個數和類型。
重寫(Override):和父類的的方法名稱、參數完全相同。
8.面向對象的特征?
封裝:將對象屬性和方法的代碼封裝到一個模塊中,也就是一個類中,保證軟件內部具有優良的模塊性的基礎,實現“高內聚,低耦合”。
抽象:找出一些事物的相似和共性之處,然后歸為一個類,該類只考慮事物的相似和共性之處。抽象包括行為抽象和狀態抽象。
繼承:在已經存在的類的基礎上進行,將其定義的內容作為自己的內容,并可以加入新的內容或者修改原來的方法適合特殊的需要。
多態:同一操作作用于不同的對象,可以有不同的解釋,產生不同的執行結果,就是多態,簡單點說:就是用父類的引用指向子類的對象。目的:提高代碼復用性,解決項目中緊耦合問題,提高可擴展性。
多態的機制:靠的是父類的或者接口的引用變量可以指向子類或者具體實現類的實例對象。
9.String和StringBuffuer、StringBuilder的區別?
String:字符串數值不可變;
StringBuffer:字符串可修改,可以動態構造字符數據。StringBuffer類是可以通過Append()來修改值。線程安全。
StringBuilder:線程不安全。
三者在執行速度方面的比較:StringBuilder > StringBuffer > String
對于三者使用的總結:
1.如果要操作少量的數據用 = String
2.單線程操作字符串緩沖區下操作大量數據 = StringBuilder
3.多線程操作字符串緩沖區下操作大量數據 = StringBuffer
10.java中有幾種方法實現一個線程?用什么關鍵字修飾同步方法?stop()和suspend()方法為何不推薦使用?
第一種:繼承Thread類。New Thread(){}.start():表示調用子類對象的run方法。
第二種:實現Runable接口。
第三種:線程池創建多線程。
第四種:實現Callable接口,重寫call函數(
繼承Thread類實現多線程,重寫run方法時沒有返回值也不能拋出異常,使用Callable接口就可以解決這個問題。
Callable接口和Runnable接口的不同之處:
1.Callable規定的方法是call,而Runnable是run
2.call方法可以拋出異常,但是run方法不行
3.Callable對象執行后可以有返回值,運行Callable任務可以得到一個Future對象,通過Future對象可以了解任務執行情況,可以取消任務的執行,而Runnable不可有返回值
)
用synchronized 關鍵字修飾同步方法。
反對使用stop(),是因為它不安全。它會解除由線程獲取的所有鎖定,而且如果對象處于一種不連貫狀態,那么其他線程能在那種狀態下檢查和修改它們,結果很難檢查出真正的問題所在。
suspend() 方法容易發生死鎖。調用 suspend() 的時候,目標線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定的資源,除非被" 掛起"的線程恢復運行。對任何線程來說,如果它們想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應該使用 suspend() ,而應在自己的 Thread 類中置入一個標志,指出線程應該活動還是掛起。若標志指出線程應該掛起,便用 wait() 命其進入等待狀態。若標志指出線程應當恢復,則用一個 notify()重新啟動線程。
11.sleep()和wait()有什么區別?
sleep是線程被調用時,占著cpu休眠,其他線程不能占用cpu,os認為該線程正在工作,不會讓出系統資源,wait是進入等待池等待,讓出系統資源,其他線程可以占用cpu。
sleep()和wait()方法的區別可從兩個角度闡述:
1.cpu的搶占權;2.鎖旗標是否釋放
兩者都會釋放cpu的搶占權;
wait()方法執行完即可釋放鎖旗標,進入線程的等待隊列;
sleep()執行完,不會釋放,進入等待隊列;
12. 同步和異步的區別?同步的實現方法?
同步:發送一個請求,等待返回,然后再發送下一個請求。實現:1. Synchronized修飾;2.wait和notify。
異步:發送一個請求,不等待返回,隨時可以再發送下一個請求。
同步可以避免出現死鎖,讀臟數據的發生,一般共享某一資源的時候用,如果每個人都有修改權限,同時修改一個文件,有可能使一個人讀取另一個人已經刪除的內容,就會出錯,同步就會按順序來修改。
同步和異步最大的區別就在于,一個需要等待,一個不需要等待。
比如廣播,就是一個異步例子。發起者不關心接收者的狀態。不需要等待接收者的返回信息。
電話,就是一個同步例子。發起者需要等待接收者,接通電話后,通信才開始。需要等待接收者的返回信息。
13. 請對比synchronized與java.util.concurrent.locks.Lock的異同?
主要相同點:Lock能完成synchronized所實現的所有功能
主要不同點:Lock有比synchronized更精確的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。