本文章嘗試著為變數的種類做一個總整理,以期讓讀者能充分掌握每一種變數的特性。
根據宣告方式來為變數分類
根據宣告方式詳細來區分,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 component):陣列的元素值沒有識別名稱,必須透過陣列和索引值(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。
分享到:
相关推荐
1.程序与香鸡排 2.再论香鸡排 3.完结篇(数据修订版)
蔡学镛 现任 梦工厂首席技术总监兼框架师Java夜未眠
蔡学镛软件架构入门
蔡学镛在平安科技上课时的课件
蔡学镛的关于java的文章,不错哦!!
思考函数式编程_蔡学镛.pdf
2012中国软件开发者大会(SDCC2012)的第五场分论坛“编程语言”中,创新工场首席架构师蔡学镛做了题为“认识Google Dart语言”的演讲,深入浅出地帮助研发人员建立了对于Dart的基本了解和判断,并对“Dart是进可攻...
第五期 蔡学镛软件架构入门第二场 蔡学镛.pptx
蔡老师的ppt做得很好看很直观。这种风格值得学习。
传播一下蔡大神的方法,挺不错的:架构设计时,复杂度太高,会导致设计难以进行。最好先简化再逐步累加,且重要的⼦子系统先设计随著业务持续累积,架构会老化。这时首席架构师要发起重构
《Java夜未眠》,台湾著名程序员 蔡学镛 著,Java工程师不可不看的作品。
软件架构入门培训资料,强烈推荐
很不错的PPT制作指导,看了后多多少少会有些感觉
CSDN2.0大会资料,ScriptableAndDsl_蔡学镛.pdf
现在是IT的时代,工作与生活都离不开IT。许多人都想了解软件原理,甚至编写一些简单的软件。通过《编程ING:人人都能学会程序设计》一书,你就能拥有这样的能力,甚至培养出对编程的兴趣。 本书在编写上采用了心理学...
中学生编程(蔡学镛),用redlang编程
蔡明哲-互联网产品原型设计与用户体验
蔡舒起-笔试答案-结合面试1
10-2019051095-蔡佳宏-网络地址转换1