1 / 14

基礎的工具類別

基礎的工具類別. 井民全 http://debut.cis.nctu.edu.tw/~ching. 數學工具. Java 直接提供 整數 與 浮點數 的運算 高層次的運算由 java.lang.Math 類別提供 Java 為基本資料型態提供 包裹器類別  把基本類別視為物件 java.util.Random 類別可提供亂數的功能. 整數運算發生錯誤 : 由 ArithmeticException 來處理. int zero = 0; tr y { int i= 72 / zero ;

edolie
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://debut.cis.nctu.edu.tw/~ching

  2. 數學工具 • Java 直接提供整數與浮點數的運算 • 高層次的運算由java.lang.Math類別提供 • Java 為基本資料型態提供包裹器類別 把基本類別視為物件 • java.util.Random類別可提供亂數的功能 整數運算發生錯誤: 由 ArithmeticException來處理 int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // 被 0 除 } 若公然的除 0, 編譯器會警告我們

  3. 數學工具: 浮點數不會丟出例外 • 以超出範圍的特殊值代替 • Nan • 表示其結果為 not a number • 不等於自己, 故 Double.Nan != Double.Nan 結果為 true • 如何判斷 Nan • Float.isNaN( ) ; Double.isNaN( ) double zero = 0.0 ; double d = 1.0 / zero ; if( d == Double.POSITIVE_INFINITY ) System.out.println( “發生除 0 狀況”) ; 會產生無限大的例子

  4. 數學工具: java.lang.Math類別 • 數學函式庫且所有的method 都是靜態,所以可以直接使用,無須宣告一個Math物件 Math.E  自然對數 (2.71828 …) Math.PI  圓週率 (3.14159…)

  5. 注意: log(), pow(), sqrt() 發生錯誤時, 會丟出 ArithmetricException 範例: double irrational=Math.sqrt(2.0); int bigger=Math.max(3,4); long one=Math.round(1.125789);

  6. 數學工具: java.math套件 • 若 long 和 double 還不夠長的話, java.math 套件提供了兩個類別 BigInteger與 BigDecimal • 它們支援任意精確度 try{ BigDecimal twentyone=new BigDecimal(“21”) ; BigDecimal seven = new BigDecimal(“7”) ; BigDecimal sum = twentyone.add(seven) ; int answer = sum.intValue( ); } catch ( NumberFormatException nfe) { } catch ( ArithmeticException ae) { }

  7. 取代環境變數的類別 java.util.Properties • 專門為了字串而有的 hash table • 可用來保存任何應用程式的組態資訊 • 可以下載或儲存串流 取出值: getProperty( ) 加入 String 的 Key / Value pair String xsize=props.getProperty(“myApp.xsize”); Properties props = new Properties(); props.put(“myApp.xsize”,”52”); props.put(“myApp.ysize”,”79”); 取出所有的Properties: propertyNames( ) for(Enumeration e=props.propertyNames(); e.hasMoreElements();) { String Name=e.nextElement(): … } 若指定的 property 不存在, getProperty() 會傳回 null 值

  8. 當找不到key時, 使用預設值 • 利用預設表設定預設值 Properties 預設表; … Properties props=new Properties(預設表); • 利用 getProperty() 方法, 指定預設值 String xsize=props.getProperty(“myApp.xsize”,”50”); 預設值

  9. 將 Properties 存到檔案 • 利用 store() method 可將資料存到 OutputStream 中 • 資訊以 ASCII 格式輸出 • 輸出到螢幕 props.store(System.out , “標頭: Application Parameters”); • 輸出到檔案 FileOutStream out=new FileOutStream(“屬性檔.txt”); props.store(out , “標頭: Application Parameters”); Jdk1.2以後 save 改由 store 輸出的結果 #標頭: Application Parameters #Mon Feb 12 09:24:23 CST1999 myApp.ysize=79 myApp.xsize=52

  10. 由檔案載入properties • 利用 load() 從 InputStream 讀取資料 FileInputStream fin=new FileInputStream(屬性檔.txt”); … Properties props=new Properties(); props.load( fin );

  11. System property • Java.lang.System 提供靜態的 System.getProperty()傳回環境變數

  12. 設定系統參數 Applet 會避免讀取下列 properties: java.home; java.class.path; user.name; user.home; user.dir • 你的程式可以用 System.setProperty()設定參數 • 當你執行 java 直譯器時, 可使用 –D C:> java –Dfoo=bar -Dcat=Boojum MyApp • 便利方法 Boolean , Integer, Long, Color都有 get 方法用來查詢系統參數 Ex: Integer.getInteger(“foo”); // 找尋系統中叫做 foo 的參數值 Color.getColor(“foo”); // 將參數轉成 Color 物件 類別名稱

  13. 觀察者與被觀察者 • java.util.Observer 介面 (觀察者) • java.util.Observable 類別 (被觀察者) 當物件或資源 (被觀察者)改變時, 必須設法通知 用戶端物件(觀察者) 基本想法: 1. 被觀察者(Observable) 有個方法可以提供註冊 2. 想要觀察它的物件(Observer) 都呼叫該方法進行註冊 3. 當改變發生時, Observable 一個一個通知註冊的成員 (利用 呼叫成員的 update () method)

  14. 佈告欄(MessageBoard) 延伸 Observable(被觀察者) • 繼承 • 註冊 method  addObserver() • 發布消息 method  notifyObserver() public String getMessage(){ return message; } import java.util.*; public class MessageBoard extends Observable { } public void changeMessage(String Message){ this.message=message; setChanged(); notifyObservers(message); } public void static main(String []args){ MessageBoard board = new MessageBoard(); Student bob= new Student(); Student joe = new Student(); board.addObserver(bob); board.addObserver(joe); board.changeMessage(“出作業了”); } 註冊 class Student implements Observer { public void update(Obserable o, Object arg) { System.out.println(“版面改變了”+ arg ); } } 發佈消息

More Related