java遇見的問題分析
下面就一些java的一些基本問題進行解釋。其中藍色部分為handsomecui的主觀看法
synchronized的參數代表的是“對象鎖”代表的是不同的線程在synchronized塊裏,
同時只有一個線程能執行該代碼塊,而類的不同實例之間是互不影響的。
比如Person A = new Person(),Person B = new Person().A和B之間是不受synchronized制約的。
有三種方式可以用來創建線程:
1.繼承Thread類
2.實現Runnable接口
3.應用程序可以使用Executor框架來創建線程池
三. ”static”關鍵字是什麽意思?Java中是否可以覆蓋(override)一個private或者是static的方法?
“static”關鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的實例變量的情況下被訪問。
Java中static方法不能被覆蓋,因為方法覆蓋是基於運行時動態綁定的,而static方法是編譯時靜態綁定的。
static方法跟類的任何實例都不相關,所以概念上不適用。
四.是否可以在static環境中訪問非static變量?
static變量在Java中是屬於類的,它在所有的實例中的值是一樣的。
當類被Java虛擬機載入的時候,會對static變量進行初始化
如果你的代碼嘗試不用實例來訪問非static的變量,編譯器會報錯,因為這些變量還沒有被創建出來,還沒有跟任何實例關聯上。
(註意,非static變量是實例化後才被創建,而static變量是類創建時就被創建)
五.
int 是基本數據類型
Integer是其包裝類,註意是一個類。
為什麽要提供包裝類呢???
1.為了在各種類型間轉化,通過各種方法的調用。否則 你無法直接通過變量轉化。例如int x = Integer.valueOf("66");
2.泛型 List<Integer> nums;
這裏<>需要類,要用Integer
六.Java中intValue,parseInt,Valueof 這三個關鍵字的區別?
int a = Integer.parseInt("123");(相當於把“123”轉化為基本數據)
Integer b = Integer.valueOf("123");(相當於把“123”轉化為一個Integer對象)
int c = b.intValue();(將123的對象表示形式轉化為基本數據123)
也就是 Integer.valueOf("123").intValue() 等價於 Integer.parseInt("123")
七.java不支持多繼承,但可以實現多個接口。
八.synchronized用在方法上級別是粗粒度鎖,用在代碼塊上是細粒度鎖。
九.Java集合類框架的基本接口有哪些?
- Collection:代表一組對象,每一個對象都是它的子元素。
- Set:不包含重復元素的Collection。
- List:有順序的collection,並且可以包含重復元素。
- Map:可以把鍵(key)映射到值(value)的對象,鍵不能重復。
ArrayList和 LinkedList 實現了List接口,HashSet實現了Set接口,這幾個都比較常用;
HashMap 和HashTable實現了Map接口,並且HashTable是線程安全的,但是HashMap性能更好
java.util.Collection [I]
|—java.util.List [I]
|—java.util.ArrayList [C]
|—java.util.LinkedList [C]
|—java.util.Vector [C]
|—java.util.Stack [C]
|—java.util.Set [I]
|—java.util.HashSet [C]
|—java.util.SortedSet [I]
|—java.util.TreeSet [C]
java.util.Map [I]
|—java.util.SortedMap [I]
|—java.util.TreeMap [C]
|—java.util.Hashtable [C]
|—java.util.HashMap [C]
|—java.util.LinkedHashMap [C]
|—java.util.WeakHashMap [C]
java遇見的問題分析