1 / 46

網路程式設計 第二章:程式語言概念

網路程式設計 第二章:程式語言概念. 開南資管 鄧姚文 http://w3.im.knu.edu.tw ywdeng@mail.knu.edu.tw. 大綱. 程式的符號 變數的設定 資料型別 運算符號 Java 的物件概念. 程式的符號. 程式只是一堆文字、數字、標記組合而成的檔案 程式中的文字組成包含了特定的原則 語法 (Syntax) 依照正確語法排列而成的文字才能被 Java 的編譯器接受。 各種程式語言定義的語法並不相同,一般而言,程式語言都會包含以下的組成元件:「識別字」、「關鍵字」或「保留字」、「資料常數」、「符號」等。.

gratia
Download Presentation

網路程式設計 第二章:程式語言概念

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 網路程式設計第二章:程式語言概念 開南資管 鄧姚文 http://w3.im.knu.edu.tw ywdeng@mail.knu.edu.tw

  2. 大綱 • 程式的符號 • 變數的設定 • 資料型別 • 運算符號 • Java 的物件概念

  3. 程式的符號 • 程式只是一堆文字、數字、標記組合而成的檔案 • 程式中的文字組成包含了特定的原則 • 語法 (Syntax) • 依照正確語法排列而成的文字才能被 Java 的編譯器接受。 • 各種程式語言定義的語法並不相同,一般而言,程式語言都會包含以下的組成元件:「識別字」、「關鍵字」或「保留字」、「資料常數」、「符號」等。

  4. 識別字(Identifiers) • 識別字是指變數(Variable)、方法(Method)、類別(Class)的名稱 • 識別字命名的原則有 • 由中英文字母、阿拉伯數字、$、_ 組成 • 第一個字不可以是阿拉伯數字 • 識別字中不能有標點符號、空白、運算符號 • Java 的關鍵字不可以當作識別字 • 英文字母大小寫視為相異 • 反例 • 3Q • student-name

  5. Java 的關鍵字(Keywords)

  6. 註解(Comment) // 單行註解 /* 多行 註解 */

  7. 資料常數 (Literals) • 不會再更改的資料內容

  8. 符號 (Symbol Identifiers) • 程式中的符號多半是運算符號。 • 例如:+、-、*、/、=...。 • 也可能是分隔符號。 • 例如「小括號 ( )」、「大括號{ }」、「分號 ( ; )」、「句號 ( . )」。

  9. 變數(Variables) • 在記憶體中保留特定大小的空間,讓程式執行時可以暫時儲存資料 • 必需先經過宣告,語法如下: • type name [= value] [, name [=value]...]; • 「type」是資料的型別, • 「name」是變數的名稱, • 可以使用「=」指定變數的初始值。 • 可以在指定型別後,同時宣告多個變數的內容,例如: • int days, months, years; //同時宣告三個整數變數 • int total; //只宣告一個整數變數 • int salary = 200, age=15; //宣告整數變數並指定初始值

  10. 變數範圍(Variables Scope) • 在區塊內宣告的變數,其有效範圍僅限區塊內 public class Door { String color; // OK public String paintColor(String s) { String color; // NOT OK double size; } public double getSize() { return size; // compile time error } }

  11. 區塊(Block) • 程式區塊以 { 開始,以 } 結束 public class Door { String color = “red”; double width = 200.0; double height = 75.0; public double getArea() { double area = height * width; return area; } }

  12. 指定(Assignment) x = 123; y = x + 321; y = y + 1; a = b = 100; • 將等號右邊的值,指定給等號左邊的變數 • 每一個敘述都必須以分號(;)結尾

  13. 資料型別 • Java程式是屬於「強型別 (strongly typed language) 」程式語言。 • 雖然 Java 也提供自動轉換資料型別的功能,但並不是所有的資料型別都可以自由地互相轉換。 • Java的資料型別可以概分為兩大類: • Primitive Data Type:基本資料型別 • 純數值,不是物件 • Reference Data Type:參考資料型別 • 結構複雜物件 • Java 定義了八個 Primitive Types,分為四大類,除了這八個資料型別外,其餘都屬於「參考資料型別」。

  14. 基本資料型別(Primitive Data Types) • 數字 • 整數(Integer) • 浮點數(Floating Point Numbers) • 文字 • 字元(Character) • 布林(Boolean)

  15. 基本資料型別(Primitive Data Types)

  16. 整數(Integer) • 預設型別:數字如果沒有小數點便是 int int i = 1234; // decimal 十進位 int j = 01234; // octal(664) 八進位 int k = 0xFF; // hexdecimal(255) 十六進位 long m = 13L; // 長整數 long n = 13; // 整數轉成長整數 int a = 13; byte b = a; // compile time error byte c = (byte)a; // OK

  17. 浮點數(Floating Point Number) • 預設型別:數字如果有小數點便是 double double p = 789.123; double q = 7.89123e+2; // 7.89123X102 double r = 789123e-3; // 0.789123X10-3 float x = 3.14F; float y = x + (float) p;

  18. 字元(Character) • 一個字 • Unicode char ans = 'A'; char code = 65; // 'A' 的 Unicode 碼是 65 char sn = '鄧'; char a = 'あ';

  19. 字元(Character) • 對於一些非ASCII字元集或是無法由鍵盤輸入的符號,可以使用16進位碼表示,格式為「/uHHHH」,「H」是16進位碼。例: • char x = '\u5496'; • 跳脫字元 (Escape Character)

  20. 布林(Boolean) • 布林變數只能儲存「true」或「false」,用來判斷儲存的資料內容為「真(成立) 」或「假 (不成立) 」。 • 不能在布林變數中儲存 0、1 或其他數值。 • 布林變數的預設值是「false」。 • 例: boolean done = false; done = (n > 100);

  21. 資料型別轉換(Casting) • 相同型別的物件之間才可以進行運算 • 三根香蕉+四顆硬碟 = ? • 自動型別轉換 • 自動將較小(簡單)的型別轉換成較大(複雜)的型別 • 相容的型別之間可以自動轉換

  22. 資料型別轉換(Casting) • 顯式型別轉換(Explicit Casting) • 強迫變小、變簡單 • 可能造成資訊遺失 --- 結果自行負責! • 例: int amount, salary = 12000; double tax = 0.6; amount = salary * 12 * tax; // 編譯時錯誤! • 更正成: amount = (int) (salary * 12 * tax); // OK

  23. 溢位 (Overflow) 處理 • Java 程式在執行時,並沒有溢位的問題。 • 當計算式中的數值超過資料型別所能容納的範圍後,數字會產生「轉折」的現象,我們稱之為「Modular」。 • 以「byte」型別為例,我們利用下圖來解釋「Modular」的現象:

  24. 常數 (Constants) 的宣告 • 常數:內容不改變 • 宣告的語法如下: final type NAME [= value]; • 以下的常數使用方式是合法的: final int HOURS = 24; //宣告時指定常數的內容 • 或者,我們也可以這樣的使用: final int HOURS; //宣告一個常數 HOURS = 24; //第一次指定內容

  25. 運算符號 • 運算式是由「運算子 (Operator)」和「運算元 (Operand)」組合而成的。 • 運算元代表資料 • 運算子決定資料的運算方式,又稱為「運算符號」。 • 例如:以下的表示式中: x = y + z; 「x」、「y」、「z」是運算元,「+」、「=」是運算子 • 分類: • 「算術運算子」、「指定運算子」、「關係運算子」、「邏輯運算子」、「字串運算子」

  26. 算術運算子

  27. 算術運算子 • 加法:+ • 減法:- • 乘法:* • 除法:/ • 整數的除法沒有小數,也不留餘數 • 取餘數:% • 限用於整數 5 / 2 = 2 5 % 2 = 1

  28. 「++」和「--」運算子 • ++ 加一 • -- 減一 • x++ 等同於 x = x + 1; • 運算子置於變數之前或變數之後,對於變數本身的內容改變的時間並不相同 • 「++」或「--」放於變數之後,在整行運算式執行完成後,變數本身的值才會增加1。 • 「++」或「--」放於變數之前,變數本身的值先增加1,再執行運算式 a = 100; b = a++; // b is 100, a is 101 c = ++a; // c is 102, a is 102

  29. 結合指定運算 int x = 1; int y = 2; x += 3; //相當於 x = x + 3 y -= x; //相當於 y = y - x x *= 2; //相當於 x = x * 2 y /= 6; //相當於 y = y / 6 x %= 4; //相當於 x = x % 4 z >>>= 1; //相當於 z = z >>> 1

  30. x y 0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 位元平移運算子 • y = x << 1; // 相當於 y = x * 2 • MSB 捨去,最右邊插入一個 0 • z = x >> 1; // 相當於 z = x / 2 ? • 保險起見,使用 z = x >>> 1

  31. 關係運算子 • 運算結果不是 true 就是 false • 大於:> • 小於:< • 相等:== • 大於等於:>= • 小於等於:<= • 不等於:!=

  32. 邏輯運算子 • 紀錄某件事情是『真』還是『假』

  33. 邏輯運算子

  34. 位元邏輯運算子

  35. 字串(String) • 字串是物件 • Instances of java.lang.String String s1 = new String("Hello "); String s2 = "Baby"; String s3 = s1 + s2; // s3 is "Hello Baby"

  36. Java的物件概念 • 物件變數的宣告僅只是配置了存取物件的「參考 (reference)」,並未配置該物件的實際儲存空間 • 物件必需「實體化」後才會有記憶體空間 。 • 物件具有屬性和方法 • 屬性:資料 • 方法:動作、副程式 • 物件有生命週期,物件不再使用時,所佔的系統資源必需回收 • Java 不允許程式直接操作記憶體,JVM 代為管理記憶體 • Garbage Collection:JVM 回收不再被使用的物件

  37. Wrapper Class • Primitive 型別的資料並不是物件 • Wrapper Class 將基本資料型別轉換成物件

  38. Integer類別 • Integer 類別對應 int • 例: int i = 123; //宣告一個int變數並指定值 //宣告一個Integer物件並指定值 Integer i = new Integer(123); //宣告一個Integer物件並指定值 Integer i = new Integer("123");

  39. 同一個物件(位址相同) Object a; Object b; … a == b ? 內容相同 Student a, b; … a.setName(“John”); b.setName(“John”); a.equals(b)? 同一個物件?同一個位址?內容相同?

  40. 練習 • 輸出下列變數的計算結果 Integer a = new Integer(10); Integer b = new Integer(10); Integer c = a; boolean same1 = (a == b); boolean same2 = (b == c); boolean same3 = (c == a); boolean same4 = c.equals(b);

  41. 練習-1

  42. Wrapper Class 比大小 • 使用「equals」比較兩個 Wrapper Class 物件所存放的數值是否相同 • 使用「compareTo」比較兩個 Wrapper Class 物件所存放的數值大小 • compareTo 傳回一個整數 • 等於 0,兩個物件存放的數值相等。 • > 0,呼叫此方法的物件值大於傳入該方法的物件值 • < 0,呼叫此方法的物件值小於傳入該方法的物件值

  43. Character類別

  44. Boolean類別 • Boolean類別對應到 boolean 這個基本資料型態。 • 建構Boolean物件時,可以傳入一個boolean值或是傳入一個字串。如果傳入的字串是「true」,不論大小寫,Boolean物件存放的值都是「true」,如果傳入其他的字串物件存放的值都是「false」。 • 參考以下的程式碼: • boolean b; • b = new Boolean(true); //b為true • b = new Boolean(false); //b為false • b = new Boolean("True"); //b為true • b = new Boolean("Qoo"); //b為false

  45. Byte類別 • Byte類別對應到 byte 這個基本資料型態。 • 建構Byte物件時,可以傳入一個 byte 值或傳入一個字串。如果傳入字串的格式不符合byte 格式時,程式執行時會產生NumberFormatException例外物件。 • Byte類別中常用到的方法有

  46. Boxing與AutoBoxing-J2SE 5.0 • 將 Primitive 資料轉換為相對應的 Wrapper 物件稱為「Boxing」;轉換時,必需自行建構 Wrapper 物件。 • 將 Wrapper 物件轉換為相對應的 Primitive 資料稱為「UnBoxing」,必需指定相關的方法傳回值。 • 在J2SE 5.0新增了「AutoBoxing」的功能,由 Complier 在「Boxing」時自動的產生 Wrapper 物件或是在「UnBoxing」時自動取出 Wrapper物件中的值。例如: int p = 600; //沒有使用AutoBoxing,要自行建構Wrapper物件 Integer v1 = new Integer(p); //使用AutoBoxing,由Compiler自動產生Wrapper物件 Integer v2 = p; //沒有使用AutoBoxing,使用intValue方法取得值 int p2 = v1.intValue(); int p3 = v1; //使用AutoBoxing,由Compiler自動取出值

More Related