สมัครเรียนโทร. 085-350-7540 , 084-88-00-255 , ntprintf@gmail.com

Tutorial JAVA

01 install Eclipse 02 intro to programming Eclipse 03 condition 04.loop 05.array 05 2 array cont 06 01 function 06 02 function cont 07 object 08 string 09 constructor 10 01 oop 10 02 oop2 11 exception 12 reading file 13 thread 14 generic 15 01 GUI 15 02 GUI2 15 03.GUI3 16 using WindowBuilder 17 event 18 database management system 19 ER diagram 20 Relational 21 Xampp 22 JDBC 23 MVC 24 SQL

ความผิดปกติ(Exeption)

            ในบทก่อนๆจะเห็นว่าเวลาเขียนโปรแกรมแล้วรันไม่ผ่านตรง console จะขึ้นข้อความสีแดง หรือไม่อย่างนั้นก็อาจจะรันผ่านแต่กลับไม่มีอะไรแสดงออกมา เรื่องพวกนี้เป็นเรื่องที่เกิดจากความผิดปกติหรือ exception ที่ทำให้โปรแกรมไม่สามารถทำงานจบได้ตามที่เราต้องการ

Error กับ Exception

            Throwable (เปิด java doc ดูประกอบ) เป็นคลาสๆหนึ่งที่มีลูกอยู่ 2 คลาสคือ error กับ exception

            สำหรับ error

เป็นความผิดปกตินอกโปรแกรม หมายความว่าเขียนถูกแล้วแต่อาจจะเกิดปัญหาจากความผิดพลาดจากการรับส่งข้อมูลจากไฟล์ แบบอ่านไฟล์ไม่ได้ เป็นต้น

-          IOError อุปกรณ์รับส่งข้อมูลทำงานไม่ได้

-          NoClassDefFoundError คือเรียกคลาสแต่จริงๆไม่มีคลาสนั้น

-          StackOverflowError คือ หน่วยความจำระหว่างเรียกเมท็อดไม่พอ นี่เป็คนความผิดพลาดจากการเขียนโปรแกรมของเราเอง เกิดจากการเรียก recursive ฟังก์ชันมากไป

สำหรับ exception

เป็นความผิดปกติที่มีสาเหตุอาจจะมาจากการเขียนโค๊ดผิด ความผิดปกติจะเกิดขึ้นตอนประมวลผล

โปรแกรมซึ่งการป้องกันความผิดปกติจะทำที่ตรงนี้ โปรแกรมจะได้ไม่ต้องหยุดทำงานทั้งๆที่ยังทำไม่จบ

-          AritmaticException การหารจำนวนเต็มด้วยศูนย์(ไม่นิยามในทางคณิตศาสตร์)

-          IndexOutOfBoundException เรียกใช้อาร์เรย์ช่องที่ไม่มี

-          NullPointerException การใช้ตัวแปรหรือเมท็อดที่เป็น null

-          FileNotFoundException  หาไฟล์ไม่เจอ

จะเห็นว่าสำหรับ exception เป็นอะไรที่แก้ไขได้ทันที เช่น หารเลขด้วยศูนย์พอมันผิดก็ไปแก้ให้เรียบร้อย โปรแกรมก็ทำงานต่อได้จนจบแล้ว

 


รูป 11-1

เขียนโปรแกรมขึ้นมา ให้ b เก็บค่าของ 5/a โดยที่ a มีค่าเป็น 0 โปรแกรมจะแสดงผลตามข้างล่าง

 


รูป 11-2

นี่เป็นตัวอย่างง่ายๆแต่ถ้านึกถึงโปรแกรมขนาดใหญ่ๆยาวแล้วเกิดข้อผิดพลาดขึ้นมาการแก้ปัญหาก็ลำบากอยู่เหมือนกัน และก็จริงที่ว่าโปรแกรมมันก็แจ้งให้เราทราบว่าเกิด exception อะไรขึ้นมาก็จริงแต่การทำแบบนี้โปรแกรมก็จะหยุดการทำงานไปด้วย ดังนั้นเราจึงควรที่จะใช้การจัดการกับ exception เพื่อเป็นการเตือนผู้ใช้ว่าต้องทำอย่างไร เพราะต้องนึกว่าหากเป็นผู้ใช้โปรแกรมกำลังใช้งานโปรแกรมอยู่แล้วมัน error ดับปิดโปรแกรมไปก็คงจะงง ก็ควรจะไม่ทำให้เกิดเหตุการณ์อย่างนั้นพร้อมกับการแก้ไข เช่น ให้ใส่ตัวเลขแต่ใส่ตัวหนังสือมาก็ให้แจ้งไม่ถูกต้องใส่ตัวเลข ไม่ใช่ว่าไม่แจ้งอะไรแล้วก็ดับไปเลย

 

จับ exception ด้วย try-catch

วิธีการหนึ่งสำหรับการจัดการกับ exception ทำด้วยสิ่งที่เรียกว่า surround with try/catch โดย try/catch นั้นจะประกอบไปด้วยคำสั่ง 2 คำสั่งคือกลุ่ม try(ลอง) กับ กลุ่ม catch(จับ) ง่ายๆก็คือให้ลองทำสิ่งที่อยู่ใน try ดูก่อน หากไม่สามารถทำได้เพราะมี exception ให้จับexception ด้วยการจับไว้ด้วย catch

 


รูป11-3

โปรแกรมนี้ก็คือต้องการให้ใส่ตัวเลขจำนวนเต็มเพื่อนำมาแสดงผล แต่ก็มีที่ผู้ใช้อาจจะใส่สิ่งที่ไม่ใช่ตัวเลขอย่างตัวอักษรหรือข้อความเข้ามาได้ ซึ่งถ้าเกิดเหตุการณ์นี้โปรแกรมจะ error เลยเพราะต้องบรรทัดที่ 12 คำสั่งบอกให้รับ int เข้ามา

สิ่งที่โปรแกรมฟ้อง หากใส่ข้อมูลผิดประเภท

 


รูป 11-4

สิ่งที่โปรแกรมฟ้องก็คือ InputMismatchException เพื่อแก้ปัญหานี้เราก็จับ InputMismatchExceptionใส่ไว้ใน catch ซะให้เรียบร้อย

 


รูป11-5

นี่คือรูปแบบการทำงานของ try/catch กลุ่มคำสั่งที่อยู่ใน try คือคำสั่งเมื่อกี้ แต่รอบนี้เราป้องกันไม่ให้โปรแกรมจบการทำงานไปเองด้วย catch ซึ่งใน catch ก็ใส่ชื่อของ exception ไป พร้อมกับคำสั่งเพื่อให้รู้ว่าความผิดพลาดเกิดตรงนี้และแก้ไขด้วยอะไร

 


รูป 11-6

เพียงเท่านี้ปัญหาก็จะหมดไปโปรแกรมสามารถทำงานได้ปกติจบครบจบกระบวนความ

การโยนความผิดปกติด้วย throw – throws

ปกติถ้า main ไปเรียก เมท็อด A แล้ว A ก็ไปเรียกเมท็อด B แต่เมท็อด B ดันมี exception หาก B ไม่ได้ดักจับ exception เอาไว้ความผิดปกติก็จะไปหา A ถ้า A ยังไม่จับสุดท้ายก็จะไปที่ main และถ้า main ยังไม่ทำอะไรโปรแกรมก็จะไม่ทำงานในที่สุด การโยนความผิดปกติก็เพื่อให้เมท็อดนั้นทำงานได้ปกติโดยให้เมท็อดอื่นเป็นผู้จับความผิดปกตินี้เอง

วิธีที่ง่ายที่สุดก็คือไปประกาศที่หัวเมท็อดให้หมดเรื่องหมดราวไป ด้วยคีย์เวิร์ด throws  ตามด้วยชื่อของคลาสที่เกิด exception

 


รูป 11-7

บรรทัดที่ 19 : โยน exception ออกจากเมท็อด เพื่อให้ main ทำการจับความปิดปกตินี้

จะรู้ได้ยังไงว่าต้องใช้ exception อะไร

ก็เป็นธรรมดาที่ตอนแรกจะไม่รู้ว่าจะต้องใช้ exception อะไร แต่พอเห็น error สักพักก็จะพอเดาได้ว่าใช้ exception อะไรเพราะชื่อมันเหมือนๆกันกับที่เวลาเวลา error แสดงออกทาง console แต่ถ้ายังไม่รู้จะใช้อะไรจริงๆ ก็ใช้ Exception ไปก่อน เพราะทุกคลาสของ exception จะเป็นลูกมากจากคลาส Exception

 


รูป 11-8

แก้ไขโค๊ดจากข้างบน 11-1โดยให้มีการดักจับ(try-catch) ความผิดปกติโดย Exception ก็จะแก้ไขได้ทุกความผิดปกติ แต่มันก็เป็นข้อเสียด้วยเหมือนกันคือพอผิดปกติมาทีเราก็จะไม่รู้ว่ามันผิดปกติเพราะอะไร

 


รูป 11-9

การใช้งานอ็อปเจ็คของสิ่งผิดปกติ

            คงจะเห็นว่าใน catch นั้นจะมี ตัว e ตามท้ายชื่อคลาสที่เป็น exception ซึ่งนี่ก็คือตัวแปรสำหรับอ้างอิงอ็อปเจ็คของ exception ซึ่ง e สามารถใช้ประโยชน์ได้จากการเรียกใช้เมท็อดของคลาส Throwable

-          e.getMessage () ใช้แสดงความผิดปกติ เป็นสตริง

-          e.printStackTrace() ใช้บอกว่าผิดตริงไหน

-          e.toString() คืนค่าสตริงบรรยายสิ่งที่ปิด



บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้

หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor

ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?

สมัครเรียน ONLINE ได้ทันทีที่ https://elearn.expert-programming-tutor.com

หรือติดต่อ

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM

แผนที่ ที่ตั้งของอาคารของเรา

C Article


C++ Article


Java Article


C#.NET Article


VB.NET Article


Python Article


Golang Article


JavaScript Article


Perl Article


Lua Article


Rust Article


Article


Python


Python Numpy


Python Machine Learning



แผนผังการเรียนเขียนโปรแกรม

Link อื่นๆ

Allow sites to save and read cookie data.
Cookies are small pieces of data created by sites you visit. They make your online experience easier by saving browsing information. We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.

Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com

ติดต่อเราได้ที่

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา