課程名稱:程式設計II472205

指導老師:蔡佳麟

學生:吳佳恩

學號:40207096

組別:4

次:第01-05 [回首頁]

 

Part I指定作業:

作業題目

1.何謂方法(Method)

JAVA的方法有哪些類型?

2.何謂例外處理(Exceptions)

Java將例外分成哪幾種類型?

回答內容

System.out.println()是我們在前面經常使用的。那麼它是什麼呢?
println()
是一個方法(Method),而System是系統類(Class)out是標準輸出對象(Object)。這句話的用法是調用系統類System中的標準輸出對象out中的方法println()
那麼什麼是方法呢?
方法是解決一類問題的步驟的有序組合
方法包含於類或對象中
方法在程序中被創建,在其他地方被引用
創建與調用
方法被創建在類中,方法創建方式:
修饰 返回值类型 方法名 (参数类型 参数名){

...
方法体
...
return 
返回值;
}

如:
public static int age(int birthday){...}
參數可以有多個:
static float interest(float principal, int year){...}
方法可以沒有返回值,也可以沒有參數,甚至可以沒有內容:
public static void drawBox(double size){...}
public static void printBookName(){...}
調用時,有返回值方法作為數據傳遞,而無返回值方法直接作為一個語句。如:
...
myAge = age( 1991 );
...
myMoney = interest( 1000, 3 );
...
printBookName();
...
非物件導向
我們已經知道Java是物件導向的,但Java也可以使用面向過程的用法。
Java
的方法也可以像C語言的函數一樣使用。這樣做的目的僅僅是減少重複代碼,讓程序結構更加清晰。
package wikibooks;
public class Exercise {
//main
也是个方法,是所有程序的入口
public static void main(String args[]){
int time;
for( time = 2000; time < 2013; time++ ){
System.out.println( time + "
" );
if( bissextile( time ) ) //
调用bissextile方法
System.out.println( "
是闰年" );
else
System.out.println( "
不是闰年" );

}
}
//
判断闰年的方法
static boolean bissextile(int year){
boolean res = true;
if( year % 4 != 0 ) //
不能被4整除的年份不是闰年
res = false;
else if( (year % 100 == 0)&&( year % 400 != 0)) //
能被100整除但不能被400整除的年份不是闰年
res = false;
//
剩下的年份都是闰年
return res;

}
}
輸出結果:
2000
年是闰年
2001
年不是闰年
2002
年不是闰年
2003
年不是闰年
2004
年是闰年
2005
年不是闰年
2006
年不是闰年
2007
年不是闰年
2008
年是闰年
2009
年不是闰年
2010
年不是闰年
2011
年不是闰年
2012
年是闰年

 

在還沒有學習例外處理之前,如果您要撰寫一個除法程式,並由使用者輸入除數與被除數,由於被除數除以0沒有意義,所以之前可能 必須像以下這樣避免錯誤:
if(b != 0) 
System.out.println(a / b); 
else 
System.out.println("
除數不能為0");
這樣的方式過去在一些程式語言中會很常被利用,利用判斷式來避免錯誤的發生,然而這樣的方式會讓錯誤處理與程式的處理邏輯混在一起,使得程式難以閱讀,而
 由於使用了一些判斷式,即使有一些很少發生的錯誤,也都必須一視同仁的進行判斷檢查,這會使得程式的執行效能受到一定程度的影響。
Java
的例外處理機制可以協助我們捕捉程式執行時期的錯誤,它用來處理一些系統可以恢復的錯誤,例外(Exception)是Java中定義 的一種物件資料型態,在特定錯誤發生時會丟出例外物件,我們可以捕捉這些例外並加以處理,避免程式可能的錯誤發生。
Java
的例外處理藉由"try""catch""finally"三個關鍵字組合的語言來達到,其語法基本結構如下:
try {
// 
陳述句
}
catch (
例外型態 名稱) {
// 
例外處理
}
finally {
// 
一定會處理的區塊
}
一個
"try"所包括的區塊,必須有對應的"catch"區塊,它可以有多個"catch"區域,而"finally"可有可無,如果沒有定義 "catch"區塊,則一定要有"finally"區塊。
先來看個實例,瞭解如何使用try...catch來處理使用者輸入的錯誤: 
UseException.java
import java.io.*; 
public class UseException { 
public static void main(String[] args) { 
try { 
int input; 
BufferedReader buf = new BufferedReader( 
new InputStreamReader(System.in)); 
System.out.print("
請輸入整數: "); 
input = Integer.parseInt(buf.readLine()); 
System.out.println("input x 10 = " + (input*10)); 
} 
catch(IOException e) { 
System.out.println("I/O
錯誤"); 
} 
catch(NumberFormatException e) { 
System.out.println("
輸入格式有誤"); 
} 
} 
} 
例外處理是程式在執行但發生錯誤並無法處理時,會丟出一個例外物件,在這個程式中,您特意
 使用 BufferedReader 取得輸入,當使用BufferedReader類別時,若發生I/O錯誤會丟出IOException 例外,這個例外您必須處理。
您試著從使用者輸入取得一個整數值,由BufferedReader物件所讀取到的輸入是個字串,您使用Integer類別的 parseInt()方法試著剖析該字串為整數,如果無法剖析,則會發生錯誤並丟出一個NumberFormatException例外物 件,當這個例外丟出後,程式會離開目前執行的位置,而如果設定的"catch"有捕捉這個例外,則會執行對應區塊中的陳述句,注意當例外一但丟出,就不會 再回到例外的丟出點了。
來看看這個程式的執行範例: 
$ java UseException 
請輸入整數
: 10 
input x 10 = 100 
$ java UseException 
請輸入整數
: XX 
輸入格式有誤

如果程式中設定有"finally"區塊,則無論例外是否有發生,則一定會執行"finally"區塊中所定義的陳述句, "finally"區塊使用時機 的例子之一,就是當您開啟了某個檔案時,在讀/寫的過程中發生錯誤,在使用"catch"區塊處理相對應的例外之後,最後在"finally"區塊中定義 一些關閉檔案的動作,讓關閉檔案的動作一定會被執行。
使用例外處理的好處是您可以將程式邏輯與錯誤處理分開,使得程式易於撰寫、閱讀與維護,由於例外處理是在程式執行時發生錯誤,而沒有辦法處理之時才產生例 外物件,所以與使用判斷式來避免例外的方式比起來,例外處理會有比較好的執行效能。

參考來源

http://zh.wikibooks.org/wiki/Java/%E6%96%B9%E6%B3%95

http://www.openhome.cc/Gossip/JavaGossip-V1/ExceptionHandling.htm

 

Part II 01-09學習心得彙整

1

2

3

4

5

截圖

Ex.1-打開教學投影片

Ex.2-寄通知信

Ex.3-登入FTP

Ex.4-佈署學習網站

Ex.5-建立社團

Ex.1-將變數加1

Ex.1-變數+1方法化

(建立類別 mYadd)

Ex.2-變數+1方法化

(建立類別 mYadd)

 

Ex.1-顯示基本資料方法化[建構子+無參數]

Ex.2-顯示基本資料方法[void+有參數]

Ex.1-顯示基本資料方法化[有參數+多重定義]

Ex.2-定義第5簡答選定的類別 (類別book)

Ex.3-實作四則運算計算器類別

課後心得

簡單

簡單

跟得上進度

跟得上進度

蠻困難的

6

7

8

9

截圖

Ex.1-實作Car(this)

Ex2-捕捉多個例外處理

Ex3-拋出例外處理(throw)+自訂例外類別(extends)

Ex.1-拋出例外處理+自訂例外類別(程式分割範例檔案)

Ex.2-套件(程式分割)

Ex.1套件(import/package)

Ex.2-輸出輸入

課後心得