1. 程式人生 > 其它 >JavaSE(4)——變數

JavaSE(4)——變數

一、關鍵字和保留字


1. 關鍵字

  • 定義:被Java語言賦予了特殊含義,用做專門用途的字串(單詞)。
  • 特點:關鍵字中所有字母都為小寫。

2.保留字
現有Java版本尚未使用,但以後版本可能會作為關鍵字使用。自己命名識別符號時要避免使用這些保留字。(goto、const

二、識別符號


  • 定義:Java對各種變數、方法和類等要素命名時使用的字元序列稱為識別符號。

  • 技巧:凡是自己可以起名字的地方都叫識別符號。

  • 定義合法識別符號的規則:(合法識別符號例如:mileTesta0dad_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;
	}
}
  • 資料型別: (按資料型別分類)
    • 基本資料型別

      • 數值型

        • 整數型別(byteshortintlong)
        • Java各整數型別有固定的表數範圍和欄位長度,不受具體OS的影響,以保證java程式的可移植性。
        • Java的整型常量預設為int型,宣告long型常量須後加lL
        • Java程式中變數通常宣告為int型,除非不足以表示較大的數,才使用long
        • 浮點型別(floatdouble)
        • 與整數型別類似,Java浮點型別也有固定的表數範圍和欄位長度,不受具體作業系統的影響。

        • 浮點型常量有兩種表示形式:

          • 十進位制數形式:如:5.12512.0f.512(必須有小數點)
          • 科學計數法形式:如:5.12e2512E2100E-2
        • float:單精度,尾數可以精確到7位有效數字。很多情況下,精度很難滿足需求。

        • double:雙精度,精度是float的兩倍。通常採用此型別。

        • Java的浮點型常量預設為double型,宣告float型常量,須後加fF

        • 通常,定義浮點型變數時,使用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個位元組的方式儲存。

      • ASCII

        • 國外最早使用的字元編碼,用於表示英文字元和一些控制字元。
      • Unicode

        • 隨著電腦的普及,越來越多的國家使用電腦,為了滿足需求,就擴充了字符集。
      • UTF-8

        • 比Unicode更大的字符集
      • GB2312

        • 漢字字符集
      • 布林型(boolean)
      • 常常用來判斷邏輯條件。
      • 只有兩個值truefalse。(Java不可以是哦那個0或者非0的整數代替truefalse,這要區別C語言)
    • 引用資料型別(引用型變數後面會做細緻介紹)

    • (class)

    • 介面(interface)

    • 陣列([])

基本資料型別的轉換:(前提這裡只是討論七種基本資料型別變數間的運算,不包含boolean型別的。)

  • 自動型別提升: 當容量(這裡容量的大小指的是數表示的範圍的大小)小的資料型別的變數與容量大的資料型別的變數做運算的時候,結果自動提升為容量大的資料型別。(byteshortchar``這三種類型相互運算的時候結果都是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/lfloat型變數在定義的時候,什麼時候後面需要加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 區域性變數