Java 中的變量類型
1、局部變量
在方法或語句塊中定義的變量被稱為局部變量。變量聲明和初始化都是在方法中,方法結(jié)束后,變量就會(huì)自動(dòng)銷毀。
- 局部變量聲明在方法、構(gòu)造方法或者語句塊中;
- 局部變量在方法、構(gòu)造方法、或者語句塊被執(zhí)行的時(shí)候創(chuàng)建,當(dāng)它們執(zhí)行完成后,變量將會(huì)被銷毀;
- 訪問修飾符不能用于局部變量;
- 局部變量只在聲明它的方法、構(gòu)造方法或者語句塊中可見;
- 局部變量是在棧上分配的。
- 局部變量沒有默認(rèn)值,所以局部變量被聲明后,必須經(jīng)過初始化,才可以使用。
2、成員變量(實(shí)例變量)
成員變量是定義在類中,方法體之外的變量。這種變量在創(chuàng)建對(duì)象的時(shí)候?qū)嵗3蓡T變量可以被類中方法、構(gòu)造方法和特定類的語句塊訪問。
- 實(shí)例變量聲明在一個(gè)類中,但在方法、構(gòu)造方法和語句塊之外;
- 當(dāng)一個(gè)對(duì)象被實(shí)例化之后,每個(gè)實(shí)例變量的值就跟著確定;
- 實(shí)例變量在對(duì)象創(chuàng)建的時(shí)候創(chuàng)建,在對(duì)象被銷毀的時(shí)候銷毀;
- 實(shí)例變量的值應(yīng)該至少被一個(gè)方法、構(gòu)造方法或者語句塊引用,使得外部能夠通過這些方式獲取實(shí)例變量信息;
- 實(shí)例變量可以聲明在使用前或者使用后;
- 訪問修飾符可以修飾實(shí)例變量;
- 實(shí)例變量對(duì)于類中的方法、構(gòu)造方法或者語句塊是可見的。一般情況下應(yīng)該把實(shí)例變量設(shè)為私有。通過使用訪問修飾符可以使實(shí)例變量對(duì)子類可見;
- 實(shí)例變量具有默認(rèn)值。數(shù)值型變量的默認(rèn)值是0,布爾型變量的默認(rèn)值是
false,引用類型變量的默認(rèn)值是null。變量的值可以在聲明時(shí)指定,也可以在構(gòu)造方法中指定; - 實(shí)例變量可以直接通過變量名訪問。但在靜態(tài)方法以及其他類中,就應(yīng)該使用完全限定名:
ObejectReference.VariableName。
3、類變量
類變量也聲明在類中,方法體之外,但必須聲明為 static 類型。
- 類變量也稱為靜態(tài)變量,在類中以
static關(guān)鍵字聲明,但必須在方法之外。 - 無論一個(gè)類創(chuàng)建了多少個(gè)對(duì)象,類只擁有類變量的一份拷貝。
- 靜態(tài)變量除了被聲明為常量外很少使用。常量是指聲明為
public/private,final和static類型的變量。常量初始化后不可改變。 - 靜態(tài)變量?jī)?chǔ)存在靜態(tài)存儲(chǔ)區(qū)。經(jīng)常被聲明為常量,很少單獨(dú)使用
static聲明變量。 - 靜態(tài)變量在第一次被訪問時(shí)創(chuàng)建,在程序結(jié)束時(shí)銷毀。
- 與實(shí)例變量具有相似的可見性。但為了對(duì)類的使用者可見,大多數(shù)靜態(tài)變量聲明為
public類型。 - 默認(rèn)值和實(shí)例變量相似。數(shù)值型變量默認(rèn)值是 0,布爾型默認(rèn)值是
false,引用類型默認(rèn)值是null。變量的值可以在聲明的時(shí)候指定,也可以在構(gòu)造方法中指定。此外,靜態(tài)變量還可以在靜態(tài)語句塊中初始化。 - 靜態(tài)變量可以通過:
ClassName.VariableName的方式訪問。 - 類變量被聲明
為 public static final類型時(shí),類變量名稱一般建議使用大寫字母。如果靜態(tài)變量不是public和final類型,其命名方式與實(shí)例變量以及局部變量的命名方式一致。
關(guān)于 類變量 的說明:
The static keyword in Java is used for memory management mainly. We can apply java static keyword with variables, methods, blocks and nested class. The static keyword belongs to the class than an instance of the class. The static can be: Variable (also known as a class variable) Method (also known as a class method) Block.
(翻譯)
Java 中的 static 關(guān)鍵字主要用于 內(nèi)存管理(就是用了這個(gè)會(huì)安排出內(nèi)存空間來,供類的實(shí)例之間共享某個(gè)量)。我們可以將 java 的 static 關(guān)鍵字施用于變量、方法、語句塊和嵌套類。static 定義的對(duì)象是屬于整個(gè)類的, 而不是某個(gè)類的實(shí)例。
普通的變量屬于類的某一個(gè)特定的實(shí)例,但用 static 關(guān)鍵字修飾的變量將屬于一個(gè)類。也就是說,我們通過類的某一個(gè)實(shí)例去修改一個(gè)一般的變量值,將只有這個(gè)實(shí)例中的值被修改,其他實(shí)例不受影響;而若是修改一個(gè) static 關(guān)鍵字修飾的類變量,這個(gè)類的所有實(shí)例的這個(gè)值都會(huì)被修改。
說起來比較麻煩,可以看一段示例代碼:
public class Static {
public static void main(String[] args) {
Example foo = new Example();
Example bar = new Example();
foo.staticVar = foo.normalVar = "foobar";
System.out.println(foo.staticVar + "\t" + foo.normalVar);
System.out.println(bar.staticVar + "\t" + bar.normalVar);
}
}
class Example {
static String staticVar = "Example";
String normalVar = "Example";
}
輸出:
foobar foobar foobar Example
可以看到,我們只改變了 foo 實(shí)例的值,但由 static 修飾的類變量 staticVar 的改變?cè)?bar 中也出現(xiàn)了,而普通的成員變量則不然。
利用這種特性,我們可以實(shí)現(xiàn)一種可以統(tǒng)計(jì)自己的實(shí)例個(gè)數(shù)的類,
例如:
public class CountingClass {
public static void main(String[] args) {
Counter a = new Counter();
Counter b = new Counter();
Counter c = new Counter();
System.out.println("Total Counters: " + a.total + " == " + b.total + " == " + c.total);
}
}
class Counter { // 自計(jì)數(shù)類
static int total = 0;
public Counter() {
total++;
System.out.println("第 " + total + " 個(gè) Counter 被構(gòu)造。");
}
}
到此這篇關(guān)于Java 中的變量類型的文章就介紹到這了,更多相關(guān)Java 變量類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
啟動(dòng)Tomcat時(shí)出現(xiàn)大量亂碼的解決方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著啟動(dòng)Tomcat時(shí)出現(xiàn)大量亂碼的解決方法展開,文中有非常詳細(xì)的介紹及圖文示例,需要的朋友可以參考下2021-06-06
Mybatis #foreach中相同的變量名導(dǎo)致值覆蓋的問題解決
本文主要介紹了Mybatis #foreach中相同的變量名導(dǎo)致值覆蓋的問題解決,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
Mybatis的parameterType造成線程阻塞問題分析
這篇文章主要詳細(xì)分析了Mybatis的parameterType造成線程阻塞問題,文中有詳細(xì)的解決方法,及相關(guān)的代碼示例,具有一定的參考價(jià)值,感興趣的朋友可以借鑒閱讀2023-06-06

