360 likes | 481 Views
第四單元. 宣告、初始化和使用變數. 單元概論. 單元目標 學習變數的使用方法與定義變數的語法 列出 Java 程式語言的八個基本型別 根據 Java 程式語言的指導方針和語法規則來宣告、初始化及使用變數與常數 使用運算子( operator )來更改變數值 使用晉升( promotion )與型別轉換( type casting ) 問題與討論. 學習變數的使用和語法. 範例: 1 public class Shirt { 2 3 public int shirtID = 0; // 襯衫的預設 ID
E N D
第四單元 宣告、初始化和使用變數
單元概論 • 單元目標 • 學習變數的使用方法與定義變數的語法 • 列出Java程式語言的八個基本型別 • 根據Java程式語言的指導方針和語法規則來宣告、初始化及使用變數與常數 • 使用運算子(operator)來更改變數值 • 使用晉升(promotion)與型別轉換(type casting) • 問題與討論
學習變數的使用和語法 範例: 1 public class Shirt { 2 3 public int shirtID = 0; // 襯衫的預設 ID 4 public String description = “-description required-”; // 預設 5 6 // 顏色代碼為 R=紅色, B=藍色, G=綠色, U=未設定 7 public char colorCode = ‘U’; 8 9 public double price = 0.0; // 所有襯衫的預設價格 10 11 public int quantityInStock = 0; // 所有襯衫的預設數量 12 13 // 這方法印出項目的所有值 14 public void displayShirtInformation() { 15 16 System.out.println(“Shirt ID: “ + shirtID); 17 System.out.println(“Shirt description:” + description);
18 System.out.println(“Color Code: “ + colorCode); 19 System.out.println(“Shirt price: “ + price); 20 System.out.println(“Quantity in stock: “ + quantityInStock); 21 22 } // display方法的結尾 23 } // 類別的結尾
變數的使用 • 紀錄物件實體中唯一的資料 • 指派一個變數值給其他變數 • 在數學表示式中用來代表數值 • 在螢幕中印出變數值 • 儲存參考至其他物件
變數的宣告與初始化 • 語法(屬性或實體變數): [modifiers] type identifier = [value]; • 語法(區域變數): type identifier; • 語法(區域變數): type identifier = [value]; • 範例: public int shirtID = 0; public String description = "-description required-"; public char colorCode = ’U’; public double price = 0.0; public int quantityInStock = 0;
描述基本資料型別 • 整數型別(byte、short、int和long) • 浮點數型別(float和double) • 字元型別(char) • 邏輯型別(boolean)
整數基本型別 public int shirtID = 0; // 襯衫預設的 ID public int quantityInStock = 0; // 所有襯衫預設的數量
浮點數基本型別 public double price = 0.0; // 所有襯衫預設的價格
文字基本型別 • 唯一的資料型別為char • 用來儲存16bits的單一字元,如’y’字元 • 範例: public char colorCode = ’U’;
邏輯基本型別 • 唯一的資料型別為boolean • 只能用來儲存true或false • 用來儲存運算式的運算結果為true或false
變數命名 • 命名規則: • 變數識別字必須以大寫或小寫字母、底線(_)或錢字符號($)作為開頭字母。 • 變數識別字不要使用標點符號、空白、破折號或任何Java程式語言的關鍵字。
變數命名 • 命名準則: • 以小寫字母為每個變數的開頭;隨後的單字就以大寫字母為開頭,如:myVariable。 • 選擇可以幫助記憶,並設計可以讓使用者了解此變數使用目的的變數名。
指派一個變數值 • 範例: price = 12.99; • 範例(boolean): boolean isOpen = false;
在一行程式中宣告與初始化變數 • 語法: type identifier = value [, identifier = value]; • 範例: double price = 0.0, wholesalePrice = 0.0;
其他宣告與初始化變數的方法 • 指派字面字(literal)值: int ID = 0; float pi = 3.14F; char myChar = ’G’; boolean isOpen = false; • 指派一個變數值給另一個變數: int ID = 0; int saleID = ID;
其他宣告與初始化變數的方法 • 將運算式的結果指派給整數、浮點數或布林變數 float numberOrdered = 908.5F; float casePrice = 19.99F; float price = (casePrice * numberOrdered); int hour = 12; boolean isOpen = (hour > 8); • 指派方法呼叫的回傳值給變數
常數 • 變數(可更改): double salesTax = 6.25; • 常數(不可更改): final double SALES_TAX = 6.25; • 命名準則-常數全部的字母都為大寫並使用底線(_)來分開詞句。
練習一:在程式中使用基本資料型別變數 • 目標 • 步驟 • 討論
遞增與遞減運算子 • 長的表示方式: age = age + 1 • 短的表示方式:
遞增與遞減運算子(++與--) 範例: int count=15; int a, b, c, d; a = count++; b = count; c = ++count; d = count; System.out.println(a + “, “ + b + “, “ + c + “, “ + d);
運算子的優先順序 • 運算子優先順序的規則 • 有一對圓括弧的運算子 • 遞增及遞減運算子 • 乘法與除法運算子是由左而右做計算 • 加法與減法運算子是由左而右做計算 • 需要運算子優先順序的範例: c = 25 - 5 * 4 / 2 - 10 + 4; 答案是34或9呢?
使用圓括弧 範例: c = (((25 - 5) * 4) / (2 - 10)) + 4; c = ((20 * 4) / (2 - 10)) + 4; c = (80 / (2 - 10)) + 4; c = (80 / -8) + 4; c = -10 + 4; c = -6;
晉升與型別轉換 • 問題: int num1 = 53; // 32 bits 記憶體來儲存值 int num2 = 47; // 32 bits 記憶體來儲存值 byte num3; // 預留 8 bits 記憶體 num3 = (num1 + num2); // 會造成編譯錯誤 • 解法: int num1 = 53; int num2 = 47; long num3; num3 = (num1 + num2);
晉升 • 自動發生的晉升: • 如果你指派一個較小型別的變數給一個較大型別的變數時 • 如果你指派一個整數型別的變數給一個浮點數型別的變數時 • 自動發生晉升的範例: long big = 6; int small = 99L;
型別轉換 • 語法: identifier = (target_type) value • 問題: int num1 = 53; // 32 bits 記憶體來存放值 int num2 = 47; // 32 bits 記憶體來存放值 byte num3; // 預留 8 bits 記憶體 num3 = (num1 + num2); // 發生編譯錯誤 • 解法: int num1 = 53; // 32 bits 記憶體來存放值 int num2 = 47; // 32 bits 記憶體來存放值 byte num3; // 預留 8 bits 記憶體 num3 = (byte)(num1 + num2); // 沒有資料遺失
型別轉換 範例: int myInt; long myLong = 99L; myInt = (int) (myLong); // 沒有資料遺失,只有零被刪除 // 更大的數目將會造成資料遺失 // 失 int myInt; long myLong = 123987654321L; myInt = (int) (myLong); // 數目會被截掉
編譯器對整數與浮點數資料型別的假設 • 問題: short a, b, c; a = 1 ; b = 2 ; c = a + b ; • 解法: • 在開始的宣告中,宣告c變數為int型別: int c; • 在指派那行中,對(a+b)的結果作型別轉換: c = (short) (a+b);
浮點數資料型別與指派 • 問題: float float1 = 27.9; • 解法: • F用來提醒編譯器27.9是float型別: float float1 = 27.9F; • 27.9被轉換成float型別: float float1 = (float) 27.9;
範例 1 public class Person { 2 3 public int ageYears = 32; 4 5 public void calculateAge() { 6 7 int ageDays = ageYears * 365; 8 long ageSeconds = ageYears * 365 * 24L * 60 * 60; 9 10 System.out.println(“You are “ + ageDays + “ days old.”); 11 System.out.println(“You are “ + ageSeconds + “ seconds old.”); 12 13 } // calculateAge 方法的結尾 14 } // 類別的結尾
練習二:使用運算子與型別轉換 • 目標 • 步驟 • 討論 • 解答