JAVA 2 Basic part 9

1.資料庫管理工具 nazorSQL
根據老師提供的步驟,一步一步做一般都可以完成,這裡僅說明一些大家常遇到的問題:
a.在安裝的步驟中,一般都會卡在這一步驟。
原因是因為 derby 資料庫的服務沒有啟動 (關於資料庫服務請參考我部落格筆記 "20120619 JAVA2 語言基礎八" 第六點課後註解 )

b.在匯入資料的步驟中,一般都會卡在資料會不進去。
原因一:在 eclipse 建立的資料庫名稱 (database name) 或資料表名稱 (table name),與 nazorSQL 要連接的名稱不一樣。
解法:在 eclipse資料庫名稱必須與 nazorSQL 要連接的名稱相同。

原因二:已經在 eclipse 中 drop 掉 table,所以 nazorSQL找不到。
解法:在 eclipse 中再建立一次資料表


2.第十一章 繼承
繼承:
1.有再利用性,基於原設計在擴充。
2.階層架構性,將設計架構化。

繼承關係整理:
1.繼承在 Java 內用 extend 保留字取其擴充之意。
PS:繼承的功能至少有二:
a.再利用性
        b.階層架構性

2.父類別的成員之存取權限子 (Access Modifier) 有四種:
a. public           最鬆
b. protected     同套件之其他類別可以存取,也可以為同套件子類別所存取。
c. private          最嚴
d. default          同套件之其他類別及子類別可以存取。同套件皆不可。

3.子類別內要呼叫父類別的建構子可用 super( );

4.覆寫 (overriding )是另一種 overloading 之外的同名異式,即父子類別之間採用相同名稱的方法。PS:若變數同名呢? 稱為遮蔽 ( shadowing )


3.練習
利用 "..."來帶入不確定數量的參數,類似陣列的觀念,但不需宣告陣列數量。


程式碼
class ComputeV2 {
static int getMax (int... x){
int max =0;
for(int i = 0; i< x.length; i++)
if ( x[i] > max){
max = x[i];
}
return max;
}

static int getSum (int... x){
int total =0;
for(int i = 0; i< x.length; i++)
total = total + x[i];
return total;
}

static double getAvg (int... x){
double avg = (double) getSum(x) / x.length;
return avg;
}

public static void main(String[] args) {
System.out.println("max " + ComputeV2.getMax(22,57,80,50,60));
System.out.println("Sum " + ComputeV2.getSum(22,57,80,50,60));
System.out.println("Avg " + ComputeV2.getAvg(22,57,80,50,60));
}
}

結果


4.第十五章 執行緒
,就是線的意思。有線頭、線尾。另有線性的概念。
單執行緒:一般的程式都是用單執行緒,一個 main 裡免只有單一作業。
多執行緒:可在主執行緒工作時,開出另一分支執行緒去做另外的工作。

範例程式碼 (三個執行緒)

import java.util.Date;
class Car extends Thread  //必須先繼承 Thread 類別來使用多執行緒。所以Thread是Car的父類別。
{
   private String name;
   public Car(String nm)
   {
      name = nm;
   }
   public void run()   // run 方法是為分身的意思。
   {
      for(;;){    //使用for 無窮迴圈來觀察多執行續的先後次序
            //子執行續 ( sun thread )在這裡,並加上時間以利於觀察。
         System.out.println("正在進行" + name + "的處理工作。"+(new Date().toLocaleString()));
      }
   }
}
class Sample2
{
   public static void main(String[] args)
   {
      Car car1 = new Car("1號車");
      car1.start();   //使用Car 的父類別 Thread 的 start( )來開啟多執行續,會接到 Car 的 run 方法。

      Car car2 = new Car("2號車");
      car2.start();   //使用Thread 類別的 start( )來開啟多執行續,會接到 Car 的 run 方法。

      for(;;){   //使用for 無窮迴圈來觀察多執行續的先後次序。
            //主執行續 ( main thread )在這裡,並加上時間以利於觀察。
         System.out.println("正在進行main()的處理工作。"+(new Date().toLocaleString()));
      }  
   }
}

No comments: