java變數型別
1、區域變數
概念:類的方法中的變數
2、實體變數
概念:定義在類里面,方法體、構造方法和陳述句塊外,且不被static修飾的變數,用于描述一個類中包含哪些資料3、類變數
概念:獨立于方法之外的變數,有static修飾
public class able{ static int a=0;//類變數 String b="hello world";//實體變數 public void method(){ int c=0;//區域變數 } }
擴展:
成員變數分為實體變數和類變數
成員變數的定義:
宣告成員變數語法
【public】【protected】【private】【static】【final】<type><variable_name>
含義如下:
【public】【protected】【private】:成員變數的訪問權限
【static】:表示該成員變數為類變數,也成為靜態變數
【final】:表示將該成員變數宣告為常量
【type】:表示變數的型別
【variable_name】:表示變數名稱
java四種訪問范圍:
1、當前類 2、同一包 3、子類 4、全域
訪問權限從小到大
private-->default-->protected-->public

1、區域變數
特點:
1、區域變數宣告在方法、構造方法或者陳述句塊中
2、區域變數在方法、構造方法、或者陳述句塊被執行的時候創建,當這些被執行完成后,變數將會被銷毀
3、訪問修飾符不能用于區域變數
4、區域變數只能在宣告它的方法、構造方法或者陳述句塊中可見
5、區域變數是在堆疊上分配的
6、區域變數沒有默認值,所以區域變數被宣告后,必須經過初始化(賦值),才能被使用
存放地址:堆疊記憶體
生命周期:作用的范圍結束,變數空間會自動釋放
擴展:
變數使用原則:
就近原則,首先在區域范圍找,有就用,接著在成員位置找,
區域變數可分為:
1、形參(形參串列,可以由多個或者0個組成,中間用逗號隔開)
2、方法區域變數
3、代碼塊區域變數
擴展:變數與物件
變數是用來存盤資料的,它的定義包含變數名、變數型別和作用域幾個部分,物件是一個類功能模塊的集合,里面有方法和屬性,每一個方法能實作一個不同的功能,屬性是決定物件執行結果的因素,屬性只能讀寫,
實體化、初始化和宣告
實體化:用類創建物件的程序稱為實體化,實體化一個物件就是為物件開辟記憶體空間,或者不用宣告,直接用new建構式名,創建一個臨時物件,類不同于函式(方法),定義完之后是無法直接使用的,因為類只是一個抽象的概念,需要通過關鍵字new來實體化,才可以被使用
Date date=new Date()
初始化:給宣告的物件賦值的程序,string arr=“hello”;
宣告:指使用一個物件的時候,先定義屬于哪個型別 ,string arr;
總結:
宣告:只生成物件不賦值的程序
初始化:是給物件賦值的程序
實體化:是使用new為物件分配記憶體的程序
2、實體變數(成員變數)(物件的成員變數)
本質:成員變數,只是實體是針對類而言,實體是值類的宣告
1、實體變數在物件創建的時候創建,在物件被銷毀的時候銷毀
2、實體變數的值應該至少被一個方法、構造方法或者陳述句塊參考,使得外部能夠通過這些方法獲取實體變數資訊
3、實體變數可以宣告在使用前或者使用后
4、訪問修飾符可以修飾實體變數
5、實體變數對于類中的方法、構造方法或者陳述句塊是可見的,一般情況下應該把實體變數設為私有,
成員變數初始化:
1、默認初始化
2、就地初始化 定義成員變數的時候便進行初始化
3、類外初始化 通過物件的參考進行初始化(最多)(私有的時候可以用setXXX()、getXXX()方法實作)
public static void main (String [] args){ Person person = new Person(); person.name = "張三"; person,age=11; }
4、通過實體代碼塊和靜態代碼塊進行初始化
5、通過構造方法進行初始化
3、類變數(靜態變數、靜態屬性、類屬性)
解釋:是指該類所有物件共享的變數任何一個該類的物件去訪問它時,取得都是一樣的值
訪問方式:通過 類名.靜態成員變數名 進行訪問
存盤:靜態存盤區,
特點:只有一份,且不依賴物件
生命周期:在程式開始時創建,在程式結束時銷毀
注意:在類中以static關鍵字宣告,但是必須在方法、構造方法、陳述句塊之外,
靜態變數被除了被宣告為常量外很少使用,常量是指宣告為public/private,final和static型別的變數,常量初始化后不可改變,很少單獨使用static宣告變數
與實體變數具有相似的可見性,但為了對類的使用者可見,大多數靜態變數宣告為public型別
默認值與成員變數類似
類變數被宣告為public static final型別時,類變數名稱一般建議使用大寫字母
使用時機:
1、變數所包含的物件體積較大、占用記憶體較多
2、變數所包含的物件生命周期較長
3、變數所包含的物件資料穩定
4、該類的實體有對該變數包含物件的共享需求
靜態變數和成員變數的區別
1、生命周期不同
成員變數:隨著物件的創建而存在,隨著物件被回收而釋放
靜態變數:隨著類的加載而存在,隨著類的消失而消失
2、呼叫方式不同
成員變數:只能被物件呼叫
靜態變數:可以被物件呼叫,還可以被類名呼叫
3、別名不同
成員變數:實體變數、全域變數
靜態變數:類變數、類屬性、靜態屬性
4、存盤位置不同
成員變數:堆記憶體的物件中,物件的特有資料
靜態變數:資料存盤在方法區(共享資料區)的靜態區,所以也叫物件的共享資料
靜態變數與非靜態變數的區別
1、訪問權限,靜態變數不能訪問非靜態變數,如果硬要訪問,只能用物件區參考非靜態成員變數
2、靜態變數在記憶體空間只有一份,永遠一份
3、非靜態變數只要new出來一個物件參考就會在記憶體中分配一份空間給它
4、存放 地點不一樣,靜態變數是在堆疊空間,非靜態變數存放在堆空間
擴展:
實體變數(成員變數)與類變數(靜態變數、靜態屬性、類屬性)不賦值下的默認取值
byte short int long默認取值為0(整數型別)
float默認取值為0.0f;(浮點型別 單精度)
double默認取值為0.0;(浮點型別 雙精度)
boolean默認取值為false;(布爾型別)
char默認取值為“\u0000”(字符型別 最終輸出為空) 表示Unicode字符
全域變數:
定義在類里方法體外的變數,作用于整個檔案中,直接被類呼叫,
作用域:全域可見
存盤空間:靜態存盤區
優先度:全域變數優先度低于區域變數
優點:程式運行快一點,因為記憶體不需要分配
缺點:占用更多的記憶體,因為其生命期長
全域變數作用域的擴展和限制:
1、擴展:使用extern關鍵字可以對全域變數的作用域進行擴展
2、限制:使用static關鍵字可以限制全域變數的作用域(又稱之為隱藏)
總結一下所有變數的存放位置:
區域變數位于堆疊記憶體、靜態變數位于方法區、實體變數位于堆記憶體、方法的位元組碼位于方法區、物件本身位于堆區、物件的參考位于堆疊區
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/500162.html
標籤:Java
