basic java-1

1.JDK1.5+的基本類型自動裝箱拆箱
Integer i1=10;
Integer i2=10;

他們產生的是同一個對象,那下面這個呢?
Integer i1=138;
Integer i2=138;

產生兩個不同的對象,這是爲什麼呢?小於一個字節(-128~127)的數,java虛擬機會將這個對象放在緩存中,創建下一個對象是先去找是否已經存在這個對象。其實這裏蘊含了一種設計模式-->flyweight(享元模式)-->將相同的屬性作爲對象的內部屬性,不相同的屬性作爲方法的外部參數傳進來

2.枚舉
-->枚舉可以有自己的構造方法(必須是private的)
-->枚舉的任何一個子類都可以使用枚舉類的帶參構造方法創建對象,參見以下枚舉類(包含枚舉構造方法,抽象類...)

public enum TrafficLamp{
RED(30){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN;
}
},GREEN(45){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}
},YELLOW(5){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time) {
this.time = time;
}
}


3.反射(方法)的一個小例子
String habi="abcdefg"
Method charAt=Class.forName("java.lang.String").getMethod("charAt",int.class);
System.out.println(charAt.invoke(gabi,2));

運行結果: c
當invoke的第一個參數爲null的時候,說明是不需要對象就可以執行的方法,什麼方法呢?當然是靜態方法,很容易理解。

4.當一個對象存到HashSet中時,不要修改那些用於計算hashCode的字段。爲什麼?先要弄清楚HashSet的存儲原理-->先把內存劃爲一塊塊的區域,然後根據對象的hashCode將對象存儲了對應的區域中。這樣,如果修改計算hashCode的字段,對象的hashCode就變化了,後面你如果再想刪除這個對象時就刪除不了了。這樣就會出現內存泄露(變向說明java是有內存泄露的)。

5.利用反射,可以判斷一個對象是否是數組或者其他類型:object.getClass().isArray()。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章