java中的常量和變數
變數
含義:在程式過程中變數的值會發生變化,直白來說就是用來儲存可變化的資料
變數的好處:使記憶體空間的得到重複利用
舉個例子:
1 System.out.println(10); 2 System.out.println(10); 3 System.out.println(10);
這三個10都是字面量,每一個字面量佔用的都是不同的記憶體空間,就算這幾個字面量相同,佔用的也是不同的空間,字面量的記憶體是無法重複利用的,這樣就浪費了空間,但是使用變數之後,記憶體空間就得到了重複利用。
變數的三要素:
1. 變數的資料型別(資料型別決定了記憶體空間的大小)
2. 變數的名字(方便程式訪問這個資料)
3. 變數儲存的值(儲存的資料)
註解:變數必須先宣告,再賦值才能訪問(沒有賦值不能訪問, 不然會報錯),直白來說變數就是一個儲存資料的一個盒子
注意:在同一個域中,變數名不能重名
1 int a = 10; 2 double a = 10.01 3 //重名了 不能編譯成功
變數的分類
變數分為區域性變數、成員變數。成員變數又分為例項變數(屬性)和靜態變數
在方法體內宣告的變數為:區域性變數(在方法結束後,區域性變數的記憶體空間就釋放了)
在類中,方法外宣告的變數為成員變數,對於例項變數來說,聲明瞭沒有手動賦值,呼叫的時候系統預設賦值
型別 | 預設值 |
---|---|
byte、short、int | 0 |
long | 0L |
float | 0.0F |
double | 0.0 |
boolean | false |
char | ' ' |
引用資料型別 |
註解:例項變數不能通過"類名."來訪問
例項變數前加上修飾列表符static就成為了靜態變數,static是不允許用來修飾區域性變數的。
原因:被static關鍵字修飾變數隨著類的載入而載入,被static修飾的變數成為了類變數 ,可以用類直接呼叫, 即作用域為全域性,而區域性變數在方法內,它的作用域在方法內,作用域變了,所以不允許用來修飾區域性變數。
靜態變數: 在類載入時初始化,分配空間
區域性變數:在方法執行過程中分配空間
例項變數:構造方法執行、物件建立時分配空間
常量有三種類型:靜態常量、成員常量、區域性常量、字面值常量
字面值常量:
-
1 System.out.println(222); 2 System.out.println(-111);
-
浮點型常量
1 System.out.println(3.14); 2 System.out.println(3.1f);
-
字元常量
System.out.println('a');
System.out.println('f');
-
字串型常量
1 System.out.println("zhangsan"); 2 System.out.println("123456");
-
布林型別常量
1 System.out.println(false); 2 System.out.println(true);
-
- 在定義常量時就需要對該常量進行初始化,常量的值是不可改變的量、一次賦值,永不改變,也可以不用在宣告時就初始化,但是初始化後必須在使用這個常量之前初始化。
靜態常量:被static和final修飾的成員變數
例如下面的程式碼:
1 public class Test { 2 final static int i = 100; 3 public static void main(String[] args) { 4 System.out.println(i); 5 } 6 }
成員常量:被final修飾的成員變數
例如下面的程式碼:
1 public class Test { 2 final int i = 100; 3 public static void main(String[] args) { 4 Test test = new Test(); 5 System.out.println(test.i); 6 } 7 }
區域性常量:被final修飾的區域性變數
例如下面的程式碼:
1 public class Test { 2 public static void main(String[] args) { 3 final int i = 100; 4 System.out.println(i); 5 } 6 }