1. 程式人生 > >java靜態方法,靜態初始化塊及靜態變數的宣告和初始化不能使用泛型的原因

java靜態方法,靜態初始化塊及靜態變數的宣告和初始化不能使用泛型的原因

最近學習到了Java中的泛型,對於靜態方法,靜態初始化塊及靜態變數的宣告和初始化不能使用泛型的原因做了一個彙總:

1。因為泛型是要在物件建立的時候才知道是什麼型別的,而物件建立的程式碼執行先後順序是static的部分,然後才是建構函式等等。所以在物件初始化之前static的部分已經執行了,如果你在靜態部分引用的泛型,那麼毫無疑問虛擬機器根本不知道是什麼東西,因為這個時候類還沒有初始化。因此在靜態方法、資料域或初始化語句中,為了類而引用泛型型別引數是非法的

2.這個原理是這樣的,靜態方法中所能引用的屬性必須是靜態的,而引用引數是無法宣告為靜態的,因為靜態的屬性必須在宣告時赴值或者例項化,泛型引用變數在宣告的時候根本不知道是什麼型別,自然不可能例項化,當然也不能放進靜態方法了。