View Full Version : try กับ catch คืออะไร.... ใช้กันตอนไหน???
minimum
11-07-2009, 04:18 PM
try กับ catch คืออะไร.... ใช้กันตอนไหน???
[hide=1]คําสั่ง try กับ catch นั้น เป็นคําสั่งที่เราจะเจอกันบ่อยเมื่อมาเขียน Java อ้าว... แล้วภาษาอื่นล่ะ ภาษาอื่นมันก็มี แต่อาจจะไม่ได้หยิบใช้บ่อยเหมือนกับ Java เพราะว่า Java มันมีมาพร้อมกับการเริ่มต้นเขียนของมัน คือ สมัยก่อน เราเขียน C, C++ กัน เขียน VB กัน เราก็ยังไม่เห็นการใช้ try กับ catch มากนัก อันนี้เกริ่นให้ฟังก่อน เพื่อให้เข้าใจว่ามันเป็นมาอย่างไร ถึงได้บอกว่าการใช้ try กับ catch นั้นเรามาเจอบ่อยเมื่อเข้าสู่การเรียน Java แต่ทําไมภาษาอื่นไม่ค่อยได้หยิบใช้.... ก่อนหน้าเราเล่นกันแต่ C/C++ หรือภาษาอื่นๆ Java ออกมาทีหลัง และอาจจะเป็นการนําเอาจุดบกพร่องของภาษารุ่นก่อนๆ มาปรับปรุงให้เป็นภาษาที่แกร่งขึ้น
เรื่องนี้ต้องดูกันให้ดีๆ เรื่อง try กับ catch เนี่ย... มันเป็นคําสั่งที่จะใช้ในการจับ Error มันไม่เหมือนกับ if นะครับ คือ ในภาษา Java มันจะมีการรายงานผลของข้อผิดพลาดในเวลาโปรแกรมทํางาน คือ เมื่อเราเรียกโปรแกรม java.exe และสั่งรันไฟล์ .class แน่นอน โอกาสที่จะเกิด Error ในตอนที่กําลังรันนั้นมันมีแน่ บางครั้งก็เกิดปัญหาในเวลาเราใส่ค่าไม่ถูกต้อง นั่นล่ะ โปรแกรมจะเกิดบั๊กและหยุดการทํางานเอาดื้อๆ ได้เหมือนกัน... ดังนั้น ใน Java จึงมีการสร้างกระบวนการตรวจจับ หรือดักจับข้อผิดพลาด คือ ถ้าเราดักจับข้อผิดพลาดที่คิดว่ามีโอกาสเกิดได้แล้วล่ะก็ เวลาเรารันโปรแกรมแล้วมันเกิดขึ้นจริงๆ โปรแกรมก็จะทํางานต่อไปได้ถูกมั้ยครับ... แต่ลองนึกสิครับ เวลาเรารันโปรแกรม มันก็ทํางานไปเรื่อยๆ แต่ถ้าหากมีจุดใดจุดหนึ่งรับข้อมูลเข้ามา แล้วข้อมูลนั้นมันมีปัญหา เช่น เอาไปคํานวณไม่ได้ นั่นล่ะ มันจะทําให้เกิด Error ในตอนรัน ซึ่งเป็นอะไรที่ร้ายแรงเอาเรื่องเหมือนกัน...
อย่างภาษาอื่นๆ เราจะตรวจจับว่าฟังก์ชั่นนี้ หรือฟังก์ชั่นนั้นมันทํางานได้ถูกต้องหรือไม่ เราก็จะดูจากค่า return ถูกมั้ยครับ เช่น ฟังก์ชั่น convert นี้
[code]int convert( int num )
{
chidkido
11-07-2009, 07:14 PM
ขอเพิ่มให้อีกหน่อย
เพิ่มเติมสำหรับคนที่อ่านข้างบนจบแล้ว (ยกความดีให้ กระทู้นี้ละกัน :D )
Exception เนี่ยมันก็เป็น Class นึงเหมือนกัน
ไม่จำเป็นต้องเป็น Java หรอก ภาษาที่เป็น OOP ภาษาไหนๆ ก็ได้ใช้พอๆกัน ขึ้นอยู่กับคนเขียนโปรแกรมด้วยว่าใส่ใจรึเปล่า
try ... catch จะทำงานก็ต้องเมื่อคำสั่งที่อยู่ภายใน try มีการ throw Exception ขึ้นมา
ลองพิมพ์ดูเล่นๆ ก็ได้
try
{
throw new Exception("Test");
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
ปล. ผมไม่ได้เขียน java มานานแล้ว มี syntax error บ้างก็ขออภัย :P
ต่อๆ
ในเมื่อ Exception มันเป็น class แปลว่าเราสามารถ inherit มันได้ (ใน java ใช้ keyword ว่า extends)
ทำให้เกิด Exception ขึ้นมาหลายแบบ เพราะงั้นใน catch จึงต้องสามารถดัก exception หลายๆแบบได้
try
{
...ในนี้อาจเกิด ExceptionA และ ExceptionB
}
catch(ExceptionA e1)
{
แสดงข้อความ error1
}
catch(ExceptionB e2)
{
แสดงข้อความ error2
}
ศาสตร์ด้านการออกแบบ Class เนี่ยน่าสนใจมาก แค่เรื่องนี้ มีประเด็นให้คิด ให้ลองอีกมากมาย
ทั้งกระทู้นี้และ reply นี้ เป็นแค่เศษเล็กๆเท่านั้น เอาไว้ว่างๆจะเขียนเต็มๆ มาให้ลองอ่านกัน
มีคนโม้ว่าเขียนโปรแกรม publish ออกไปแล้ว ยังไม่เกิด error เลย เพราะเรื่อง exception handling นี่แหละ
แต่ผมไม่ค่อยเชื่อแฮะ ฮ่าๆๆ
Edkung_
11-07-2009, 08:12 PM
มีคนโม้ว่าเขียนโปรแกรม publish ออกไปแล้ว ยังไม่เกิด error เลย เพราะเรื่อง exception handling นี่แหละ [/b]
อันนี้เป็นไปได้ครับ ถ้ามีการออกแบบ exception handling ในระดับ Framework ของโปรแกรมเลย แต่ถามจริงเหอะ จะมีซักกี่คนที่ทำแบบนั้น
ปล. exception handling เนี่ย ไม่ต้อง oop หรอกครับ ภาษา assembly ผมยังเห็นใช้กันบ่อยออก
drekoz
11-07-2009, 11:40 PM
เอ่อ พี่ครับ ผมขอถามต่อ ได้มั้ยครับ คือผมคือเห็น บางครั้งมีการใช้ finally เข้ามาเกี่ยวข้องด้วย อันนี้คือที่ผมเข้าใจ คือมันจะทำงานในตอนสุดท้ายใช่ป่ะครับ ? อีกอย่างคือ มันจะอ่านโค้ดที่เราเขียนไปจากตรงไหนก่อน แล้วไปจบที่ตรงไหนหรอครับ ถ้าถามผิดประเด็นก็ขอโทษไว้ก่อนด้วยน่ะครับ พอดีเพิ่งหัดลองใช้คำสั่งนี้ครับ ขอบคุณครับ
chidkido
12-07-2009, 06:02 PM
กรณีไม่เกิด exception
try > finally
กรณีที่เกิด exception ใน try
try > catch > finally
คือถ้ามี finally ยังไงมันก็จะไปเข้า finally
ถึงแม้จะ return ใน try หรือ catch มันก็ยังเข้า finally เป็นที่สุดท้ายอยู่ดี
ปล.ใน catch และ finally ก็สามารถเกิด exception ขึ้นมาได้อีก ต้องระวังด้วย ถ้าเสี่ยงก็ดักใน catch และ finally ด้วย
golfklub
29-07-2009, 10:16 AM
ส่วนตัวผมคิดว่า คำสั่ง try catch เป็นคำสั่งที่สุดยอดมากที่สุดแล้วอ่ะคับ ถ้าเทียบกับ จอมยุทธ์ try catch ก็เปรียบได้เหมือนกับกระบี่
ถ้าจอมยุทธ์ขาดกระบี่ไป ก็ไม่ต่างไรจากคนธรรมดา ใครที่ยังไม่เคยใช้ try catch ผมแนะนำเลยนะคับ ใช้ไปเหอะ ใช้ให้เป็นนิสัย ไม่รู้จะพิมพ์อะไร บอก try catch
bank84
06-09-2009, 02:52 PM
Try , Catch , Exception
นี่แหละสุดยอดการดัก Error ผมคิดว่า ถ้าจะดักให้โปรแกรมทั้งโปรแกรม
มันก็จะเป็นโปรแกรมที่ Error น้อยที่สุดแต่มันก็อาจจะมีผิดพลาดได้ในบางจุด
ลองศึกษาดูนะครับ
eclipseo14
06-09-2009, 11:05 PM
ขอเพิ่มเติมนิดนึง
ถ้าเกิดเราไม่มั่นใจว่า error ที่เกิดขึ้นเกิดมาจากสาเหตุอะไร ก็ควรที่จะใส่มันไว้ทีหลังจะได้หาสาเหตุได้ง่าย อีกอย่างถ้าเกิดโค้ดเรามันเชื่อมต่อกันมากก้อควรที่จะใส่ try catch ไว้หลังสุดหลังจากที่เขียนโปรแกรมเส็ดแล้ว หรือเปล่าครับ
Gabriel
18-09-2009, 01:43 PM
เวลาเขียนโปรแกรมผมมักจะใช้ if else ตลอด
โดยที่ไม่รู้ความแตกต่างระหว่าง try catch กับ if else มาก่อน
แล้วปัญหาที่เกิดบ่อยครั้งมันจะฟ้อง error
มันอาจเป็นเพราะ ผมไม่เข้าใจ method ของ class ที่ import มา อย่างแท้จริงก็ได้
หรือไม่ก็ยังไม่เข้าใจ try catch อย่างถ่องแท้เสียที
สิ่งที่ได้จากกระทู้นี้
• เห็นความแตกต่างระหว่าง if else กับ try catch finally (ซึ่งมันแตกต่างกันอยู่แล้ว แต่ผมดันโง่ไม่รู้เรื่องเอง)
• จะได้ไม่ได้ใช้ if else กับเงื่อนไขมั่ว ๆ เพื่อกัน error แต่ใช้ try catch คงสะดวกกว่าในบ้างครั้ง
• เข้าใจว่า try catch หลักๆ ว่าเป็นตัวดักจับ error
**หากผมเข้าใจผิดอะไรตรงไหนก็เตือนด้วยนะครับ**
NaNaGosZy
02-10-2009, 03:55 PM
เราก้อเคยใช้นะ แต่ก้อไม่เข้าใจว่ามันต่างกับการใช้ else if ตรงไหน
nProtect
22-10-2009, 05:52 PM
ถ้ามาเขียนโปรแกรมแบบนี้ Try Catch มันก็ไม่ได้ช่วยอะไรอยู่ดีครับ
เพราะว่า มันจะ Error ที่ฝั่ง CPU Step
[code]
void main()
{
cyberwizard
15-11-2009, 03:58 PM
การใช้ try catch ก็จะทำให้เราตรวจจับ error ได้ดีขึ้น ใช่หรือป่าวครับ
curarpika
23-11-2009, 04:39 PM
ผมเคยเจอแบบที่ใส่ try ครอบทั้งฟังก์ชั่นเลย แล้ว catch ไม่ให้้แสดงเตือนอะไรเลย หรือดัก catch ไม่ครบทุก exception ผลก็คือ ไม่มี error เกิดขึ้นเลย บางคนอาจจะคิดว่า แบบนี้มันก็ดีแล้วไม่ใช่เหรอ สำหรับผมคิดว่า ไม่ดีครับ error ธรรมดาจะกลายพันธุ์เป็น Bug ของโปรแกรมแทน เพราะจุดประสงค์ในการดัก try catch ที่แท้จริงคือ การดัก error ที่เรารู้ตัวอยู่แล้วว่าอาจจะเกิด แล้วทำการแก้ไขโดยใช้ catch แต่ถ้าเราดักเอาแค่ว่า ไม่ให้ error มันโผล่เฉยๆ การทำงานก็เพี้ยน แทนที่ขึ้น error มาให้เราแก้ง่ายๆ กลายเป็น bug ที่ผู้ดูแลต้องมาตามแก้ไขแทน นั่งๆทำงานอยู่อาจจะจามเพราะโดนด่าไล่หลังมาก็ได้นะครับ :(
ดังนั้นก็ระวังหน่อยนะครับ เรื่องการใช้ try catch ใช้เมื่อจำเป็นเท่านั้น :)
MahaJone
09-01-2010, 04:09 AM
ก็จริงอย่างท่านข้างบนว่ามา สมัยผมทำโปรเจกจบ ผมก็ใส่เจ้า try catch นี่แหละ
เวลาเกิด error มันก็แจ้งเตือนของมันเป็นธรรมดา แต่กลายเป็นว่าไม่รู้มันไป error ตรงไหน
สุดท้ายผมก็ต้องเอาเจ้า try catch ออกไป ถึงจะไปแก้ถูกจุด :blink: :blink:
babooza
27-01-2010, 12:13 AM
ยังมีข้อผิดพลาดอื่นๆอีกเช่น
1.FileNotFoundException
2.ClassNotFoundException
3.EOFException
4.IOException
เกี่ยวกับพวกเปิดปิดไฟล์นะ เมื่อก่อนตอนยังไม่รู้จัก Try and catch เขียน throws IOException ไว้หลัง main ตลอดเลย
ผมไม่เค้าใจคำสัง
[code] Console con;
danako
27-01-2010, 02:27 AM
try and catch
ใช้ในการตรวจจับข้อผิดพลาดของโปรแกรม
เวลาเขียนต้องเขียนเป็นคู่กัน ห้ามแยกจากกัน
ใน 1 try มี catch มากกว่า 1 อันได้
catch จะจับข้อผิดพลาดที่เกิดขึ้นใน try
*-BatHRooM-*
22-04-2010, 08:21 PM
Try catch ใช้ในตอนที่จะจับ Error บางอย่างที่เป็นปัญหาของโปรแกรมครับ อย่างเช่น เราจะใส่ข้อมูลตัวเลขใน Textbox เพื่อมาคำนวณ แต่ผู้ใช้กับใส่ String มา โปรแกรมจะเกิดการ Runtime Error ได้ถ้าไม่มี Try-Catch ครับ
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions Inc. All rights reserved.