二:變數、識別符號、保留字、變數
阿新 • • 發佈:2021-02-11
文章目錄
01、關鍵字與保留字
1、關鍵字(keyword)的定義和特點
- 定義:被 Java 語言賦予了特殊含義,用做專門用途的字串(單詞)
- 特點:關鍵字中所有字母都為小寫
- 官方地址: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
2、保留字(reserved word)
Java 保留字:現有 Java 版本尚未使用,但以後版本可能會作為關鍵字使用。自己命名識別符號時要避免使用這些保留字goto、const
。
02、識別符號
2.1、什麼是識別符號(Identifier)
- Java 對各種變數、方法和類等要素命名時使用的字元序列稱為識別符號
- 技巧:凡是自己可以起名字的地方都叫識別符號。
2.2、定義合法識別符號規則【重要】
- 由 26 個英文字母大小寫,0-9,_或$ 組成
- 數字不可以開頭。
- 識別符號不能包含空格。
- 不可以使用關鍵字和保留字,但能包含關鍵字和保留字。
- Java 中嚴格區分大小寫,長度無限制。
2.3、Java 中的名稱命名規範
1、Java 中的名稱命名規範:
- 包名:多單片語成時所有字母都小寫:xxxyyyzzz
- 類名、介面名:多單片語成時,**所有單詞的首字母大寫:**XxxYyyZzz
- 變數名、方法名:多單片語成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫:xxxYyyZzz
- 常量名:所有字母都大寫。多單詞時每個單詞用下劃線連線:XXX_YYY_ZZZ
2、注意點
- 注意 1:在起名字時,為了提高閱讀性,要儘量有意義,“見名知意”。
- 注意 2:java 採用 unicode 字符集,因此識別符號也可以使用漢字宣告,但是不建議使用。
- 更多細節詳見《程式碼整潔之道》
03、變數
3.1、變數的宣告與使用
1、變數的概念:
- 記憶體中的一個儲存區域;
- 該區域的資料可以在同一類型範圍內不斷變化;
- 變數是程式中最基本的儲存單元。包含變數型別、變數名和儲存的值。
2、變數的作用:
- 用於在記憶體中儲存資料。
3、使用變數注意:
- Java 中每個變數必須先宣告,後使用;
- 使用變數名來訪問這塊區域的資料;
- 變數的作用域:其定義所在的一對{ }內;
- 變數只有在其作用域內才有效;
- 同一個作用域內,不能定義重名的變數;
4、宣告變數
- 語法:<資料型別> <變數名稱>
- 例如:int var;
5、變數的賦值
- 語法:<變數名稱> = <值>
- 例如:var = 10;
6、宣告和賦值變數
- 語法:<資料型別><變數名>= <初始化值>
- 例如:int var = 10
7、補充:變數的分類-按宣告的位置的不同
- 在方法體外,類體內宣告的變數稱為成員變數。
- 在方法體內部宣告的變數稱為區域性變數。
8、注意:二者在初始化值方面的異同:
- 同:都有生命週期
- 異:區域性變數除形參外,需顯式初始化。
3.2、基本資料型別
2、變數的分類-按資料型別
對於每一種資料都定義了明確的具體資料型別(強型別語言),在記憶體中分配了不同大小的記憶體空間。
3.2.1、整數型別:byte、short、int、long
- Java 各整數型別有固定的表數範圍和欄位長度,不受具體 OS 的影響,以保證 java 程式的可移植性。
- java 的整型常量預設為 int 型,宣告 long 型常量須後加‘l’或‘L’
- java 程式中變數通常宣告為 int 型,除非不足以表示較大的數,才使用 long
型別 | 佔用儲存空間 | 表數範圍 |
---|---|---|
byte | 1位元組=8bit位 | -128 ~ 127 |
short | 2位元組 | -2^15~ 2^15-1 |
int | 4位元組 | -2^31~ 2^31-1 (約21億) |
long | 8位元組 | -2^63~ 2^63-1 |
- 1MB = 1024KB 1KB= 1024B B= byte ? bit?
- bit: 計算機中的最小儲存單位。byte:計算機中基本儲存單元。
/*
Java定義的資料型別
一、變數按照資料型別來分:
基本資料型別:
整型:byte \ short \ int \ long
浮點型:float \ double
字元型:char
布林型:boolean
引用資料型別:
類:class
介面:interface
陣列:array
二、變數在類中宣告的位置:
成員變數 vs 區域性變數
*/
class VariableTest1{
public static void main(String[] args) {
//1. 整型:byte(1位元組=8bit) short(2位元組) \ int (4位元組)\ long(8位元組)
//① byte範圍:-128 ~ 127
byte b1 = 12;
byte b2 = -128;
// b2 = 128; //編譯不通過
System.out.println(b1);
System.out.println(b2);
// ② 宣告long型變數,必須以“1”或“L”結尾
short s1 = 128;
int i1 = 12345;
long l1 = 345678586;
System.out.println(l1);
}
}
3.2.2、浮點型別:float、double
- 與整數型別類似,Java 浮點型別也有固定的表數範圍和欄位長度,不受具體作業系統的影響。
- 浮點型常量有兩種表示形式:
- 十進位制數形式:如:5.12 512.0f .512 (必須有小數點)
- 科學計數法形式:如:5.12e2 512E2 100E-2
- float:單精度,尾數可以精確到7位有效數字。很多情況下,精度很難滿足需求。
- double:雙精度,精度是float的兩倍。通常採用此型別。
- Java 的浮點型常量預設為double型,宣告float型常量,須後加‘f’或‘F’。
型別 | 佔用儲存空間 | 表數範圍 |
---|---|---|
單精度float | 4位元組 | -3.403E38 ~ 3.403E38 |
雙精度double | 8位元組 | -1.798E308 ~ 1.798E308 |
3.2.3、字元型別:char
- char 型資料用來表示通常意義上“字元”(2位元組)
- Java中的所有字元都使用Unicode編碼,故一個字元可以儲存一個字母,一個漢字,或其他書面語的一個字元。
- 字元型變數的三種表現形式:
- 字元常量是用單引號(‘ ’)括起來的單個字元。例如:char c1 = ‘a’; char c2 = ‘中’; char c3 = ‘9’;
- Java中還允許使用轉義字元‘\’來將其後的字元轉變為特殊字元型常量。例如:char c3 = ‘\n’; //’\n’表示換行符
- 直接使用Unicode值來表示字元型常量:‘\uXXXX’。其中,XXXX代表一個十六進位制整數。如:\u000a 表示\n。
- char型別是可以進行運算的。因為它都對應有Unicode碼。
/*
Java定義的資料型別
一、變數按照資料型別來分:
基本資料型別:
整型:byte \ short \ int \ long
浮點型:float \ double
字元型:char
布林型:boolean
引用資料型別:
類:class
介面:interface
陣列:array
二、變數在類中宣告的位置:
成員變數 vs 區域性變數
*/
class VariableTest1{
public static void main(String[] args) {
//2. 浮點型:float(4位元組) \ double(8位元組)
//① 浮點型,表示帶小數點的數值
//② float表示數值的範圍比long還大
double d1 = 12.3;
System.out.println(d1 +1);
//定義float型別變數時,變數要以"f" 或"F"結尾
float f1 = 12.3F;
System.out.println(f1);
//② 通常,定義浮點型變數時,使用double變數
//3. 字元型:char(1字元=2位元組)
//① 定義char型變數,通常使用一對''
char c1 = 'a';
//編譯不通過
//c1 = 'AB';
System.out.println(c1);
char c2 = '1';
char c3 = '中';
char c4 = '&';
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
//② 表示方式:1.宣告一個字元;2.轉義字元;3.直接使用Unicode值來表示字元型常量
char c5 = '\n'; //換行符
c5 = '\t'; //製表符
System.out.print("hello" + c5);
System.out.println("world");
char c6 = '\u0123';
System.out.println(c6);
char c7 = '\u0043';
System.out.println(c7);
}
}
瞭解:ASCII 碼
- 在計算機內部,所有資料都使用二進位制表示。每一個二進位制位(bit)有0 和1 兩種狀態,因此8個二進位制位就可以組合出256 種狀態,這被稱為一個位元組(byte)。一個位元組一共可以用來表示256 種不同的狀態,每一個狀態對應一個符號,就是256 個符號,從0000000 到11111111。
- ASCII碼:上個世紀60年代,美國製定了一套字元編碼,對英語字元與二進位制位之間的關係,做了統一規定。這被稱為ASCII碼。ASCII碼一共規定了128個字元的編碼,比如空格“SPACE”是32(二進位制00100000),大寫的字母A是65(二進位制01000001)。這128個符號(包括32個不能打印出來的控制符號),只佔用了一個位元組的後面7位,最前面的1位統一規定為0。
- 缺點:
- 不能表示所有字元。
- 相同的編碼表示的字元不一樣:比如,130在法語編碼中代表了é,在希伯來語編碼中卻代表了字母Gimel(ג)。
瞭解:Unicode 編碼
- 亂碼:世界上存在著多種編碼方式,同一個二進位制數字可以被解釋成不同的符號。因此,要想開啟一個文字檔案,就必須知道它的編碼方式,否則用錯誤的編碼方式解讀,就會出現亂碼。
- Unicode:一種編碼,將世界上所有的符號都納入其中。每一個符號都給予一個獨一無二的編碼,使用Unicode 沒有亂碼的問題。
- Unicode 的缺點:Unicode 只規定了符號的二進位制程式碼,卻沒有規定這個二進位制程式碼應該如何儲存:無法區別Unicode 和ASCII:計算機無法區分三個位元組表示一個符號還是分別表示三個符號。另外,我們知道,英文字母只用一個位元組表示就夠了,如果unicode統一規定,每個符號用三個或四個位元組表示,那麼每個英文字母前都必然有二到三個位元組是0,這對於儲存空間來說是極大的浪費。
瞭解:UTF-8
- UTF-8 是在網際網路上使用最廣的一種Unicode 的實現方式。
- UTF-8 是一種變長的編碼方式。它可以使用1-6 個位元組表示一個符號,根據不同的符號而變化位元組長度。
- UTF-8的編碼規則:
- 對於單位元組的UTF-8編碼,該位元組的最高位為0,其餘7位用來對字元進行編碼(等同於ASCII碼)。
- 對於多位元組的UTF-8編碼,如果編碼包含n 個位元組,那麼第一個位元組的前n位為1,第一個位元組的第n+1 位為0,該位元組的剩餘各位用來對字元進行編碼。在第一個位元組之後的所有的位元組,都是最高兩位為"10",其餘6位用來對字元進行編碼。
3.3.4、布林型別:boolean
- boolean 型別用來判斷邏輯條件,一般用於程式流程控制:
- if條件控制語句;
- while迴圈控制語句;
- do-while迴圈控制語句;
- for迴圈控制語句;
- boolean型別資料只允許取值true和false,無null。
- 不可以使用0或非0 的整數替代false和true,這點和C語言不同。
- Java虛擬機器中沒有任何供boolean值專用的位元組碼指令,Java語言表達所操作的boolean值,在編譯之後都使用java虛擬機器中的int資料型別來代替:true用1表示,false用0表示。———《java虛擬機器規範8版》
class VariableTest1{
public static void main(String[] args) {
//4. 布林型:boolean
//① 只能取兩個值之一:true 、false
//② 常常在條件判斷、迴圈結構中使用
boolean bb1 = true;
System.out.println(bb1);
boolean isMarried = true;
if(isMarried){
System.out.println("禁止入內!");
}else{
System.out.println("可以參觀!");
}
}
}
3.3、基本資料型別轉換
- 自動型別轉換:容量小的型別自動轉換為容量大的資料型別。資料型別按容量大小排序為:
- 有多種型別的資料混合運算時,系統首先自動將所有資料轉換成容量最大的那種資料型別,然後再進行計算。
- byte,short,char之間不會相互轉換,他們三者在計算時首先轉換為int型別。
- boolean型別不能與其它資料型別運算。
- 當把任何基本資料型別的值和字串(String)進行連線運算時(+),基本資料型別的值將自動轉化為字串(String)型別。
/*
基本資料型別之間的運算規則:
前提:這裡討論只是7中基本資料型別變數的運算。不包含boolean型別的。
1. 自動型別提升:
當容量小的資料型別的變數和容量大的資料型別的變數做運算時,結果自動提升為容量大的資料型別。
char、byte、short-->int-->long-->float-->double
特別的:當byte、char、short三種類型的變數做運算時,結果為int型別
2. 強制型別轉換:
說明:此時容量大小指的是,表示數的範圍的大和小。比如:float容量要大於long的容量
*/
class VariableTest2{
public static void main(String[] args) {
byte b1 = 2;
int i1 = 129;
//編譯不通過
// byte b2 = b1 + i1;
int i2 = b1 + i1;
long l1 = b1 + i1;
System.out.println(i2);
System.out.println(l1);
float f = b1 + i1;
System.out.println(f);
//***************特別的**************************
char c1 = 'a'; //97
int i3 = 10;
int i4 = c1 + i3;
System.out.println(i4);
short s2 = 10;
//編譯錯誤
// char c3 = c1 + s2;
byte b2 = 10;
// char c3 = c1 + b2; //編譯不通過
// short s3 = b2 + s2; //編譯不通過
// short s4 = b1 + b2; //編譯不通過
}
}
class VariableTest4{
public static void main(String[] args){
//1. 編碼情況
long l = 123456;
System.out.println(l);
//編譯失敗:過大的整數
//long l1 = 452367894586235;
long l1 = 452367894586235L;
//**************************
//編譯失敗
// float f1 = 12.3;
//2. 編碼情況2:
//整型變數,預設型別為int型
//浮點型變數,預設型別為double型
byte b = 12;
// byte b1 = b + 1; //編譯失敗
// float f1 = b + 12.3; //編譯失敗
}
}
3.3、字串型別:String
- String不是基本資料型別,屬於引用資料型別
- 使用方式與基本資料型別一致。例如:String str= “abcd”;
- 一個字串可以串接另一個字串,也可以直接串接其他型別的資料。例如:
/*
String型別變數的使用
1. String屬於引用資料型別
2. 宣告String型別變數時,使用一對""
3. String可以和8種基本資料型別變數做運算,且運算只能是連線運算;+
4. 運算的結果任然是String型別
*/
class StringTest{
public static void main(String[] args){
String s1 = "Good Moon!";
System.out.println(s1);
String s2 = "a";
String s3 = "";
// char c = ''; //編譯不通過
//*******************************
int number = 1001;
String numberStr = "學號:";
String info = numberStr + number; //連線運算
boolean b1 = true;
String info1 = info + true;
System.out.println(info1);
}
}
練習1
String str1 = 4; //判斷對錯:no
String str2 = 3.5f + “”; //判斷str2對錯:yes
System.out.println(str2); //輸出:”3.5”
System.out.println(3+4+“Hello!”); //輸出:7Hello!
System.out.println(“Hello!”+3+4); //輸出:Hello!34
System.out.println(‘a’+1+“Hello!”); //輸出:98Hello!
System.out.println(“Hello”+‘a’+1); //輸出:Helloa1
3.4、強制型別轉換
- 自動型別轉換的逆過程,將容量大的資料型別轉換為容量小的資料型別。使用時要加上強制轉換符:(),但可能造成精度降低或溢位,格外要注意。
- 通常,字串不能直接轉換為基本型別,但通過基本型別對應的包裝類則可以實現把字串轉換成基本型別。
- 如:
String a = “43”; inti= Integer.parseInt(a);
boolean
型別不可以轉換為其它的資料型別。
練習2
判斷是否能通過編譯
short s = 5;
s = s-2; //判斷:no
byte b = 3;
b = b + 4;//判斷:no
b = (byte)(b+4);//判斷:yes
char c = ‘a’;
int i = 5;
float d = .314F;
double result = c+i+d; //判斷:yes
byte b = 5;
short s = 3;
short t = s + b;//判斷:no
04、進位制
4.1、進位制與進位制間的轉換
關於進位制
- 所有數字在計算機底層都以二進位制形式存在。
- 對於整數,有四種表示方式:
- 二進位制(binary):0,1 ,滿2進1.以
0b
或0B
開頭。 - 十進位制(decimal):0-9 ,滿10進1。
- 八進位制(octal):0-7 ,滿8進1. 以數字
0
開頭表示。 - 十六進位制(hex):0-9及A-F,滿16進1. 以
0x
或0X
開頭表示。此處的A-F不區分大小寫。如:0x21AF +1= 0X21B0
- 二進位制(binary):0,1 ,滿2進1.以
class BinaryTest{
public static void main(String[] args){
int num1 = 0b110;
int num2 = 110;
int num3 = 0127;
int num4 = 0x110A;
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
System.out.println("num3 = " + num3);
System.out.println("num4 = " + num4);
}
}
4.2、二進位制
- Java整數常量預設是int型別,當用二進位制定義整數時,其第32位是符號位;當是long型別時,二進位制預設佔64位,第64位是符號位
- 二進位制的整數有如下三種形式:
- 原碼:直接將一個數值換成二進位制數。最高位是符號位
- 負數的反碼:是對原碼按位取反,只是最高位(符號位)確定為1。
- 負數的補碼:其反碼加1。計算機以二進位制補碼的形式儲存所有的整數。
- 正數的原碼、反碼、補碼都相同,負數的補碼是其反碼+1
為什麼要使用原碼、反碼、補碼錶示形式呢?
計算機辨別“符號位”顯然會讓計算機的基礎電路設計變得十分複雜! 於是人們想出了將符號位也參與運算的方法. 我們知道, 根據運演算法則減去一個正數等於加上一個負數, 即: 1-1 = 1 + (-1) = 0 , 所以機器可以只有加法而沒有減法, 這樣計算機運算的設計就更簡單了。
二進位制——》十進位制
原碼與反碼是幫助推匯出補碼而存在的!!!
十進位制——》二進位制
- 對於正數來講:原碼、反碼、補碼是相同的:三碼合一。
- 計算機底層都是使用二進位制表示的數值。
- 計算機底層都是使用的數值的
補碼
儲存資料的。
4.3、進位制間轉化
十進位制二進位制互轉
- 二進位制轉成十進位制乘以2的冪數
- 十進位制轉成二進位制除以2取餘數
評個分吧!覺得文章寫行不錯就點個贊,覺得寫得好就一鍵三連!✌