1、面向物件與面向程序的區別?
面向程序的語言擁有封裝、繼承、多型的特性,使得整個代碼靈活性高,比如Java,C++,容易維護,容易擴展,
面向程序的語言直接跟記憶體打交道,性能要更好,比如java是需要跟虛擬機做互動,先編譯解釋成機器碼,再跟作業系統打交道,大多數面向程序的語言基本都是直接編譯成機器碼在作業系統上進行執行,所以性能更好,
但是java經過多年的發展,性能提升了很大,各位讀者要記住java yyds!
2、成員變數和區域變數的區別
與c++不同的是java中沒有全域變數的概念,
成員變數:也稱為類變數,是定義在類中的變數,
區域變數:是定義在形參,或者是方法體內,或者是代碼快中的變數,
**注意:靜態代碼塊中只能給靜態變數賦值
關于靜態方法,靜態變數的內容可以參考文章
https://blog.csdn.net/xxlovect/article/details/7455813
接上:關于成員變數與區域變數的賦值問題
如果一個變數被定義為static那么他就被稱之為靜態成員變數,簡稱為靜態變數,如果是static,finnal修飾那么就稱之為全域常量,
對于finnal修飾的變數,是在編譯的時候就分配記憶體,對于其初始化,是在類加載程序中的鏈接環節里面的準備環節進行賦值,對于區域變數,系統不會為其分配初始值,除了final修飾的變數,其他變數是在鏈接階段的準備環節進行默認賦值,在類加載程序中的初始化程序完成顯式賦值,
對于類加載程序,博主會在后續更新一些jvm的知識總結,可以關注博主,



3、 關于try-catch-finanl
IDEA中可以使用快捷鍵Alt+Shift+Z 來對一塊代碼進行例外處理,
try模塊用來捕獲例外,catch模塊處理例外,finally模塊中的代碼不管什么情況下都會執行(在正常捕獲例外的情況下,或者沒有例外的情況下),
如果finnal中的代碼不執行一定是做了一下三件事:
- 在 try 或 finally 塊中用了 System.exit(int)退出程式,但是,如果 System.exit(int) 在例外陳述句之后,finally 還是會被執行,
- 執行緒死亡
- cpu死亡(close CPU)
4、在多執行緒中,執行緒的sleep(),yield(),wait(),join()有什么區別?
Thread.sleep():此方法使執行緒進入阻塞狀態*,讓cpu交出執行權,但是不會釋放鎖,
Thread.yield():此方法使執行緒進入可運行狀態,讓cpu交出執行權,同樣不會釋放鎖,
Thread.wait():使執行緒從運行狀態轉為阻塞狀態,釋放執行緒的同步鎖
Thread.join():此方法可以保證一個執行緒在Thread執行緒執行前結束(優先級大于自己的執行緒),
5、推薦將陣列轉化為Arraylist的方式

圖片來源:https://gitee.com/SnailClimb/JavaGuide/blob/master/docs/java/basis/Java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%96%91%E9%9A%BE%E7%82%B9.md
6 遍歷集合的方式
- 使用foreach
- 使用迭代器
- 使用用法如下圖

在foreach中不能使用remove來移除元素,在迭代器方式中可以,
原理:如果要進行remove操作,可以呼叫迭代器的 remove 方法而不是集合類的 remove 方法,因為如果串列在任何時間從結構上修改創建迭代器之后,以任何方式除非通過迭代器自身remove/add方法,迭代器都將拋出一個ConcurrentModificationException,這就是單執行緒狀態下產生的 fail-fast 機制,
fail-fast 機制 :多個執行緒對 fail-fast 集合進行修改的時,可能會拋出ConcurrentModificationException,單執行緒下也會出現這種情況,上面已經提到過,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/275453.html
標籤:java
上一篇:框架的靈魂之注解基礎篇
