Transcript Slide 1

การจัดการขอผิ
ด
พลาด
้
(Exception Handling)



ตัวอยางข
อผิ
่ าจทาให้การทางานของ
่
้ ดพลาดทีอ
โปรแกรมลมเหลว
เช่น
้
การหารดวยศู
นย ์ การเขาถึ
้
้ งขอมู
้ ลอารเรย
์ ใน
์
ตาแหน่งทีไ่ มมี
้ ลผิด
่ ง หรือการป้อนขอมู
่ อยูจริ
ประเภท เป็ นตน
้
การแกไขปั
ญหาสามารถทาไดหลายวิ
ธ ี เช่น
้
้
การตรวจสอบขอผิ
าสั่ ง If – else
้ ดพลาดดวยค
้
ภาษา Java จะมีกลไกในการดักจับดวยการโยน
้
(Throw)
เมือ
่ ตรวจพบความผิดพลาดทีเ่ กิดขึน
้ ในขณะที่
2




Error คือ ความผิดพลาดทีอ
่ าจจะเกิดจาก
Syntax Error
สามารถตรวจพบไดง้ ายตั
ง้ แตตอนคอมไพล
่
่
์
โปรแกรม
หรือเกิดจาก Logical Error ทีใ่ ช้ตรรกะใน
ชุดคาสั่ งไมถู
ซึง่ ตรวจพบไดยาก
่ กตอง
้
้
Exception คือ ข้อผิดพลาดหรือขอยกเว
นที
่ าจ
้
้ อ
เกิดจาก



การหารดวยศู
นย ์
้
การเปิ ดไฟลที
่ อยูจริ
่ ง
์ ไ่ มมี
การกรอกขอมู
่ ด
ิ พลาด
้ ลทีผ
3
Exception
AWTException
คาอธิบาย
มีปัญหาเกิดขึน
้ ใน Class ของ
แพคเกจ “java.awt”
ArithmeticException(java.lang)
เกิดความผิดพลาดในการคานวณ
เช่น การหารดวยค
า่ 0
้
ArrayIndexOutOfBoundsExceptio ระบุตวั เลขเกินขอบเขตอง Array ที่
n(java.lang)
กาหนดไว้
ArrayStoreException(java.lang)
ใส่คาที
บชนิดของขอมู
่ ไ่ มตรงกั
่
้ ลที่
นิยามไว้ใน Array
BindException(java.net)
ไมสามารถเชื
อ
่ มตอ
่
่ (Bound)
Socket เข้ากับ Local Address และ
Port ได้
ClassCastException(java.lang)
แปลงชนิดข้อมูล (Cast) ไมตรงกั
น
่
ClassNotFoundException(java.la หา Class หรือ Interface ทีร่ ะบุไม่
ng)
เจอ
EOFException(java.io)
พบรหัส End of file กอนจบการ
่
ทางานของโปรแกรมตามปกติ
4
Error
AWTError(java.awt)
คาอธิบาย
Error ทัว
่ ไปทีพ
่ บ ซึ่งแสดงวา่ เกิด
ปัญหาขึน
้ กับ Package ชือ
่
“java.awt”
ClassFormatError
Format ของ Bytecode ใน
Class File มีปัญหา
Error(java.lang)
Root ของ Error Hierarchy
ExceptionInInitializerError(jav เกิด Exception ขึน
้ ใน Static
a.lang)
Initializer
IllegalAccessError(java.lang) มีการเรียกใช้ Class, Method
หรือ Varible ทีไ่ มสามารถใช
่
้ได้
IncompatibleClassChangeErr มี Operation ทีไ่ มถู
ด
่ กตองเกิ
้
or(java.lang)
ขึน
้ กับ Class
InstantiationError(java.lang)
มีการ Initialize Abstract Class
หรือ Interface
InternalError(java.lang)
เกิดปัญหาขึน
้ กับ Interpreter
NoClassDefFoundError(java.l
5

RuntimeException เป็ นขอผิ
่ ลีกเลีย
่ งไดหาก
้ ดพลาดทีห
้
เขียนโปรแกรมถูกต้อง เช่น




ArrayIndexOutOfBoundException เป็ นความผิดพลาดทีเ่ กิด
จากการอางถึ
งสมาชิกภายในอารเรย
เช่น การอ้าง
้
่ กตอง
้
์ ไม
์ ถู
ถึงสมาชิกในอารเรย
าแหน่งทีม
่ ากกวาสมาชิ
กของอารเรย
่
์ ในต
์
์ ที
์ ่
กาหนด
ArithmeticException เป็ นความผิดพลาดทีเ่ กิดจากการ
ดาเนินการทางคณิตศาสตร ์ เช่น การหารจานวนเต็มดวย
0
้
NullPointerException เป็ นขอผิ
้ ดพลาดทีเ่ กิดการอ้างถึงคาที
่ ่
เป็ น Null เช่น การเรียกใช้ออบเจกตที
่ งั ไมได
คือ
่ ถู
้ กสราง
้
์ ย
คาออบเจ็
กตเป็
่
์ น Null
IOException เป็ นข้อผิดพลาดทีภ
่ าษา Java กาหนดให้ตองมี
้
การจัดการ หากมีการเรียกใช้
6
เมธอดทีอ
่ าจเกิดขอผิดพลาดประเภทนี้ได เชน
มีคาสั่ งให้ใช้งาน 2 คาสั่ ง คือ คาสั่ ง try … catch
และ throws
การใช้งานคาสั่ ง try … catch
 เป็ นการจัดการ Exception ทีม
่ ห
ี ลักการทางานคลายกั
บ
้
คาสั่ ง if statement คือ
ถ้าเกิดขอผิ
่ ามหลังคาสั่ ง try
้ ดพลาดในคาสั่ งทีต
โปรแกรมจะตรวจสอบคาสั่ ง Catch วาเป็
่ นขอผิ
้ ดพลาด
โดยที่ ช
ประเภทใด และทางานที
่ ุดคาสั่ งหลังคาสั่ ง Catch ที่
statements
เป็ นชุดคาสั่ งทีต
่ องการดั
ก
้
ตรงกับขอผิ
ด
พลาด
มี
ร
ป
ู
แบบการใช
งาน
ดั
ง
นี
้
้
้
จับขอผิ
้ ดพลาด

try {
TheException e เป็ นประเภทของ Exception ที่
[statements]
ต้องการดักจับ
}
statements_n
เป็ นชุดคาสั่ งทีก
่ าหนดให้
catch (TheExceptionทe)
{ อ่ ขอผิ
างานเมื
้ ดพลาดตรงตาม
[statements_n]
Exception ซึ่งดักจับขอผิ
้ ดพลาด7
8
9
10


เป็ นคาสั่ งส่งขอผิ
้ ดพลาดออกไป มีรูปแบบการใช้งาน ดังนี้
[modifier] return_type MethodName([parameter]) throws
ExceptionType1 [,ExceptionType2] {
[statements]
return varValue;
}
โดยที่
modifier
เป็ นคียเวิ
่ าหนดคุณสมบัตก
ิ าร
์ รดที
์ ก
เข้าถึงเมธอด
return_type
เป็ นชนิดของข้อมูลทีเ่ มธอดจะส่งคากลั
บ
่
MethodName เป็ นชือ
่ เมธอด
parameter
เป็ นชุดตัวแปรทีใ่ ช้ในการรับข้อมูล
ExceptionType1, ExceptionType2, เป็ นประเภทของขอผิ
้ ดพลาดที่
ต้องการตรวจจับ
statements
เป็ นชุดคาสั่ งกาหนดการทางานของเมธอด
varValue
เป็ นคาที
่ องการส
บ
่ ต
้
่ งคากลั
่
การใช้คาสั่ ง throws จะส่งตอข
่ ยๆ โดย เมธอด
่ อผิ
้ ดพลาดไปเรือ
11
main() จะเป็ นเมธอดสุดทาย
้


โดยนิยามคลาสใดๆ ให้สื บทอดมาจากคลาส Exception
ซึ่งมี constructor 2 แบบ คือ
 public Exception()
 public Exception(String s)
เมือ
่ เกิดข้อผิดพลาดขึน
้ ในคาสั่ งใด เมธอดทีต
่ ้องการส่ง
ออบเจ็กตประเภท
Exception จะต้องเรียกใช้ คาสั่ งทีช
่ อ
ื่
์
throws เพือ
่ จะสรางออบเจ็
กตของคลาสประเภท
้
์
Exception ขึน
้ มา และเมธอดนั้นจะตองมี
คาสั่ ง throws
้
เพือ
่ ให้เมธอดทีเ่ รียกใช้
เมธอดนี้จด
ั การขอผิ
้
้ ดพลาดทีเ่ กิดขึน
12
catch (OutOfRangeException e){
System.out.println(e + "\nหมายถึง \"
ข้อผิดพลาดทีเ่ กิดจากคา่
ข้อมูล
คะแนนเกินขอบเขต\"");
System.exit(0);
import java.util.Scanner;
}
class OutOfRangeException extends
catch Exception
(Exception{ e) {
void checkvalue(int value, int MIN, int MAX)
System.out.println(e + "\nหมายถึง \"
throws OutOfRangeException {
้อผิดพลาดทีเ่ กิดจากการ
if (value < MIN || value >ขMAX){
ป้อนข้อมูล
throw new OutOfRangeException();
เข้าผิดประเภท\"");
}
System.exit(0);
}
}
}
{
public class CreatingExceptionsfinally
{
อ "+
public static void main (String[] System.out.println("คะแนนคื
args) {
+"%");
OutOfRangeException xvalue*100.0f/MAX
=new OutOfRangeException();
final int MIN = 0, MAX = 30; }int value=0;
try {
}
Scanner scan = new Scanner
(System.in);
}
System.out.print ("Enter Score: ");
value = scan.nextInt();
x.checkvalue(value,MIN,MAX);
}
13