1. 程式人生 > >Java例項變數、類變數與區域性變數

Java例項變數、類變數與區域性變數

一、例項變數

也叫物件變數、類成員變數;從屬於類由類生成物件時,才分配儲存空間,各物件間的例項變數互不干擾,能通過物件的引用來訪問例項變數。但在Java多執行緒中,例項變數是多個執行緒共享資源,要注意同步訪問時可能出現的問題。

<span style="font-size:14px;">public class Demo {
	//以下都是例項變數(成員變數、物件變數)
	private String nameString;
	public int age;
	protected int priority;
	//例項方法
	public String getNameString(){
		return this.nameString;
	}
}</span>

二、類變數

也叫靜態變數,是一種比較特殊的例項變數,用static關鍵字修飾;一個類的靜態變數,所有由這類生成的物件都共用這個類變數,類裝載時就分配儲存空間。一個物件修改了變數,則所以物件中這個變數的值都會發生改變。

<span style="font-size:14px;">public class Demo {
	//類變數(靜態變數)
	public static int a = 0;
	//例項變數
	private String nameString;
}</span>
三、區域性變數

方法中或者某區域性塊中宣告定義的變數或方法的引數被稱為區域性變數,他們只存在於建立他們的block裡({}之間)無法在block外進行任何操作,如讀取、賦值。在Java多執行緒中,每個執行緒都複製一份區域性變數,可防止某些同步問題發生。

<span style="font-size:14px;">	//類變數(靜態變數)
	public static int a = 0;
	//例項變數
	private String nameString;
	
	public void test(){
		//區域性變數
		int temp = 1;
		System.out.println(temp);
	}</span>

四、他們的區別


成員變數和區域性變數的區別

       成員變數:

          ①成員變數定義在類中,在整個類中都可以被訪問。

          ②成員變數隨著物件的建立而建立,隨著物件的消失而消失,存在於物件所在的堆記憶體中。

          ③成員變數有預設初始化值。

      區域性變數:

          ①區域性變數只定義在區域性範圍內,如:函式內,語句內等,只在所屬的區域有效。

          ②區域性變數存在於棧記憶體中,作用的範圍結束,變數空間會自動釋放。

          ③區域性變數沒有預設初始化值 

      在使用變數時需要遵循的原則為:就近原則

      首先在區域性範圍找,有就使用;接著在成員位置找

成員變數和靜態變數的區別

      1、兩個變數的生命週期不同

            成員變數隨著物件的建立而存在,隨著物件被回收而釋放。

            靜態變數隨著類的載入而存在,隨著類的消失而消失。

      2、呼叫方式不同

            成員變數只能被物件呼叫。

            靜態變數可以被物件呼叫,還可以被類名呼叫。

      3、別名不同

            成員變數也稱為例項變數。

            靜態變數也稱為類變數。

      4、資料儲存位置不同

            成員變數儲存在堆記憶體的物件中,所以也叫物件的特有資料。

            靜態變數資料儲存在方法區(共享資料區)的靜態區,所以也叫物件的共享資料。



相關推薦

Python基礎--可變數不可變數

賦值語句 一個 不同 class 內存 b- 1.7 opened 機制 可變數據類型與不可變數據類型 Python的數據類型主要分為可變數據類型與不可變數據類型,這兩種都分別包含了哪些數據類型又各自有什麽特點呢我們下邊意義介紹; 不可變數據類型:數字、字符串、元組是不可

static變數static函式普通變數普通函式的區別

C程式一直由下列部分組成:      1)正文段——CPU執行的機器指令部分;一個程式只有一個副本;只讀,防止程式由於意外事故而修改自身指令;      2)初始化資料段(資料段)——在程式中所有賦了初值的全域性變數,存放在這裡。      3)非初始化資料段(bss段)——在程式中沒有初始化的全域性變數;核

C/C++ 變數的作用域 區域性變數

區域性變數例1#include <stdio.h>#include <stdlib.h>//區域性變數例題1void changeNum1()//定義函式{    //區域性變數    //定義變數 並賦初值    int num1 = 5,num2

C語言:static變數static函式普通變數普通函式的區別

static變數、static函式與普通變數、普通函式的區別 全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜

Java例項變數變數區域性變數

一、例項變數 也叫物件變數、類成員變數;從屬於類由類生成物件時,才分配儲存空間,各物件間的例項變數互不干擾,能通過物件的引用來訪問例項變數。但在Java多執行緒中,例項變數是多個執行緒共享資源,要注意同步訪問時可能出現的問題。 <span style="font-si

Java 006 面向物件(物件成員變數區域性變數匿名物件封裝)

知識點梳理 心得體會 小知識點 1.Java面向物件的特徵:封裝、抽象、繼承、多型 2.this關鍵字,對當前類的物件的引用,誰呼叫這個方法,方法中的this就代表誰,一般有this就是成員變數,沒有this就是區域性變數 3.成員方法定義與定義一般方法一樣,但需要去掉st

Java千百問_03基本語法(001)_區域性變數變數例項變數有什麼區別

區域性變數、類變數、例項變數有什麼區別 在聊區域性變數、類變數、例項變數有什麼區別之前,我們需要了解一下Java變數。 1、Java變數是什麼 在數學世界中,我們知道有常量、變數。 舉一個例

Java變數方法例項變數例項方法

在理解類變數、類方法之前先看一段程式碼: class Person { int age ; String name; static int totalFee; public void showName() { Syst

Java String變數物件集合SSH(二)

19、ArrayList和Vector的區別 這兩個類都實現了List介面(List介面繼承了Collection介面),他們都是有序集合,即儲存在這兩個集合中的元素的位置都是有順序的,相當於一種動態的陣列,我們以後可以按位置索引號取出某個元素,,並且其中的資料是允許重複的,這是HashSet之類的集合的最

【轉】Python 變數命名規範 以及 Python全域性變數區域性變數變數例項變數 總結

變數命名規範:      函式和普通變數名 由小寫字母和下劃線組成,類 大寫 全域性變數,區域性變數,類變數,例項變數總結: (python大盤點:全域性變數、區域性變數、類變數、例項變數) (python中的類變數、成員變數和成員函式的區域性變數使用)

java載入靜態變數靜態方法靜態程式碼塊詳解初始化順序

我們知道java中類的生命週期為裝載、連線、初始化、使用和解除安裝五個過程,如下圖所示:1.載入     我們編寫一個java類的程式碼,經過編譯之後生成一個字尾名為.class的檔案,java虛擬機器就能識別這種檔案。java的生命週期就是class檔案從載入到消亡的過程。

python中全域性變數區域性變數變數例項變數簡析

因為python為動態語言,處理變數的方式與一些靜態語言(比如C++)不大一樣,在這裡對這些變數進行小小的總結 python中全域性變數與C語言中類似,也就是在的那個單頁面所有函式外頭定義

第十二Java的成員變數區域性變數的區別

成員變數與區域性變數的區別: 0、定義的位置上區別: 成員變數:  定義在方法之外,類之內的變數 區域性變數:  定義在方法之內的變數 1、應用範圍的區別          成員變數在整個類內都有效             區域性變數只在其宣告的方法內有效 2、生命

一文解決 PHP靜態(區域性/全域性)變數auto(區域性/全域性)變數中static

一、靜態區域性變數、auto區域性變數、類中static 這是我的概念: 類屬性,類方法:是給類使用的,在類中使用 self::和 static:: 代表,供呼叫 例項屬性,例項方法:是給例項使用的,在類中使用 this-> 代表,供呼叫 <?php /**

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

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

Python之路Python全域性變數區域性變數函式多層巢狀函式遞迴 Python之路Python全域性變數區域性變數函式多層巢狀函式遞迴

Python之路Python全域性變數與區域性變數、函式多層巢狀、函式遞迴 一、區域性變數與全域性變數   1、在子程式中定義的變數稱為區域性變數,在程式的一開始定義的變數稱為全域性變數。全域性變數作用域是整個程式,區域性變數作用域是定義該變數的子程式。 全域性變數

執行緒互斥鎖條件變數例項理解

互斥鎖: 初始化程序鎖: int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr); 其中 mutex 為鎖號 attr為屬性 摧毀互

java基礎筆記(七)成員變數區域性變數

先來看成員變數和區域性變數是什麼: 成員變數: 定義在類裡的變數 public class Person { private String name; int age;} 區域性變數 在方法定義中,或宣告方法上的變數 public class Person { priva

python面向物件中物件例項物件變數例項變數方法例項方法靜態方法

  1. 類物件和例項物件   Python中一切皆物件,Python類本身也是一種物件,類定義完成後,會在當前作用域中定義一個以類名為名字的名稱空間。類物件具有以下兩種操作: 可以通過“類名()”的方式例項化一個物件。  可以通過“類名.類屬性”的方式來訪問一個類屬性。

關於java成員變數區域性變數以及成員方法的記憶體區別問題

今天去面試遇到了有關成員變數與區域性變數以及成員方法的問題,主要是涉及所處記憶體的問題和初始化問題,簡單的總結一下: 1.java中成員變數處在堆記憶體(成員方法不呼叫時存在方法區中的靜態區)中,區域性變數處在棧記憶體中; 知其然知其所以然,我們簡單瞭解一下Java記憶體分配: