2012年7月3日 星期二

0703 JSP JAVA 基礎複習 COLLECTION集合

利用四星彩範例解釋 Java 語言Collcetion集合
ArrayList LinkedList 的差異
1.ArrayList 欲加入物件時會產生一個新的物件
2.LinkedList 欲加入物件時會由加入的物件中建立下一個連結,原物件再指向新加入的物件
3.再新增元素時執行速率上Linkedlist 會比ArrayList快<
4.再搜尋時ArrayList的速度較快
檔案請參考

FS 1(fourstar) 僅用ArrayList 宣告及定義
本次須注意 ArrayList 及al.size 
import java.util.*;

public class FourStar {                                                
  public static void main(String[] args) {                    
    ArrayList al = new ArrayList();                             
    while (al.size() < 4) {                                               
      al.add(new Integer((int)(Math.random() * 10)));   (新加入亂數取值的方始)
    }                                                                                
//    System.out.println(al);                                          
    Iterator it = al.iterator();                                        
    while (it.hasNext()) {                                               
      System.out.print( it.next() );                                 
    }
  } //main
} //class

FS1 的批次檔
del *.class                  (kill 現有其他的class 免得衝突)
javac FourStar.java   (編譯FS1的新class)
java -cp . FourStar
pause                           (畫面暫停)


FS2
import java.util.*;

public class FourStar2 {
  public static void main(String[] args) {
    LinkedList ll = new LinkedList();
    while (ll.size() < 4) {
      ll.add(new Integer((int)(Math.random() * 10)));
    }

    Iterator it = ll.iterator();
    while (it.hasNext()) {
      System.out.print( it.next() );
    }
  }
}

批次檔
del *.class
javac FourStar2.java
java -cp . FourStar2
pause


FS3
import java.util.*;

public class FourStar_Generic {
  public static void main(String[] args) {
    ArrayList <Integer> al = new ArrayList<Integer>();
    while (al.size() < 4) {
      al.add(new Integer((int)(Math.random() * 10)));
    }
/*
    Iterator it = al.iterator();
    while (it.hasNext()) {
      System.out.print( it.next() );
    }

    System.out.println();
*/
  //sdk1.5
    for( Object i : al){
System.out.print( i );
    }
    System.out.println();
  }
}

(集合尚有map及set未講)
(先說物件導向)
轉型
List al = new ArratyList();
(ArraryList)(al) ,某特有方法();
多型

物件導向 特性
1.繼承功能 inheritance
2.封裝 Encapsulation
3.介面 interface
4.多型 polymorphism

建立模型
建立貓屬性的class及建立一個物件

public class catModle{
    String name;
    String color;
    int age;
    int weight;
   public void showMe();
       System.out.println("寵物名 : " +name);
       System.out.println("寵物顏色: " +color);
       System.out.println("寵物年齡 : " +age);
       System.out.println("寵物體重 : " +weight+"kg");
如此建立一個屬於貓的物件
再建立執行測試物件是否可以run;
Test.java
public calss Test {
   public static void main(String[] args)
    {
      catModel c1 = new catModel();
      c1.name=" kitty";
      c1.colot="white";
      c1.age=1;
      c1.weight=1.5;
      c1.showMe();

繼承

public class Catson extend CatModel
{
//建立貓兒子類別繼承CatModel
//則可以使用CatModel的所有參數型態及方法
  public static void main(String[] args) 
   {
     catModel cs = new catModel();
     cs.showMe();
    }
}
執行結果會等於catModel的預設值
註(此段繼承老師用建立MonkeyKing及MonkeySon繼承的情形說明,詳如附圖)

MonkeyKing.java
public class MonkeyKing {
  String name="孫悟空";
  int skill =73;
  public void showMe(String name, int skill){
    System.out.println(
      "我是 " +name +" 會 " +skill +" 變!"
    );
  }
}
MonkeySon.java
public class MonkeySon extends MonkeyKing{
  String name ="孫小毛";
}
執行結果

封裝:
就是將方法中的變數加上修飾子private
讓繼承的子類別無法誤改只能利用set及get方式去儲存或取得

封裝很重要
但封裝後程式碼會變長
範例
public class Hospital {
  public static void main ( String[] args ){
    Human p01 = new Human();
//    p01.name ="甲";
    p01.setName("甲");
    p01.setLegs(1);
    Human p02 = new Human();
//    p02.name ="乙";
    p02.setName("乙");
//    p02.legs =-1;
    p02.setLegs(-1);
    p01.showDetail();
    p02.showDetail();
  }
}

public class Human {
  private String name;
  private int legs =2;
  public void setName( String name ){
    if ( name !=null ){
      this.name = name;
    } else {
      throw new IllegalArgumentException();
    }
  }
  public String getName(){
    return name;
  }
  public void setLegs( int legs ){
    if ( legs >=0 ){
      this.legs = legs;
    } else {
      throw new IllegalArgumentException("有問題, 腿數: " +legs);
    }
  }
  public int getLegs(){
    return legs;
  }
  public void showDetail(){
    System.out.println(
      "傷患: " +name +"\n"
      +"腿數: " +legs
    );
  }
}
封裝後可以避免錯誤值的輸入
但程式碼相對變長

介面:
1.第一個程式 fly.java 
宣告一個介面 除了給了一個參數behave外,其餘只有定義方法名稱,其內容都要讓實作這個類別的Bird.java來設定其內容。
如果實作的類別Bird.java沒有完整設定其內容的話
測試的檔案Test.java執行時就會遇到錯誤!



多型 (範例五)
同時扮演多個腳色,同時繼承兩個不同的類別,

多型另一實例 員工 經理 的員工資料
員工.java
經理.java
 
test.java
Test.java執行過後
小明原本就是以員工class定義
老王是以經理定義
老蔣是以員工宣告定義是經理的類別
(心得:應該自己回家再試做一遍)

最後 介紹 UML
程式流程圖畫完後轉程式碼(60~70%)
工具程式(免費) UMBRELLO (KDE)
IBM 工具程式 INNOVATION



































沒有留言:

張貼留言