14章類型信息

1、初始化被延遲到了對靜態方法(構造器隱式地是靜態的)或者非常數靜態域進行首次引用時才執行
 01、static final int staticFinal = 47;這樣直接引用class就可以不用初始化,因爲這個是編譯期常量,這個值不需要對Initable類進行初始化就可以被讀取。

 02、 static final int staticFinal2 =ClassInitialization.rand.nextInt(1000);

這個是不確定的,所以要初始化後,才能引用(對於像這裏的staticFinal2進行訪問的時候,就會強制進行類的初始化,因爲它不是一個編譯期常量)

03、static int staticNonFinal = 74;這個不是final的,所以也是會有更改的可能,所以要等到對這個變量引用的時候,纔會初始化

總結:

如果一個static域不是final的,那麼在對它訪問時,要先進行鏈接(爲這個域分配存儲空間)和
初始化(初始化該存儲空間)

(如果一個域只設置爲static或者final的話,這不足以確保這種行爲)

2、class泛化知識要點:

01、Class<Integer> genericIntClass = int.class;
這個已經規定是Integer類型了,所以是限制死了,再給它賦予 genericIntClass = double.class;這個值的話,編譯就會出錯。

02、放鬆限制:
用通配符?像: Class<?> intClass2 = int.class;這樣的話就不會出錯了
然後還有如果要用T,Z什麼的做泛型的話,要在class就聲明T,然後成員變量和方法裏面就可以聲明用T了,但是成員變量和方法都要
不是static的,如果是static的話,那就會在編譯時出錯。例子:
public class GenericCla***eferences<T>{
private Class<T> classs;
private void test() {
// TODO Auto-generated method stub
 Class<T> to ;
}
}
這樣可以,
但是如果:
public class GenericCla***eferences<T>{
private static Class<T> classs;
public static void main(String[] args) {

   
      Class<T> intClass2 ;
     
      
  }
}
這樣就會報錯

03、Class<Number> genericNumber = Integer.class,像這樣的話,就會報錯
雖然Integer是Number的子類,但是我的理解是,在這裏就是不能向上轉型爲他的父類,所以編譯時就會報錯,解決方法是:
 Class<? extends Number> bounded = int.class;這樣寫就沒問題了

04、class Toy {
  // Comment out the following default constructor
  // to see NoSuchMethodError from (*1*)
  Toy() {}
  Toy(int i) {}
}
class FancyToy extends Toy
implements HasBatteries, Waterproof, Shoots {
  FancyToy() { super(1); }
}
如果是這樣的話就會報錯:
Class<Toy> up2 = ftClass.getSuperclass();
解決辦法:
 Class<? super FancyToy> up = ftClass.getSuperclass();
這樣就沒問題了哦
解釋:因爲getSuperclass()方法返回的是基類,它代表的不僅僅只是某個類,而是指FancyToy超類,並不是具體的某個類,所以正是這種含糊行,這裏的
Object obj = up.newInstance();纔會是object,不是那個具體類
具體比較

  Class<FancyToy> ftClass = FancyToy.class;
  FancyToy fancyToy = ftClass.newInstance();
這樣就不需要轉型了,直接就是這個對象
但是像這個的話,就要轉型:如下:
Class<? super FancyToy> up = ftClass.getSuperclass();
  Object obj = up.newInstance();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章