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