Download Slide 1

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
การจัดการข้อผิดพลาด
(Exception Handling)



่
ต ัวอย่างข้อผิดพลาดทีอาจท
าให้การทางานของ
โปรแกรมล้มเหลว เช่น
การหารด้วยศูนย ์ การเข้าถึงข้อมู ลอาร ์เรย ์ใน
่ มอ
ี ยู ่จริง หรือการป้ อนข้อมู ลผิด
ตาแหน่ งทีไม่
ประเภท เป็ นต้น
การแก้ไขปั ญหาสามารถทาได้หลายวิธ ี เช่น
การตรวจสอบข้อผิดพลาดด้วยคาสัง่ If – else
ภาษา Java จะมีกลไกในการด ักจับด้วยการโยน
(Throw)
่
่ ดขึนในขณะที
้
่
เมือตรวจพบความผิ
ดพลาดทีเกิ
2




่
Error คือ ความผิดพลาดทีอาจจะเกิ
ดจาก
Syntax Error
้ั
สามารถตรวจพบได้ง่ายตงแต่
ตอนคอมไพล ์
โปรแกรม
่ ตรรกะใน
หรือเกิดจาก Logical Error ทีใช้
่ ถูกต้อง ซึงตรวจพบได้
่
ชุดคาสังไม่
ยาก
่
Exception คือ ข้อผิดพลาดหรือข้อยกเว้นทีอาจ
เกิดจาก



การหารด้วยศู นย ์
่ มอ
การเปิ ดไฟล ์ทีไม่
ี ยู ่จริง
่ ดพลาด
การกรอกข้อมู ลทีผิ
3
Exception
คาอธิบาย
้
มีปัญหาเกิดขึนใน
Class ของ
แพคเกจ “java.awt”
ArithmeticException(java.lang) เกิดความผิดพลาดในการคานวณ
เช่น การหารด้วยค่า 0
ArrayIndexOutOfBoundsExcepti ระบุตวั เลขเกินขอบเขตอง Array ที่
on(java.lang)
กาหนดไว้
่ ตรงกับชนิ ดของข้อมู ลที่
ArrayStoreException(java.lang) ใส่คา
่ ทีไม่
นิ ยามไว้ใน Array
่
BindException(java.net)
ไม่สามารถเชือมต่
อ (Bound)
Socket เข้ากับ Local Address และ
Port ได้
ClassCastException(java.lang)
แปลงชนิ ดข้อมู ล (Cast) ไม่ตรงกัน
ClassNotFoundException(java.l
่
หา Class หรือ Interface ทีระบุไม่
เจอ
ang)
EOFException(java.io)
พบรหัส End of file ก่อนจบการ
4
ทางานของโปรแกรมตามปกติ
AWTException
Error
AWTError(java.awt)
ClassFormatError
Error(java.lang)
ExceptionInInitializerError(j
ava.lang)
IllegalAccessError(java.lang)
IncompatibleClassChangeEr
ror(java.lang)
InstantiationError(java.lang
)
InternalError(java.lang)
NoClassDefFoundError(java.
คาอธิบาย
่
่
่
Error ทัวไปที
พบ
ซึงแสดงว่
า เกิด
้
่
ปั ญหาขึนกับ
Package ชือ
“java.awt”
Format ของ Bytecode ใน Class
File มีปัญหา
Root ของ Error Hierarchy
้
เกิด Exception ขึนใน
Static
Initializer
มีการเรียกใช้ Class, Method หรือ
่ สามารถใช้ได้
Varible ทีไม่
่ ถูกต้องเกิด
มี Operation ทีไม่
้
ขึนกับ
Class
มีการ Initialize Abstract Class
หรือ Interface
้
เกิดปั ญหาขึนกับ
Interpreter
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)
{ ผิดพลาดตรงตาม
อข้
่ กจับข้อผิดพลาด7
[statements_n]
Exception ซึงดั
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;
catch (Exception e) {
class OutOfRangeException extends
Exception {
System.out.println(e
+ "\nหมายถึง \"
void checkvalue(int value, int MIN, int่ MAX)
ข้อผิดพลาดทีเกิดจากการ
throws OutOfRangeException {
if (value < MIN || value > MAX){ ป้ อนข้อมู ลเข้าผิดประเภท\"");
System.exit(0);
throw new OutOfRangeException();
}
}
finally {
}
System.out.println("คะแนนคือ " +
}
value*100.0f/MAX
+"%");
public class CreatingExceptions
{
} args) {
public static void main (String[]
}
OutOfRangeException x =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
Related documents