1. 程式人生 > >Java三大變數分別是類變數、例項變數和區域性變數

Java三大變數分別是類變數、例項變數和區域性變數

一、什麼是變數:就是內容可以改變的量,它與常量相對應。而這三大變數實際上是從變數的作用域來定義和劃分的。
1、類變數,是歸屬類的變數,它是通過在定義類的屬性的時,增加static修飾符,所以又稱為靜態變數。類變數不僅可以直接通過類名+點操作符+變數名來操作,也可以通過類的例項+點操作符+變數來操作,大多數情況下,採用前者操作方式,一來不能夠有效地使用該變數,二來能夠表示該變數就是類變數。
2、例項變數,是歸屬於類的例項的變數,又稱為成員變數,沒有經過static修飾。例項變數只能通過類名的例項+點操作符+變數來操作。
不管是類變數,還是例項變數,都可以設定Java的訪問修飾符,若是需要公開操作,你可以在這些變數前面新增public訪問許可權;若是隻限於所在類中操作,你可以在這些變數前面新增private訪問許可權。
3、區域性變數就是在類中方法體裡面所定義的變數,不管是方法的形參,還是方法體內所定義的變數都是區域性變數。區域性變數的作用域是以其所在方法體的頭大括號開始到尾大括號結束。
4、變數名首寫字母使用小寫,如果由多個單片語成,從第2個單詞開始的其他單詞的首寫字母使用大寫。如果區域性變數的名字和成員變數的名字相同,要想在該方法中使用成員變數,必須使用關鍵字this
列如:
圖片描述


執行結果為:
第一個輸出:類體方法中定義的name
第二個輸出:類體定義變數:name 成員變數呼叫必須用到this關鍵字
二、成員變數和區域性變數的區別
成員變數:
1、成員變數定義在類中,在整個類中都可以被訪問。
2、成員變數隨著物件的建立而建立,隨著物件的消失而消失,存在於物件所在的堆記憶體中。
3、成員變數有預設初始化值。
區域性變數:
1、區域性變數只定義在區域性範圍內,如:函式內,語句內等,只在所屬的區域有效。
2、區域性變數存在於棧記憶體中,作用的範圍結束,變數空間會自動釋放。
3、區域性變數沒有預設初始化值
在使用變數時需要遵循的原則為:就近原則
首先在區域性範圍找,有就使用;接著在成員位置找。
成員變數和類變數的區別
圖片描述

由static修飾的變數稱為靜態變數,其實質上就是一個全域性變數。如果某個內容是被所有物件所共享,那麼該內容就應該用靜態修飾;沒有被靜態修飾的內容,其實是屬於物件的特殊描述。
不同的物件的例項變數將被分配不同的記憶體空間, 如果類中的成員變數有類變數,那麼所有物件的這個類變數都分配給相同的一處記憶體,改變其中一個物件的這個類變數會影響其他物件的這個類變數,也就是說物件共享類變數。
[java] view plain copy print?
class MyAdd {
int count = 0; //成員變數計數器
static int sum = 0; //靜態變數計數器
String name;
MyAdd(String name){
this.name = name;
}
public void myAddMethod() {
count++;
System.out.println(name+”呼叫成員變數後的值:”+count);
}
public void staticAddMethod() {
sum++;
System.out.println(name+”呼叫類後變數的值:”+sum);
}
}
public class TestThis {
public static void main(String[] args) {
MyAdd add1 = new MyAdd(“add1”);
MyAdd add2 = new MyAdd(“add2”);
add1.myAddMethod();
add2.myAddMethod();
add1.myAddMethod();
add1.staticAddMethod();
add2.staticAddMethod();
add1.staticAddMethod();
}
}
class MyAdd {
輸出結果:
圖片描述

成員變數和類變數的區別:
1、兩個變數的生命週期不同
成員變數隨著物件的建立而存在,隨著物件的回收而釋放。
靜態變數隨著類的載入而存在,隨著類的消失而消失。
2、呼叫方式不同
成員變數只能被物件呼叫。
靜態變數可以被物件呼叫,還可以被類名呼叫。
3、別名不同
成員變數也稱為例項變數。
靜態變數也稱為類變數。
4、資料儲存位置不同
成員變數儲存在堆記憶體的物件中,所以也叫物件的特有資料。
靜態變數資料儲存在方法區(共享資料區)的靜態區,所以也叫物件的共享資料。
static:★★★ 關鍵字,是一個修飾符,用於修飾成員(成員變數和成員函式)。
特點:
1、想要實現物件中的共性資料的物件共享。可以將這個資料進行靜態修飾。
2、被靜態修飾的成員,可以直接被類名所呼叫。也就是說,靜態的成員多了一種呼叫方式。類名.靜態方式。
3、靜態隨著類的載入而載入。而且優先於物件存在。
弊端:
1、有些資料是物件特有的資料,是不可以被靜態修飾的。因為那樣的話,特有資料會變成物件的共享資料。這樣對事物的描述就出了問題。所以,在定義靜態時,必須要明確,這個資料是否是被物件所共享的。
2、靜態方法只能訪問靜態成員,不可以訪問非靜態成員。
因為靜態方法載入時,優先於物件存在,所以沒有辦法訪問物件中的成員。
3、靜態方法中不能使用this,super關鍵字。
因為this代表物件,而靜態在時,有可能沒有物件,所以this無法使用。
什麼時候定義靜態成員呢?或者說:定義成員時,到底需不需要被靜態修飾呢?
成員分兩種:
1、成員變數。(資料共享時靜態化)
該成員變數的資料是否是所有物件都一樣:
如果是,那麼該變數需要被靜態修飾,因為是共享的資料。
如果不是,那麼就說這是物件的特有資料,要儲存到物件中。
2、成員函式。(方法中沒有呼叫特有資料時就定義成靜態)
如果判斷成員函式是否需要被靜態修飾呢?
只要參考,該函式內是否訪問了物件中的特有資料:
如果有訪問特有資料,那方法不能被靜態修飾。
如果沒有訪問過特有資料,那麼這個方法需要被靜態修飾。
成員變數和靜態變數的區別:
1、成員變數所屬於物件。所以也稱為例項變數。
靜態變數所屬於類。所以也稱為類變數。
2、成員變數存在於堆記憶體中。
靜態變數存在於方法區中。
3、成員變數隨著物件建立而存在。隨著物件被回收而消失。
靜態變數隨著類的載入而存在。隨著類的消失而消失。
4、成員變數只能被物件所呼叫 。
靜態變數可以被物件呼叫,也可以被類名呼叫。
所以,成員變數可以稱為物件的特有資料,靜態變數稱為物件的共享資料。
**學習Java的同學注意了!!!
學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:521352947 我們一起學Java!**

相關推薦

C# 定義了 7 種變數類別:靜態變數例項變數陣列元素值引數引用引數輸出引數區域性變數

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Java三大變數別是類變數例項變數區域性變數

一、什麼是變數:就是內容可以改變的量,它與常量相對應。而這三大變數實際上是從變數的作用域來定義和劃分的。 1、類變數,是歸屬類的變數,它是通過在定義類的屬性的時,增加static修飾符,所以又稱為靜態變數。類變數不僅可以直接通過類名+點操作符+變數名來操作,也

Java學習:“this”的引用及類變數例項變數區域性變數

class caculate { static int staticVar = 0; //類變數、靜態變數 static final float STATIC_CONSTANT = 1; /

python全域性變數區域性變數&類屬性例項屬性

由於這幾個變數比較容易混淆,下面總結一下。 全域性變數: 在一個py檔案或者一個模組或者包中,但不在類中、不在函式內中的變數。 區域性變數 在函式內、在class的方法內(未加self修飾),這就是區域性變數 靜態變數/類變數 在class內的,但不在class的方法內

Java學習筆記02--成員變數區域性變數建構函式構造程式碼塊this關鍵字static關鍵字靜態函式

成員變數和區域性變數 自定義的位置區別: 成員變數是定義在方法之外,類之內的變數。 區域性變數是宣告在方法之內的變數。 作用上的區別: 成員變數的作用描述一類事物的屬性。 區域性變數的作用是提供一個變數給方法內部使用的。 生命週期的區別;

Java例項變數區域性變數未初始化的情況

例項變數會有預設初始值(0,false,null,'\u0000'等),區域性變數不會有預設初始值, public class test01 { private String s; private int [] year = new int[3]; public

java 基礎之成員變數,成員方法區域性變數例項方法

以下都是總結的簡單說法,定義上可能沒那麼嚴謹。 成員變數:類裡定義的變數。 區域性變數:方法裡定義的變數。 其中成員變數又分為:例項變數和類變數(靜態變數) 類變數:static修飾的變數 注:如果區域性變數和成員變數的名稱相同,那麼成員變數被隱藏,即方法內失效,方法中如需

例項解析JS區域性變數與形參之間衝突全域性變數的引用造成的慘案例項分析?

1.JS區域性變數與形參之間的衝突 (1).區域性變數慘案例項: 首先建立一個全域性陣列變數arrayList; var arrayList= [ {tel:1234657,name:'a'}, {tel:1234658,name:'b

JAVA-三大語句(選擇語句條件語句循環語句)

== goto true bsp 語句 for循環 logs light log 跳出指定的for循環體,和goto很像 1 K:for(int i=0;i<3;i++){//給這個for循環體取一個名字為K 2 for(int j=0;j<3;j++

java中成員變數區域性變數

1.成員變數   在類中定義,用來描述物件將要有什麼。 2.區域性變數 在類的方法中定義,在方法中臨時儲存資料 成員變數和區域性變數區別 1.作用域不同 成員變數的作用域在整個類內部都是可見的 區域性變數的作用僅限於定義它的方法、 2.初始值不同 jav

第三章(3) lambda表示式型別檢查型別推斷以及區域性變數

     1.型別檢查      當我們在之前第一次提到lambda表示式的時候,說它可以為函式式介面生成一個例項。然而,Lambda表示式本身並不包含它在實現哪個函式式介面的資訊。為了全面瞭解Lambda表示式,你

JAVA基礎(11)---成員變數區域性變數

變數的分類: 按照變數宣告的位置(作用的範圍):     成員變數: 宣告在類的內部,方法的外部的變數,稱為成員變數                區域性變數:宣告在方

Java中ThreadLocal,成員變數區域性變數

一.成員變數和區域性變數 1.程式例子: public class HelloThreadTest { public static void main(String[] args) { HelloThread r = new HelloThread();

java類基礎1-成員變數區域性變數

成員變數:寫在類體的裡面,方法體的外面,宣告時可以不進行初始化值,可以被本類或其他類的方法進行呼叫。區域性變數:寫在方法體的裡面,宣告時必須進行初始化,只能在宣告區域性變數的方法內進行呼叫。 public class Student { String name; int age=20; b

JS中最經典的全域性變數區域性變數問題(1作用域作用域鏈 2變數宣告提前)

var a = 10; function test(){ a = 100; console.log(a); console.log(this.a); var a; console.log(a); } test(); 1、程式的執行結果為:100

java學習筆記(一)成員變數區域性變數以及靜態變數的區別

成員變數和區域性變數的區別        成員變數:           ①成員變數定義在類中,在整個類中都可以被訪問。           ②成員

Java基礎------成員變數區域性變數的區別形參問題

在類中的位置不同 (1)成員變數:類中方法外。 (2)區域性變數:方法內部或者方法宣告上。 在記憶體中的位置不同 (1)成員變數:堆記憶體。 (2)區域性變數:棧記憶體。 生命週期不同 (1)成員變數:隨著物件的存在而存在,隨著物件的消失而消失。 (2)區域性變數:隨

java全域性變數區域性變數

全域性變數是一個執行時刻實體,它在程式的整個執行過程中都存在。全域性變數生命週期為程式開始到程式結束。 全域性變數顯示初始化時,或者未初始化時,在程式映像中有不同的分割槽:已初始化的全域性變數是可執行模組的一部分。未初始化的全域性變數則不是可執行模組的一部分,只有當定義它們的程式被呼叫時

關於java成員變數區域性變數

1、成員變數和區域性變數簡述 在Java語言裡,根據定義變數位置的不同,可以將變數分成兩大類:成員變數和區域性變數。二者的執行機制存在較大差異。 1.1成員變數 類變數從該類的準備階段起開始存在,直到系統完全銷燬這個類,類變數的作用域與這個類的生存範圍相同; 而例

php入門變數變數的間接引用連線字串連線賦值運算子

【1】變數的間接引用: <?php $a = 'b'; $$a = '123'; echo $b; ?> 上面的輸出結果是123 我們可以看到在第二行程式碼中多了一個$,並通過指定的名稱訪問變數,指定的名字儲存在$a('b')中,並把這個變數