從0開始學java-變量

本篇是java的開篇之做。java

下面是引用蔡學鏞的一篇文章數組

         根據聲明方式來爲變量分類
             
根據聲明方式詳細來區分,Java的變量有七種,下面的程序代碼展現了這七種變量的聲明方式:
                 Class Myclass {
                        static int a;
                        int b;
                        public static void myMethod(int c)  {
                              try {
                        int d;
                              } catch(Exception e) {
                           }
                   }
                    MyClass(int f) {
                        int[]g = new int[100];
                        }
                     }
         class variable:聲明在class內,method以外,且使用static修飾的變量,例如上面程序代碼的a.
         
instance variable:聲明在class內,method以外,且未使用static修飾的變量,例如上面程序的b.
         
method parameter:聲明在method小括號內的變量,例如上面程序代碼的c.
         
狹義的局部變量(local variable):聲明在method內的變量,例如上面程序代碼的d和g.
         
exception-handler parameter:聲明在catch小括號內的變量,例如上面程序代碼的e.
        
 constructor parameter:聲明在constructor小括號內的變量,例如上面程序代碼的f.
         
數組元素(array element):數組的元素值沒有識別名稱,必須透過數組和索引值(index)來識別.例如上面
                                                 程序代碼的g[0].
         
         
根據變量內存來分類
             根據變量內存位置來區分,Java的變量有兩種,包括了:
          heap variable:佔用的內存在heap中,這類變量包括了class variable,instance variable,array component,
          即前面程序的a,b,g[0].這類變量會自動被JVM初始化默認值.
          stack variable:一般廣義的局部變量(pan-local variable),其佔的內存在stack中,這類變量包括了狹義的
          局部變量,method parameter,exception-handler parameter,constructor parameter,即前面程序 的c,d,e,f.狹義   的局部變量不會被JVM初始化成默認值,使用者必須自行初始化該變量,可是parameter類(包括method parameter,exception-handler parameter,constructor parameter)會被JVM初始化成傳入值.
       
根據使用方式來爲變量分類
            根據使用方式,只要分三類便可,分別是:
        class variable:即上例的a.
        instance variable:即上例的b.
        廣義的局部變量:包含上例的c,d,e,f.這四者的差異很小,直接歸爲一類.
        至 於"數組元素"(array component)則不在此三類中,可是"數組元素"並不常被注意到,爲它多分出一類的用處不大.我一般將數組視爲對象,將array component視爲對象的instance variable.   <蔡學鏞>
ide

下面是<<thinking in java>>裏關於變量概念的介紹:google

變量分爲:primitive type和reference type.指針

  • primitive type包括:numeric Type和boolean
  1. Numeric Type包括:IntegralType 和FloationgPoint Type。
  2. Integal Type:byte short int long char
  3. FloatingPointType: float double
  • reference type包括:class types,interface types,array types

 

primitive type是存儲在堆棧裏,reference type存儲在堆裏component

看到這裏,你可能開始有疑問了,這明明就是矛盾的嘛,蔡文章裏面提到的a是int類型的,它卻在堆裏。用google查了一下,發現說什麼的都有,到底誰說的纔是正理呢?下面就來重點討論一下java裏面各類類型在內存裏面的存儲狀況。對象

首先須要明確的是:基本類型直接存儲了實際的數值;應用類型例如(String a),a實際上是一個引用,它存儲的是指向實際內容的一個指針(實際內容開頭的物理地址)索引

相關文章
相關標籤/搜索