1. 程式人生 > >容易混淆的java知識點

容易混淆的java知識點

    學校學的知識因為不理解,所以我一直處於一知半解的狀態。現在在閒暇之餘,抽空看一下基礎內容,獲益匪淺。首先說一下java語言涉及最多的單詞class,class是一種型別,指的是“類”,就像超類 public class object{},所以不明白class和object區別的我,現在終於能夠理解了。

    之後再說一下模糊不清的一些概念,interface是什麼?是繼承於object嗎?我去網上查了一下資料,包括別人的一些描述,總共有2個觀點:

1、介面繼承於object

      介面繼承了Object類,在.class檔案中的super_class標誌中可以看到,另外《深入java虛擬機器》第二版以及《The Java Virtual Machine Specification》second edition中有說到

2、介面是介面,類是類。

      "介面隱含定義了一套與Object類中的方法簽名完全相同的方法,所以,我們在程式中呼叫介面的那些與Object中具有相同簽名的方法時,編譯器不會報錯!"

       我個人傾向於更容易理解的第二種,可能也是受類宣告方式不一樣的影響:interface **{}   class **{}

      除了這些平時只靠死記硬背,沒有深入瞭解的東西外,還有諸如泛型之類的:

      T 和object的區別:T指的是具體的一種class類,而object則可以容納所有型別的類。如同:List<T>和List<object>,2者中T可以為某一特定類,而object則涵蓋了所有類。如下:

       public static void main(String args[]){

        List<object> list= new  ArrayList<Object>();

          int i=0;

         String s="String";

          list.add(i);

          list.add(s);

        }

        List本身是個泛型類,現在我們指定它接收Object型別的引數,此時就可以放置任意型別的引數進去,而在取出來是就必須得進行強制型別轉換成具體的型別。

         現在我們如果將List指定接收String型別的引數,那麼這個List就只能放置String型別,且取出來時就不用進行強制型別轉換。而T就相當於這裡的String。


         其次比較容易模糊的是class<? extends **>**類以及 class<?>在這裡?是一個佔位符的作用,當沒有後面的“extends **”時,他指代的是任意一種類,可以是object類,也可以是其他類包括其他介面。具體的話希望大家可以看一下http://blog.csdn.net/jitianxia68/article/details/73610606,這篇部落格寫的很清楚。

          還有大家需要明白一點。T代表的是**.class。而如果將其作為返回型別,則應該返回的是**型別。例如:T如果代表的是int.class,那麼其返回的型別為int。還有就是int.class和integer.class不是一樣的,因為integer是int的封裝型別,2者並不等同。