常量與變量都是程序在運行時用來存儲數據一塊內存空間java
常量的值在程序運行時不能被改變,Java中聲明常量必須使用final關鍵字。常量還能夠分爲兩種意思:數組
第1種意思,就是一個值,這個值自己,咱們能夠叫它常量,舉幾個例子:編碼
整型常量: 123spa
實型常量:3.14code
字符常量: 'a'對象
邏輯常量:true、false排序
字符串常量:"helloworld"接口
這只是說法的問題,好比7這個數,咱們就能夠說「一個int類型的常量7 」內存
第2種意思,表示不可變的變量,這種也叫常量,從語法上來說也就是,加上final,使用final關鍵字來修飾某個變量,而後只要賦值以後,就不能改變了,就不能再次被賦值了ci
//聲明一個int類型的常量i final int i = 1; //聲明一個String對象類型的常量s,"Hello"字符串也是一個常量 final String s = "Hello";
須要注意的是:常量在聲明時必需要給這個常量賦一個值。
是程序運行時用來存儲數據的一塊內存空間,是程序中最基本的存儲單元,咱們可使用變量名訪問變量。
按聲明位置分:
局部變量
成員變量
方法的參數是局部變量。
public class Test{ int i1 = 1; //成員變量 public class static main(String[] args){ //args是方法的參數,因此也是局部變量 int i2 = 2; //局部變量 } }
按數據類型分:
基本數據類型變量
引用數據類型變量
public class Test{ int i = 1; //基本數據類型變量 String s = new String(); //引用數據類型 }
第一步:聲明一個變量——根據類型在內存中開闢空間
第二步:賦值——將數據存入空間
第三步:使用變量——獲得內存中的數據使用
咱們使用變量前必需要先聲明和賦值,聲明和賦值能夠分開,也能夠結合爲一步;
成員變量在聲明時若是沒有爲其顯式賦值,則會爲其分配一個默認值。
public class Test{ int i3; //若是是成員變量,系統會爲其默認分配一個值0 public static void main(String[] args){ int i1; //聲明 i1 = 1; //賦值 int i2 = 2; //聲明的同時爲其賦值,2這個值也叫「直接量」 System.out.println(i1); //使用,將變量的值輸出到Java控制檯 } }
Java是一種強類型語言,所謂強類型,就是每一個變量表達式在編譯時就必需要有一個肯定的數據類型。Java數據類型分爲兩大類:基本類型和引用類型。
引用數據類型爲:類、接口、數組。
Java中的基本數據類型分爲四類八種,分別爲:
基本數據類型 |
|||||
數值型 |
字符類型char
佔用空間:2字節 |
布爾類型boolean
佔用空間:1位 |
|||
整數類型 |
浮點類型 |
||||
字節byte |
短整型short |
整型int |
長整型long |
單精度型long |
雙精度型double |
1字節 |
2字節 |
4字節 |
8字節 |
4字節 |
8字節 |
-128~127 |
-32768~32767 |
-2147483648 ~2147483647 |
-9223372036854774808 ~9223372036854774807 |
-3.403E38 ~3.403E38 |
-1.798E308 ~1.798E308 |
byte b1 = 127; //正確 byte b2 = 128; //錯誤,超出範圍 short = b1; //正確,將另一個變量的值賦給該變量,而且沒有超出範圍 int i1 = 12;//正確 int i2 = 012; //正確 int i3 = 0x12; //正確 System.out.println(i2); //輸出10,由於i2是以8進制方式賦值的 System.out.println(i3); //輸出18,由於i3是以16進制方式賦值的 long lo = 2147483648L; //long類型聲明須要加上L
float f1 = 123; float f2 = 123.4F; double d1 = 1234.5; double d = 3.141_592_65_36 //正確,java7後爲了使比較長的數據較有可讀性,能夠在數字之間使用下劃線
char c1 = '你'; //正確 char c2 = '你好'; //錯誤 char c3 = '\u9999'; //正確 System.out.println(c3); //輸出'香'
用來存儲"真","假"的類型,只有true和false兩種值。
boolean b = true;
byte b = 127; short s = b; //會自動轉換爲short b = (byte)s; //不會自動轉換,須要強制轉換
byte b1 = 1; byte b2 = (byte) (b1 + 2); //數值運算時會自動轉換爲int,因此計算出結果後將值再賦給byte類型變量b2時須要強制轉換
long lo = (long)2; long lo2 = 2L; //這兩種聲明或轉換有本質區別