Java初學者的精神食糧——語言基礎之識別符號、資料型別、變數和常量
阿新 • • 發佈:2018-12-20
一、Java識別符號
1、識別符號(identifier)
java程式設計中識別符號是賦予變數、物件、類和方法的名稱
- 識別符號可以由字母,數字,下劃線_,和"$"組成
- 識別符號必須以字母、下劃線_或$開頭,之後可以跟其他字元
- 識別符號嚴格區分大小寫,無長度限制
- 在自定義識別符號的時候,應該使其能夠反映表示的變數、物件或類的意義 例如: 2mail (不能以數字開頭) room# 為非法標識別符號
2、關鍵字(keyword)
關鍵字是一種特定專用的識別符號,不允許重新定義其含義。
關鍵字都用小寫字母表示
常用的關鍵字有:
Java中沒有goto和const
二、資料型別
1.基本資料型別
基本資料型別的變數在堆疊中直接包含其資料,每個變數都有自己的資料副本。
①取值範圍
資料型別 | 位元組 | 取值範圍 | 預設值 |
---|---|---|---|
byte | 1 | -27~(27-1) | 0 |
char | 2 | \u000~\ufff | \u0000 |
short | 2 | -215~(215-1) | 0 |
int | 4 | -231~(231-1) | 0 |
long | 8 | -263~(263-1) | 0 |
float | 4 | 3.4E-38~3.4E38 | 0.0F |
double | 8 | 1.7E-308~1.7E308 | 0.0D |
boolean | 1 | true/false | false |
1Byte(位元組)=8bit(位)
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
②型別轉換(可能會導致資料的溢位或者精度的下降)
- 自動型別轉換(隱式轉換):小範圍型別到大範圍型別
byte b = 20;
int a = b; //大型別可以容納小型別
- 強制型別轉換(顯示轉換):大範圍型別到小範圍型別
int a;
byte b = (byte)a; //強制讓小型別容納大型別
- 運算過程中轉換:
short sh1=(short)(sh+3)
2.引用資料型別
引用資料型別的變數在堆疊中儲存對資料的引用地址,資料儲存在堆中。
三、變數與常量
1.變數
變數是程式中的基本儲存單元,在程式執行的時候得到其資料,可以修改。
①變數的作用域(變數的可被訪問範圍)
- 成員變數 (在類內部宣告的變數)即類的欄位
- 方法體區域性變數(花括號之內宣告的變數)必須初始化才可以使用
- 語句塊區域性變數(在控制結構塊中宣告的變數,例如for、if語句中宣告的變數)
切記:java中沒有全域性變數!
2.常量
常量是指在程式執行過程中值不變的量
- 整型常量 整型常量在機器中佔32位。 ①十進位制整數 (以10為基數): 123,-345,0 ②八進位制整數 (以8為基數):以0開頭,如0123表示十進位制數83,-011表示十進位制數-9 ③十六進位制整數(以16為基數):0x或0X開頭,0x123表示十進位制數291,-0x12表示十進位制數-18
- 浮點數型別常量 ①十進位制數形式,由數字和小數點組成:0.23 .23 23. 23.0 ②科學計數法形式: 123e3或123E3
- 布林型常量 ①true ②false
- 字元型別常量 在單引號‘’之內的字元,常用有很多轉義字元
- 字串型別常量 在雙引號“”之內的一串字元,在java中字串常量作為String類的一個物件來處理。
- null型常量(空引用) 引用型別的唯一文字常量,可以為任何引用型別,賦值給任何引用型別的變數。
- 使用者宣告常量
final int A = 1;
四、必懂拓展
1.裝箱(包)和拆箱(包)
裝箱和拆箱可以實現簡單型別和引用型別之間的轉換
8種簡單型別 | 對應的包裝類 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
①裝箱:(自動裝包)將簡單型別包裝成對應的包裝類(呼叫valueOf方法)
程式碼:Integer a = 100; // Integer.valueOf
反編譯
檢視原始碼
由反編譯得出的結果看到呼叫了Integer.valueOf方法
例:
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 10;
Integer a1 = 200;
Integer a2 = 200;
Integer b1 = 100;
Integer b2 = 100;
System.out.println( a == b);
System.out.println( a1 == a2);
System.out.println( b1 == b2);
}
}
執行結果:
如果是簡單型別,比較的是數值是否相等 (a == b)
如果是引用型別:比較地址
如果在範圍[-127 ~ 128]之內則放進快取,不在int範圍[-127~128]以內要建立一個新的物件
integer a1=new integer(200)
integer a2=new integer(200)
system.out.printLn(a1 == a2) //打印出true
②拆箱:(自動拆包)將包裝類轉化為基本型別(呼叫intvalue方法)
程式碼:
Integer a=10;
int a1=a;
double d=a.doubleValue; //將a強轉為double型賦給double