1.62k likes | 1.9k Views
SL-275 Java Programming Language 補充資料. Sean Cheng sean.cheng@ever.com.tw. Sun Certified Path. J2SE. J2ME. SUN CERTIFIED PROGRAMMER FOR JAVA 2 PLATFORM SCJP. SUN CERTIFIED MOBILE APPLICATION DEVELOPER FOR J2ME PLATFORM SCMAD. J2EE. SUN CERTIFIED DEVELOPER FOR JAVA 2 PLATFORM SCJD.
E N D
SL-275Java Programming Language補充資料 Sean Cheng sean.cheng@ever.com.tw
Sun Certified Path J2SE J2ME SUN CERTIFIED PROGRAMMER FOR JAVA 2 PLATFORM SCJP SUN CERTIFIED MOBILE APPLICATION DEVELOPER FOR J2ME PLATFORM SCMAD J2EE SUN CERTIFIED DEVELOPER FOR JAVA 2 PLATFORMSCJD SUN CERTIFIED WEB COMPONENT DEVELOPER FOR J2EE PLATFORM SCWCD SUN CERTIFIED BUSINESS COMPONENT DEVELOPER FOR J2EE PLATFORM SCBCD SUN CERTIFIED ENTERPRISE ARCHITECT FOR J2EE TECHNOLOGY SCEA
SCJP Objectives • 宣告與存取控制 • 陣列 • 建構式 • 宣告類別, 巢狀類別, 方法, 參考變數, 靜態變數與區域變數與正確的修飾子 • 流程控制, assertions與例外控制 • if 和switch 分支敘述 • while, do 和for 迴圈敘述 • 例外控制 • 正確的使用assertions與分辨適合與不適合使用
SCJP Objectives • 垃圾回收機制 • 瞭解程式碼中符合垃圾回收機制的物件 • Java 程式語言 • 正確的使用package與import敘述, 類別, 內部類別, 抽象類別與介面的宣告, 方法與變數的宣告 • main 方法與命令列參數 • Java程式語言關鍵字 • 基本資料型態的資料範圍
SCJP Objectives • 運算子與指定 • 多載, 覆載, 執行時期型態與物件導向 • 執行緒 • java.lang套件 • 集合資料架構
How to be a SCJP • 向昇陽公司購買准考證(voucher) • 網址: http://tw.sun.com/education/Exam_path.html • 向Prometric報名考試, 約定考試時間與地點 • 網址: http://www.2test.com • 免付費電話(國語): 0080-161-1104 • 在考試約定時間15分鐘前攜帶身份證到考場準備考試
Congratulations • 考試結束後馬上知道結果, 考場人員會交給你一份成績單, 請保存好成績單 • 通過認證後約二週到一個月就可以收到美國昇陽公司寄出的Successful kits • SCJP證書 • SCJP徽章 • SCJP卡片 • SCJP Logo使用授權同意書
SL-110 Java初階程式設計 SL-275 Java程式設計 OO-226 OOAD Using UML SL-314 Java Web 元件 FJ-310 J2EE相容應用程式 SL-285 Java程式實務 SL-351 Java進階商用元件 Sun Java Course Path
課程準備 • 電腦基本操作(Windows 9x, 2000, XP) • 使用簡單的文字編輯器撰寫文件或程式 • 使用瀏覽器(IE or Netscape) • 課程環境設定 • Download Java SDK及文件 • 安裝 Java SDK及文件 • 環境變數設定 • Path = <JAVA_HOME>\bin • ClassPath = . • 安裝文字編輯器 (EditPlus2)
Module 1 Getting Started
Java Key Concepts • 物件導向 (Object-Oriented) • 分散式 (Distributed) • 簡單 (Simple) • 多執行緒 (Multithreaded) • 安全性 (Secure) • 跨平台 (Platform-independent)
…… …… …… …… …… …… Class Loader javac java *.java *.class Byte code Verifier Interpreter JIT Code Generator Runtime Hardware Java Runtime Environment • Loads Code • Class Loader • Verifies Code • Bytecode Verifier • Executes Code • Runtime Interpreter
Object Interaction System Entry Point Orders Shirt Customer Date Shirt Shirt
Optional Class Structure • Class as object’s blueprint • Declare class for every object • Class 基本結構 • Class declaration • Attributes • Methods (operations) • Comments
Structuring Classes public class Shirt { public int shirtID = 0; public String description = "-description required-"; public char colorCode = 'U'; public double price = 0.0; public int quantityInStock = 0; public void displayShirtInformation() { System.out.println("Shirt ID: " + shirtID); System.out.println("Shirt description:" + description); System.out.println("Color Code: " + colorCode); System.out.println("Shirt price: " + price); System.out.println("Quantity in stock: " + quantityInStock); } }
Name of the class Keyword Accessibility Class Declaration [modifiers] class <class_name> { } • Modifier為public的類別,需存在class_name.java的檔案中 • 一個Java檔案,可包含一個以上的類別宣告 • 多個類別宣告在一個Java檔案中,只能有一個public的類別
Initialize literal values Name of the attribute Primitive or reference type Accessibility Attribute Variable Declaration [modifiers] <type> <name> [=initial_values]; • 程式中用變數來存放需使用到的資料 • 變數定義在class body內用來表示物件的屬性 • 變數也可以用存放臨時使用到的資料
Arguments list Name of the method Return data type Accessibility Method Declaration [modifiers] <return_type> <name> ([arguments]) { } • 方法如不需傳回值,return type 為 void • Argument list: • 可為0~N個 • Type Name • 若有一個以上,用,隔開
Comments • 單行註解 public int shirtID = 0; //Default ID for the shirt // The color codes are R= Red, B= Blue • 多行註解 /* this is a multi-line comment */ • JavaDoc 註解 /** The following comment will be show in JavaDoc */
String array argument Name of the method No return data Modifiers main Method public static void main (String args[]) { } • 符合標準的main(),才可被JRE當作程式的進入點 • Modifier • 可加上final • 順序可不同 • 字串陣列可用另一方法表示 • String [] args • 字串陣列名稱不一定要為args
Compiling & Executing a Java Program public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } …… …… …… javac java HelloWorld.java HelloWorld.class
Module 2 Object-Oriented Programming
Abstraction • 抽象化 • 將實際實作的細節隱藏在公開的介面之後 • 抽象化的應用 • 將重覆使用的運算,獨立成Function • 將行為及相關的屬性集合成物件 • 將多個物件集合成架構FrameWork,提供複雜的功能
類別 vs. 物件 • 物件是類別的一個實體 • 類別是同類型物件的共同藍圖 • Java programmer 設計類別及類別之間的互動關係. • Java 應用程式執行時,JVM 根據類別定義建立物件(系統中配置記憶體),並處理物件之間互動產生之的狀態變化(記憶體中的儲存值的改變)
Object-Oriented 程式特性 • Encapsulation • Inheritance • Polymorphism
行為(方法) 身份確認 存款 提款 餘額查詢 狀態(屬性) 帳號 戶名 餘額 Encapsulation • 封裝 encapsulation • 保護類別中的資料,不讓資料被誤用或破壞 • 隱藏實作的細節 • 封裝的方法 • 更改屬性為private • 提供存取屬性的方法 • Accessor (getter & setter) • Setter提供保護資料的邏輯 • 欲存取此類別之資料,需使用類別所提供的方法來存取
Encapsulation - continue public class MyDate { public int day; public int month; public int year; } public class MyDate { private int day; private int month; private int year; public void setDate(int day, int month, int year) { ………… ………… } public String getDate() { return day +”\”+ month +”\”+ year; } } setter method setXXX( ) getter method getXXX( )
public class TestMyDate { public static void main(String args[]) { MyDate d = new MyDate(); d.day = 30; d.month = 2; d.year = 2003; System.out.println(day +”\”+ month + ”\”+ year); d.setDate(28,2 2003); System.out.println(“Date: “ + d.getDate()); } } public class MyDate { private int day; private int month; private int year; public void setDate(int day, int month, int year) { ……….. ………… } public String getDate() { return day +”\”+ month +”\”+ year; } } compile error! Encapsulation - continue
Creating Constructors [modifiers] class <class_name> { [modifiers] constructor_name([arguments]) { code_blocks } } Arguments list Same as class_name Accessibility
Constructors • 與類別名稱一樣 • 沒有回傳型態 • 自行建立後預設建構子即失效 • 可以多載(Overloading)
Default Constructor public class People { private String name; private int age; public String show () { System.out.println(name + “ “ + age); } } javac People.java public class People { private String name; private int age; public People() {} public String show () { System.out.println(name + “ “ + age); } }
Constructors overloading public class People { private String name; private int age; public People(String newName) { name = newName; age = 0; } public People(String newName, int newAge) { name = newName; age = newAge; } }
套件(package)的使用 • 目的 • 將不同的類別檔案,分門別類放在一起 • 使大型的軟體系統易於管理 • 使類別名稱不相衝突 • 提供package(default)的存取保護 • 實體型態 • 同電腦之檔案目錄系統
Shipping GUI reports Company.class domain Vechicle.class RiverBarge.class Truck.class 類別放入相關目錄
Package陳述式 • Package 宣告 Package <package名稱>[.<subPackage名稱>]*; • 一個 Java 原始檔中只能有一個套件的宣告, • 如果檔案有套件宣告,一定要在第一行 • 沒有套件宣告的類別則屬於預設套件 (default package), 就是目前目錄 • Package 命名 com.company.package…. • 通常全為小寫字母
Package下編譯與執行 • 切換至application根目錄 來 compile 較不會有問題(找不到 class的問題.) • 編譯 javac <package 路徑>\類別名稱.java • 執行 java <package 路徑>.<類別名稱>
使用Package成員 • Package下類別使用 • 引用同package之下的類別,可直接使用類別短名 • 引用不同package之下的類別,不可直接使用類別短名,需使用類別長名 • 類別的長名vs.短名 • 短名:類別名稱本身 • 長名:短名前面再加上其package名稱
使用其他Package成員 • 使用其他Package成員 • 以類別的長名存取 • 引入(import)package特定成員 • 引入(import)成員所屬package (import package…*)
import 陳述式 • import 陳述式宣告 • 引入(import)package特定成員 import package名稱.類別名稱; • 引入(import)成員所屬package import package名稱.*; • 不包含subPackage中的成員 • 告訴compiler,可能的類別長名為何 • import並不會造成效能降低,但會使編譯時間變長
import注意事項 • 預設自動import • java.lang.* • default package(目前工作目錄) • 避免名稱混淆 • 同一個短名,在classapth中可找到兩個不同的長名定義時,仍需用類別長名來存取
Source File Layout [ <package_declaration>] [ <import_declaration> ] * <class__declaration> * • 宣告一定要依照上述的順序 • 一個Source file可以有多個class宣告,但只能有宣告為public,該public類別與source file同名
Classpath設定 • 告訴電腦去哪裡找編譯或執行時所需要的類別 • 設定環境變數classpath classpath = .;d:\sample;c:\java; • 編譯及執行時期指定類別路徑 javac –classpath 類別路徑 檔案名稱 java –classpath(-cp) 類別路徑 類別名稱
Module 3 Identifiers, Keywords, and Types
Identifier • 下列四種字元組成 • Unicode letters A-Z, a-z, 中文, … • Underscore _ • Dollar sign $ • Digits 0,1,…9 (不能出現在起始字元) • 不可為keywords / Reserved words • 大小寫有別 Case sensitive
Literals • A value: 出現在程式中的一個數值 • boolean • 只有 true 和 false • 整數 • 三種型式: 十, 八, 十六進位 • 兩種型態: int (預設) 與 long (字尾加上L) • 浮點數 • 兩種型態: float (字尾加上F)與double (預設, 字尾加上D) • 字元: 使用單引號 (‘) • 字串: 使用雙引號 (“)
Constructing & Initializing Objects public class MyDate { private int year = 2000; private int month = 1; private int day = 1; public MyDate(int d, int m, int y) { year = y; month = m; day = d; } } MyDate my_birth = new MyDate(22, 7, 1964); Stack Memory