JavaSE(4)——變數
一、關鍵字和保留字
1. 關鍵字
- 定義:被Java語言賦予了特殊含義,用做專門用途的字串(單詞)。
- 特點:關鍵字中所有字母都為小寫。
2.保留字
現有Java版本尚未使用,但以後版本可能會作為關鍵字使用。自己命名識別符號時要避免使用這些保留字。(goto、const
)
二、識別符號
-
定義:Java對各種變數、方法和類等要素命名時使用的字元序列稱為識別符號。
-
技巧:凡是自己可以起名字的地方都叫識別符號。
-
定義合法識別符號的規則:(合法識別符號例如:
mile
、Test
、a0d
、ad_fd
等)- 由26個英文字母大小寫,0-9,_或$組成數字不可以開頭。
- 不可以使用關鍵字和保留字,但能包含關鍵字和保留字。
- Java中嚴格區分大小寫,長度無限制。
- 識別符號不能包含空格。
-
識別符號命名規範:(如果不遵守如下規範,編譯也可以通過,建議如此)
- 包名:多單片語成時所有字母都小寫:
xxxyyyzzz
- 類名、介面名:多單片語成時,所有單詞的首字母大寫:
XxxYyyZzz
- 變數名、方法名:多單片語成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫:
xxxYyyZzz
- 常量名:所有字母都大寫。多單詞時每個單詞用下劃線連線:
XXX_YYY_ZZZ
- 包名:多單片語成時所有字母都小寫:
在命名的時候儘量讓名字有意義能夠做到見名知意。
Java採用Unicode字符集,因此表示夫也可以使用漢字宣告,但是不建議使用。
三、變數
1. 變數:
- 概念:
- 記憶體中的一個儲存區域。
- 該區域的資料可以在同一類型範圍內不斷變化。
- 變數是程式中最基本的儲存單元。包含變數型別、變數名和儲存的值。(有些不需要具體的變數型別的語言叫做弱型別語言,對於要求成員寫出指定變數型別這就是強型別語言)
- 作用: 用於在記憶體當中儲存資料
注意點:
- Java中每個變數必須先宣告,後使用
- 使用變數名來訪問這塊區域的資料
- 變數的作用域:其定義所在的一對{}內
- 變數只有在其作用域內才有效
- 同一個作用域內,不能定義重名的變數
變數的定義、賦值、使用在如下程式碼例項中可見
程式碼示例:
package exercise.variabletext; public class VariableText { public static void main(String[] args) { //變數的定義 int i = 23; //變數的使用 System.out.println(i); //編譯錯誤:使用Number之前並未定義過Number //System.out.println(Number); //變數的宣告 //編譯錯誤:使用Number之前未被賦值過 //System.out.println(Number): int Number; //變數的賦值 Number = 1000; System.out.println(Number); //編譯錯誤:myClass在不同的作用域當中 //System.out.println(myClass); //不可以在同一個作用域內定義同名的變數 //int myAge = 22; } public void method() { int myClass = 1; } }
- 資料型別: (按資料型別分類)
-
基本資料型別
-
數值型
- 整數型別(
byte
、short
、int
、long
)
- Java各整數型別有固定的表數範圍和欄位長度,不受具體OS的影響,以保證java程式的可移植性。
- Java的整型常量預設為int型,宣告long型常量須後加
l
或L
- Java程式中變數通常宣告為int型,除非不足以表示較大的數,才使用long
- 浮點型別(
float
、double
)
-
與整數型別類似,Java浮點型別也有固定的表數範圍和欄位長度,不受具體作業系統的影響。
-
浮點型常量有兩種表示形式:
- 十進位制數形式:如:
5.12
、512.0f
、.512
(必須有小數點) - 科學計數法形式:如:
5.12e2
、512E2
、100E-2
- 十進位制數形式:如:
-
float:單精度,尾數可以精確到7位有效數字。很多情況下,精度很難滿足需求。
-
double:雙精度,精度是float的兩倍。通常採用此型別。
-
Java的浮點型常量預設為double型,宣告float型常量,須後加
f
或F
。 -
通常,定義浮點型變數時,使用double型。
- 整數型別(
-
字元型(
char
)
-
定義char字元型別時,通常加
' '
-
Java當中的所有字元都是使用Unicode編碼,所以一個字元可以儲存一個字母,一個漢字,或其他書面語的一個字元。
-
三種表現形式:
- 字元常量使用
' '
括起來的單個字元。eg:char c1 = 'a';
- 轉義字元使用轉義字元
\
將其後面的字元轉化為特殊字元型常量。eg:char z1 = '\n';
- Unicode值
eg:char u1 = '\u000a'
- 字元常量使用
-
字符集
字元編碼(英語:Character encoding)、字集碼是把字符集中的字元編碼為指定集合中某一物件(例如:位元模式、自然數序列、8位組或者電脈衝),以便文字在計算機中儲存和通過通訊網路的傳遞。常見的例子包括將拉丁字母表編碼成摩斯電碼和ASCII。其中,ASCII將字母、數字和其它符號編號,並用7位元的二進位制來表示這個整數。通常會額外使用一個擴充的位元,以便於以1個位元組的方式儲存。
- 布林型(
boolean
)
- 常常用來判斷邏輯條件。
- 只有兩個值
true
、false
。(Java不可以是哦那個0或者非0的整數代替true
和false
,這要區別C語言)
-
-
引用資料型別(引用型變數後面會做細緻介紹)
-
類(
class
) -
介面(
interface
) -
陣列(
[]
)
-
基本資料型別的轉換:(前提這裡只是討論七種基本資料型別變數間的運算,不包含boolean型別的。)
- 自動型別提升: 當容量(這裡容量的大小指的是數表示的範圍的大小)小的資料型別的變數與容量大的資料型別的變數做運算的時候,結果自動提升為容量大的資料型別。(
byte
、short
、char``這三種類型相互運算的時候結果都是int
-->int
-->long
-->float
-->double
)
程式碼示例:
package exercise.variabletest;
public class VariableTest3 {
public static void main(String[] args) {
byte b1 = 2;
int i1 = 129;
//編譯不通過:不可以使用byte接受int型別的變數
//byte b2 = b1 + i1;
int i2 = b1 + i1;
System.out.println(i2);
long l1 = b1 + i1;
System.out.println(l1);
float f = b1 + i1;
System.out.println(f); //131.0
short s1 = 123;
double d1 = s1;
System.out.println(d1); //123.0
//****************************************
char c1 = 'a';
int i3 = 10;
int i4 = c1 + i3; //最小用int接收,只能往大了寫
//特別的char、short、byte之間做運算的時候結果是int型變數
short s2 = 10;
int s3 = c1 + s2;
//char c2 = c1 + s2; //編譯不通過
byte b2 = 10;
//char c3 = b2 + c1; //編譯不通過,結果也是int
}
}
- 強制型別轉換: 自動型別提升運算的逆運算
- 強制型別轉換需要使用強轉符:
()
- 強制型別轉換可能導致精度損失。
程式碼示例:
- 強制型別轉換需要使用強轉符:
package exercise.variabletest;
public class VariableTest4 {
public static void main(String[] args) {
double d1 = 12.9;
int i1 = (int)d1; //截斷操作
System.out.println(i1);
//沒有精度損失
long l1 = 123;
short s2 = (short)l1;
//也算是一種精度損失
int i2 = 128;
byte b = (byte)i2;
System.out.println(b); //-128
}
}
一些常見的編碼問題:long
型變數在定義的時候,什麼時候後面需要加L/l
;float
型變數在定義的時候,什麼時候後面需要加F/f
(程式設計例項)
package exercise.variabletest;
public class VariableTest2 {
public static void main(String[] args) {
//1.編碼情況:
long l = 2432123;
System.out.println(l);
//編譯失敗:過大的整數
//long l1 = 243242343243224;
long l1 = 2434243123124324L;
//***********************
//編譯失敗,因為浮點數預設為double型別,所以會報錯,所以在float型別宣告或者定義時,一定要加上f
//float f1 = 12.3;
//2.編碼情況2:
//整型常量:預設型別為int型。
//浮點型常量:預設型別為double型。
byte b = 12;
//byte b1 = b + 1;//編譯失敗
//float f1 = b + 12.3; //編譯失敗
}
}
2. 字串型別: String
String
不屬於基本資料型別,屬於引用資料型別。- 宣告
String
型別變數時,使用一對""
。 String
可以和8中基本資料型別做運算,且運算只能是連線運算+
。運算的結果仍然是String
型別。
package exercise.stringtest;
public class StringTest {
public static void main(String[] args) {
String s1 = "Hello World!";
System.out.println(s1);
String s2 = "a";
String s3 = ""; //String可以為空。
//char c = ''; //編譯不通過,char型變數不可以為空,有且只能有一個
//*******************
int number = 1001;
String numberStr = "學號:";
String info = numberStr + number; //+連線運算
boolean b1 = true;
String info1 = info + b1;
System.out.println(info1);
}
}
變數在類中宣告的位置: 成員變數 vs
區域性變數