java 变量分类
轉:https://blog.csdn.net/suneqing/article/details/37909811?
1、按被聲明的位置劃分
局部變量:方法和語句塊內定義的的變量。(在定義局部變量時,必須對其進行初始化。)
成員變量:方法外部,類的內部定義的變量。(成員變量可以是java語言中任何一種數據類型(包括基本類型和引用類型))
類由成員變量和成員方法構成。而成員變量又分為實例變量和類變量(被static修飾的變量)。
使用static修飾的成員變量是類變量,屬于該類本身;沒有使用static修飾的成員變量是實例變量,屬于該類的實例。
在同一個JVM內,每個類只對應一個Class對象,但每個類可以創建多個Java對象。
由于同一個JVM內每個類只對應一個Class對象,因此同一個JVM內的一個類的類變量只需一塊內存空間;但對于實例變量而言,該類每創建一次實例,就需要為實例變量分配一塊內存空間。也就是說,程序中有幾個實例,實例變量就需要幾塊內存空間。
2、按所屬的數據類型劃分
基本數據類型
內存分析。
例如'int i=0;',在內存中只分配一個空間,名字是i,里面的值是0。只要使用了i這個名字就能找到其中的值。
引用數據類型:java中的對象是通過對其引用進行操作的。
內存分析:引用類型占兩塊內存,引用變量占一塊,new出來的對象占一塊內存。
例如:
聲明一個string類型的引用變量,但并沒有指向一個對象。這時候它在內存中占一塊內存。
String s;
使用new創建一個string類型對象,并通過s指向它,通過s對其進行操作。
s=new String("hello world");
?
?
總之,如果按照聲明位置劃分的變量類型中,局部變量聲明后必須要賦值以后才能使用;而成員變量聲明后可以不賦值,系統有默認值。
如果按所屬的數據類型劃分,基本類型數據只占用內存中的一塊內存;而引用類型占用的是兩塊內存,根據引用變量就可以在堆內存中找到它指向的對象。
3、例子
- 1、對象主要存放在堆內存中;方法和屬性主要存放在棧內存中。?
- 2、棧是運行時單位,用來解決程序運行時的問題,堆是存儲單位,解決數據存儲的問題。?
- 3、堆伴隨著JVM的啟動而創建。
?
?
轉載于:https://www.cnblogs.com/amunamuna/p/10703371.html
總結
- 上一篇: 快读代码
- 下一篇: 第五章 循环结构课后反思