- 1 1. บทนำ
- 2 2. การจัดการข้อยกเว้นใน Java คืออะไร?
- 3 3. throw คืออะไร?
- 4 4. throws คืออะไร
- 5 5. ความแตกต่างระหว่าง throw และ throws
- 6 6. แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ throws
- 7 7. รูปแบบการจัดการข้อยกเว้นเชิงปฏิบัติ
- 8 8. คำถามที่พบบ่อย (FAQ)
- 8.5.1 Q1. ความแตกต่างหลักระหว่าง throw กับ throws คืออะไร?
- 8.5.2 Q2. ควรระวังอะไรบ้างเมื่อใช้ throws?
- 8.5.3 Q3. สามารถใช้ throw และ throws ร่วมกันได้หรือไม่?
- 8.5.4 Q4. จะประกาศหลายข้อยกเว้นด้วย throws อย่างไร?
- 8.5.5 Q5. ควรใช้ throws กับข้อยกเว้นที่ไม่ตรวจสอบได้หรือไม่?
- 8.5.6 Q6. การประกาศ Exception หรือ Throwable ในคลอส throws เป็นเรื่องที่ยอมรับได้หรือไม่?
- 8.5.7 Q7. ฉันต้องจับข้อยกเว้นที่ประกาศใน throws เสมอหรือไม่?
- 8.5.8 Q8. จะเกิดอะไรขึ้นหากฉันลืมเขียน throws?
1. บทนำ
เมื่อคุณเริ่มต้นการเขียนโปรแกรมใน Java คุณจะหลีกเลี่ยงไม่ได้ที่จะพบกับคำว่า “exception handling” ในบรรดาคำสำคัญต่างๆ “throw” และ “throws” เป็นสิ่งที่ทำให้ผู้เริ่มต้นสับสนเป็นพิเศษเพราะดูคล้ายกันแต่มีวัตถุประสงค์ที่แตกต่างกัน
Java เป็นภาษาที่ออกแบบโดยคำนึงถึงความปลอดภัยและความแข็งแกร่ง และมันมีกลไกในตัวเพื่อจัดการกับข้อผิดพลาดและสถานการณ์ที่ไม่คาดคิดอย่างเหมาะสม กลไกนี้เรียกว่า “exception handling” การจัดการข้อยกเว้นมีบทบาทสำคัญในการปรับปรุงความน่าเชื่อถือและความสามารถในการบำรุงรักษาของโปรแกรม
ในบทความนี้ เราจะมุ่งเน้นไปที่วิธีการใช้ “java throws” โดยเริ่มจากพื้นฐานของการจัดการข้อยกเว้นและไปสู่คำถามที่พบบ่อยและข้อผิดพลาดทั่วไป คู่มือนี้มีประโยชน์เป็นพิเศษสำหรับผู้ที่ไม่แน่ใจเกี่ยวกับความแตกต่างระหว่าง “throw” และ “throws” หรือผู้ที่ต้องการเข้าใจว่าควรใช้ throws ในที่ไหนและอย่างไรให้มีประสิทธิภาพ เรายังรวมข้อมูลปฏิบัติ เคล็ดลับ และตัวอย่างโค้ดที่พบเห็นบ่อยในโครงการจริง ดังนั้นโปรดอ่านจนจบ
2. การจัดการข้อยกเว้นใน Java คืออะไร?
เมื่อเขียนโปรแกรม Java สถานการณ์ที่ไม่คาดคิดต่างๆ สามารถเกิดขึ้นได้ในขณะรันไทม์ ตัวอย่างเช่น ไฟล์อาจไม่พบ เกิดข้อผิดพลาดการหารด้วยศูนย์ หรือพยายามเข้าถึงอาร์เรย์นอกขอบเขต สถานการณ์เหล่านี้เรียกว่า “exceptions”
2.1 แนวคิดพื้นฐานของการจัดการข้อยกเว้น
การจัดการข้อยกเว้นเป็นกลไกที่ตรวจจับสถานการณ์ผิดปกติ (exceptions) ที่เกิดขึ้นระหว่างการรันโปรแกรมและช่วยให้นักพัฒนาจัดการกับ它们อย่างเหมาะสม แทนที่จะหยุดโปรแกรมอย่างกะทันหันเมื่อเกิดข้อยกเว้น Java ช่วยให้แอปพลิเคชันตอบสนองอย่างมีความหมายตามประเภทและเนื้อหาของข้อผิดพลาด ซึ่งช่วยปรับปรุงความเสถียรของแอปพลิเคชันและประสบการณ์ผู้ใช้
2.2 Checked Exceptions และ Unchecked Exceptions
ข้อยกเว้นใน Java แบ่งออกเป็นสองประเภทหลัก
Checked Exceptions
Checked exceptions คือข้อยกเว้นที่ต้องจัดการในขณะคอมไพล์ ตัวอย่างเช่น IOException ระหว่างการดำเนินการไฟล์ ข้อยกเว้นเหล่านี้ต้องถูกจับโดยใช้บล็อก try-catch หรือส่งต่อไปยังผู้เรียกโดยใช้การประกาศ throws
try {
FileReader fr = new FileReader("data.txt");
} catch (IOException e) {
e.printStackTrace();
}
Unchecked Exceptions
Unchecked exceptions คือข้อยกเว้นที่ไม่จำเป็นต้องจัดการบังคับในขณะคอมไพล์ ตัวอย่างทั่วไป ได้แก่ NullPointerException และ ArrayIndexOutOfBoundsException ซึ่งมักเกิดจากข้อผิดพลาดในการเขียนโปรแกรม แม้ว่า Java จะคอมไพล์ได้โดยไม่ต้องจัดการข้อยกเว้นเหล่านี้อย่างชัดเจน แต่แนะนำให้จัดการเมื่อจำเป็นเพื่อหลีกเลี่ยงข้อผิดพลาดที่ไม่คาดคิด
2.3 ทำไมการจัดการข้อยกเว้นจึงจำเป็น
การนำการจัดการข้อยกเว้นไปใช้อย่างเหมาะสมให้ข้อดีดังต่อไปนี้:
- ปรับปรุงความเสถียรของโปรแกรม: แม้จะเกิดข้อผิดพลาดที่ไม่คาดคิด โปรแกรมก็สามารถแสดงข้อความที่เหมาะสมหรือดำเนินการลอจิกการกู้คืนโดยไม่ล้มเหลว
- การดีบักที่ง่ายขึ้น: ประเภทและข้อความของข้อยกเว้นช่วยให้ระบุสาเหตุของปัญหาได้ง่ายขึ้น
- ประสบการณ์ผู้ใช้ที่ดีขึ้น: แทนที่จะหยุดอย่างกะทันหันด้วยข้อผิดพลาด ระบบสามารถให้反馈ที่มีความหมายหรือขั้นตอนการกู้คืน
การจัดการข้อยกเว้นใน Java เป็นทักษะที่จำเป็นสำหรับการสร้างแอปพลิเคชันที่แข็งแกร่ง ในบทถัดไป เราจะอธิบายพื้นฐานของ “throw”
3. throw คืออะไร?
ใน Java “throw” เป็นคำสำคัญที่ใช้เพื่อสร้างข้อยกเว้นโดยตั้งใจ แม้ว่าข้อยกเว้นจะเกิดขึ้นโดยอัตโนมัติระหว่างการรันโปรแกรมบ่อยครั้ง แต่คุณอาจต้องการสร้างและยกข้อยกเว้นเมื่อตรงตามเงื่อนไขบางประการ—นี่คือเวลาที่ใช้ “throw”
3.1 การใช้งานพื้นฐานของ throw
“throw” สร้างออบเจ็กต์ข้อยกเว้นอย่างชัดเจนและโยนมัน ส่งผลให้เกิดข้อยกเว้น ไวยากรณ์พื้นฐานมีดังนี้:
throw new ExceptionClass("Error message");
ตัวอย่างเช่น หากส่งอาร์กิวเมนต์ที่ไม่ถูกต้อง คุณสามารถยกข้อยกเว้นได้เช่นนี้:
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("Age must be zero or greater");
}
this.age = age;
}
ในตัวอย่างนี้, IllegalArgumentException จะถูกโยนเมื่ออายุมีค่าน้อยกว่า ศูนย์.
3.2 ทำไมคุณอาจต้องการโยนข้อยกเว้น
วัตถุประสงค์หลักของการใช้ “throw” คือการแจ้งให้โปรแกรมทราบทันทีเกี่ยวกับสถานะที่ไม่ถูกต้องหรือการละเมิดกฎ ซึ่งช่วยจับบั๊กได้ตั้งแต่เนิ่น ๆ และป้องกันพฤติกรรมที่ไม่คาดคิด.
ตัวอย่างได้แก่:
- เมื่อข้อมูลที่ผู้ใช้ป้อนไม่ผ่านการตรวจสอบ
- เมื่อพารามิเตอร์หรือการกำหนดค่าที่ไม่ถูกต้องถูกส่งเข้า
- เมื่อตรรกะทางธุรกิจป้องกันการประมวลผลต่อไป
3.3 หมายเหตุในการใช้ throw
เมื่อข้อยกเว้นถูกโยนโดยใช้ “throw” มันจะแพร่กระจายไปยังผู้เรียกใช้งาน เว้นแต่จะถูกจัดการด้วยบล็อก try‑catch ภายในเมธอดเดียวกัน สำหรับข้อยกเว้นที่ตรวจสอบได้ (เช่น IOException) เมธอดต้องประกาศ “throws” ในลายเซ็นของมันด้วย สำหรับข้อยกเว้นที่ไม่ตรวจสอบได้ การประกาศ throws เป็นทางเลือก, แต่การเข้าใจความแตกต่างระหว่าง “throw” และ “throws” เป็นสิ่งสำคัญสำหรับการใช้งานที่ถูกต้อง.
4. throws คืออะไร
เมื่อเขียนโปรแกรม Java คุณอาจพบคีย์เวิร์ด “throws” ในการประกาศเมธอด คีย์เวิร์ด throws ใช้เพื่อแจ้งให้ผู้เรียกทราบว่าเมธอดอาจโยนข้อยกเว้นหนึ่งหรือหลายข้อในระหว่างการทำงาน.
4.1 การใช้ throws เบื้องต้น
โดยระบุชื่อคลาสของข้อยกเว้นในการประกาศเมธอด คีย์เวิร์ด throws จะส่งต่อข้อยกเว้นใด ๆ ที่อาจเกิดขึ้นภายในเมธอดไปยังผู้เรียก สำหรับข้อยกเว้นที่ตรวจสอบได้โดยเฉพาะ จำเป็นต้องประกาศด้วย throws เพื่อให้แน่ใจว่าผู้เรียกจะจัดการกับมันอย่างถูกต้อง.
Example:
public void readFile(String path) throws IOException {
FileReader reader = new FileReader(path);
// File reading process
}
ในตัวอย่างนี้, ตัวสร้างของ FileReader สามารถโยน IOException ได้ ดังนั้นเมธอดต้องประกาศ throws IOException.
4.2 การแพร่กระจายข้อยกเว้นในการประกาศเมธอด
เมื่อเมธอดประกาศ throws, ข้อยกเว้นใด ๆ ที่เกิดขึ้นภายในจะถูกส่งต่อไปยังผู้เรียก ผู้เรียกต้องจับข้อยกเว้นนั้นหรือส่งต่อต่อไปโดยประกาศ throws ของตนเอง.
public void processFile() throws IOException {
readFile("test.txt"); // readFile throws IOException, so this method must also declare throws
}
4.3 การประกาศหลายข้อยกเว้น
หากเมธอดอาจโยนหลายข้อยกเว้น สามารถประกาศโดยใช้รายการคั่นด้วยเครื่องหมายจุลภาคหลังคีย์เวิร์ด throws.
public void connect(String host) throws IOException, SQLException {
// Network or database operations
}
4.4 บทบาทและประโยชน์ของ throws
- เพิ่มความอ่านง่ายและการบำรุงรักษา: การประกาศ throws ทำให้เห็นชัดเจนทันทีว่ามีข้อยกเว้นประเภทใดบ้างที่เมธอดอาจโยน ช่วยปรับปรุงการสื่อสารระหว่างนักพัฒนา.
- ความรับผิดชอบที่ชัดเจนในการจัดการข้อผิดพลาด: throws ทำให้ผู้เรียกต้องจัดการกับข้อยกเว้น ส่งเสริมการออกแบบระบบที่มั่นคงและมีโครงสร้าง.
- สนับสนุนข้อยกเว้นแบบกำหนดเอง: นักพัฒนาสามารถรวมคลาสข้อยกเว้นแบบกำหนดเองในการประกาศ throws เพื่อจัดการกับสถานการณ์ข้อผิดพลาดที่ซับซ้อนได้อย่างมีประสิทธิภาพ.
5. ความแตกต่างระหว่าง throw และ throws
แม้ว่ามักจะสับสนกัน, “throw” และ “throws” มีบทบาทที่แตกต่างกันอย่างมากในกลไกการจัดการข้อยกเว้นของ Java บทนี้จะชี้แจงความแตกต่างของพวกมันและอธิบายว่าเมื่อใดและอย่างไรจึงจะใช้แต่ละอย่างได้อย่างถูกต้อง.
5.1 ความแตกต่างเชิงฟังก์ชันระหว่าง throw และ throws
| Item | throw | throws |
|---|---|---|
| Role | Actually generates an exception | Declares that a method may throw exceptions |
| Usage | Used inside methods to throw exception objects | Used in method declarations to specify throwable exceptions |
| Target | Exception objects created with new | Both checked and unchecked exceptions |
| Example | throw new IOException(“Error occurred”); | public void sample() throws IOException |
| When required | When intentionally raising an exception | When a method may throw checked exceptions |
5.2 สถานการณ์ที่ใช้แต่ละแบบ
- throw
- ใช้เมื่อคุณต้องการสร้างข้อยกเว้นอย่างกระตือรือร้น—เช่น เมื่อพบข้อมูลที่ไม่ถูกต้องหรือการละเมิดกฎ
- ตัวอย่าง: “If age is less than zero, throw IllegalArgumentException.”
- throws
- ใช้เมื่อเมธอดหรือคอนสตรัคเตอร์อาจโยนข้อยกเว้นและต้องแจ้งให้ผู้เรียกทราบ
- ตัวอย่าง: “Use throws in methods that handle file operations or database access, where exceptions are expected.”

5.3 ตัวอย่างโค้ดเพื่อเปรียบเทียบ
ตัวอย่างของ throw:
public void setName(String name) {
if (name == null || name.isEmpty()) {
throw new IllegalArgumentException("Name cannot be empty");
}
this.name = name;
}
ตัวอย่างของ throws:
public void loadConfig(String path) throws IOException {
FileReader reader = new FileReader(path);
// Configuration loading process
}
5.4 ตารางสรุป
| Decision Point | throw | throws |
|---|---|---|
| Where it’s used | Inside a method | Method declaration |
| What it does | Generates an exception | Declares exception propagation |
| Who handles it | Thrown at the point of error | Handled by the caller |
| When required | Optional (only when needed) | Required for checked exceptions |
บทบาทของ throw และ throws แตกต่างกันอย่างชัดเจน ดังนั้นการเข้าใจ ว่าควรใช้อันไหนในสถานการณ์ใด เป็นขั้นตอนแรกสู่การจัดการข้อยกเว้นที่แข็งแรง
6. แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ throws
การใช้ throws อย่างมีประสิทธิภาพช่วยปรับปรุงความอ่านง่ายและการบำรุงรักษาของโปรแกรม Java พร้อมทั้งยกระดับคุณภาพโดยรวมของการจัดการข้อยกเว้น บทนี้จะแนะนำแนวทางปฏิบัติที่แนะนำและข้อพิจารณาที่สำคัญซึ่งมักใช้ในการพัฒนาจริง
6.1 ระบุคลาสข้อยกเว้นที่เป็นคอนกรีต
ในการประกาศ throws ควรระบุคลาสข้อยกเว้นที่เป็นคอนกรีตที่สุดเท่าที่เป็นไปได้
หลีกเลี่ยงการประกาศอย่างกว้างขวาง Exception หรือ Throwable
โดยใช้ข้อยกเว้นที่เฉพาะเจาะจงเช่น IOException หรือ SQLException ผู้เรียกสามารถกำหนดวิธีจัดการข้อผิดพลาดได้อย่างแม่นยำ
ตัวอย่างที่ดี:
public void saveData() throws IOException {
// File-saving process
}
หลีกเลี่ยงสิ่งนี้:
public void saveData() throws Exception {
// Too vague: unclear what exceptions may occur
}
6.2 ใช้ประโยชน์จากลำดับชั้นของข้อยกเว้น
เนื่องจากคลาสข้อยกเว้นของ Java มีโครงสร้างเป็นลำดับชั้น ข้อยกเว้นที่เกี่ยวข้องสามารถจัดกลุ่มภายใต้คลาสพาเรนต์เมื่อเหมาะสม
อย่างไรก็ตาม ควรหลีกเลี่ยงการทั่วไปเกินไปด้วยข้อยกเว้นระดับสูง (เช่น Exception) เนื่องจากจะลดความชัดเจนและทำให้การจัดการข้อผิดพลาดยากขึ้น

6.3 ใช้แท็ก @throws ใน Javadoc
เมื่อให้บริการ API หรือไลบรารี คุณควรบันทึกข้อยกเว้นโดยใช้แท็ก @throws ในคอมเมนต์ Javadoc
สิ่งนี้อธิบายเงื่อนไขที่ทำให้เกิดข้อยกเว้นอย่างชัดเจน ช่วยให้ผู้ใช้ API สามารถดำเนินการจัดการข้อยกเว้นได้อย่างถูกต้อง
/**
* Reads a file.
* @param filePath Path of the file to read
* @throws IOException If the file cannot be read
*/
public void readFile(String filePath) throws IOException {
// ...
}
6.4 หลีกเลี่ยงการโยนข้อยกเว้นซ้ำโดยไม่จำเป็น
หลีกเลี่ยงการจับข้อยกเว้นแล้วโยนซ้ำโดยไม่ได้เพิ่มคุณค่า
หากจำเป็นต้องโยนซ้ำ ให้ห่อหุ้มข้อยกเว้นเดิมในข้อยกเว้นที่กำหนดเองหรือเพิ่มบริบทหรือข้อมูลการบันทึกเพิ่มเติม
6.5 การใช้คลาสข้อยกเว้นที่กำหนดเอง
ในแอปพลิเคชันธุรกิจและระบบขนาดใหญ่ มักจะกำหนดคลาสข้อยกเว้นที่กำหนดเองและรวมไว้ในการประกาศ throws
สิ่งนี้ช่วยทำให้สาเหตุของข้อผิดพลาดและความรับผิดชอบชัดเจน ทำให้ระบบบำรุงรักษาและขยายได้ง่ายขึ้น
public class DataNotFoundException extends Exception {
public DataNotFoundException(String message) {
super(message);
}
}
public void findData() throws DataNotFoundException {
// Throw when data is not found
}
โดยการใช้ throws อย่างเหมาะสม คุณสามารถกระจายความรับผิดชอบในการจัดการข้อยกเว้น ทำให้การแก้ไขปัญหาง่ายขึ้น และสร้างแอปพลิเคชัน Java ที่เชื่อถือได้และปลอดภัย
7. รูปแบบการจัดการข้อยกเว้นเชิงปฏิบัติ
การจัดการข้อยกเว้นใน Java มีมากกว่าบล็อก try-catch หรือการประกาศ throws อย่างง่าย
บทนี้จะแนะนำรูปแบบเชิงปฏิบัติและกลยุทธ์การออกแบบที่มักใช้ในการพัฒนาจริง
7.1 การจัดการทรัพยากรด้วย try-with-resources
เมื่อทำงานกับไฟล์ การเชื่อมต่อเครือข่าย หรือการเชื่อมต่อฐานข้อมูล การปล่อยทรัพยากรอย่างเหมาะสมแม้ในกรณีที่เกิดข้อยกเว้นเป็นสิ่งสำคัญ
ตั้งแต่ Java 7 คำสั่ง try-with-resources ทำให้ทรัพยากรถูกปิดโดยอัตโนมัติ
try (FileReader reader = new FileReader("data.txt")) {
// File reading process
} catch (IOException e) {
System.out.println("Failed to read file: " + e.getMessage());
}
This syntax ensures that close() is called automatically, preventing resource leaks even if exceptions occur.
7.2 การจัดการข้อยกเว้นหลายประเภทอย่างมีประสิทธิภาพ
Complex operations may produce multiple types of exceptions. Since Java 7, you can catch multiple exceptions in a single catch clause using the multi-catch feature.
try {
methodA();
methodB();
} catch (IOException | SQLException e) {
// Handle both exceptions here
e.printStackTrace();
}
You can also separate catch blocks to provide customized handling for each exception type.
7.3 พิจารณาด้านประสิทธิภาพสำหรับการจัดการข้อยกเว้น
While exceptions are powerful, they should not replace normal control flow. Generating exceptions requires significant overhead because stack traces must be created, so they should be reserved for truly exceptional cases.
Incorrect usage (not recommended):
try {
int value = array[index];
} catch (ArrayIndexOutOfBoundsException e) {
// Bounds checking should be done beforehand
}
Recommended usage:
if (index >= 0 && index < array.length) {
int value = array[index];
} else {
// Out-of-range handling
}
7.4 การบันทึกและการแจ้งเตือน
Proper logging and alerting are essential for troubleshooting when exceptions occur. Business systems often use logging frameworks (e.g., Log4j, SLF4J) to record detailed exception information.
catch (Exception e) {
logger.error("An error has occurred", e);
}
7.5 การนำตรรกะการกู้คืนแบบกำหนดเองมาใช้
In some cases, it is useful to implement recovery logic such as retrying an operation, reloading configuration files, or notifying users. Instead of terminating the program immediately, strive to maintain service continuity whenever possible.
By adopting practical exception-handling techniques, you can build Java applications that are both reliable and maintainable.
8. คำถามที่พบบ่อย (FAQ)
Below are common questions from beginners about Java exception handling, particularly regarding “throws,” along with their answers.
Q1. ความแตกต่างหลักระหว่าง throw กับ throws คืออะไร?
A1. throw เป็นคีย์เวิร์ดที่ สร้าง ข้อยกเว้นจริงๆ ระหว่างการทำงานของโปรแกรม throws ใช้ในประกาศเมธอดเพื่อ ประกาศความเป็นไปได้ ที่เมธอดอาจทำให้เกิดข้อยกเว้น → วิธีจำง่าย: throw = “ดำเนินการ,” throws = “ประกาศ”
Q2. ควรระวังอะไรบ้างเมื่อใช้ throws?
A2. ข้อยกเว้นที่ประกาศด้วย throws ต้องถูกจับโดยผู้เรียกหรือส่งต่อต่อไปโดยใช้ throws สำหรับข้อยกเว้นที่ตรวจสอบได้ (checked exceptions) จำเป็นต้องมีการจัดการอย่างชัดเจน หากคุณไม่จับหรือส่งต่อข้อยกเว้น โปรแกรมจะไม่คอมไพล์
Q3. สามารถใช้ throw และ throws ร่วมกันได้หรือไม่?
A3. ใช่. รูปแบบทั่วไปคือการสร้างข้อยกเว้นด้วย throw ภายในเมธอดและประกาศข้อยกเว้นเดียวกันด้วย throws เพื่อให้ส่งต่อไปยังผู้เรียก
Q4. จะประกาศหลายข้อยกเว้นด้วย throws อย่างไร?
A4. ใส่รายการข้อยกเว้นหลังคีย์เวิร์ด throws แยกด้วยเครื่องหมายคอมม่า ตัวอย่าง: public void sample() throws IOException, SQLException
Q5. ควรใช้ throws กับข้อยกเว้นที่ไม่ตรวจสอบได้หรือไม่?
A5. ข้อยกเว้นที่ไม่ตรวจสอบได้ (ที่สืบทอดจาก RuntimeException) ไม่จำเป็นต้องประกาศด้วย throws อย่างไรก็ตาม สามารถใช้ throws ได้เมื่อคุณต้องการแจ้งให้ผู้เรียกระบุว่เมธอดอาจทำให้เกิดข้อยกเว้นที่ไม่ตรวจสอบได้เฉพาะเจาะจง เพื่อเพิ่มความอ่านง่ายและความชัดเจนของ API
Q6. การประกาศ Exception หรือ Throwable ในคลอส throws เป็นเรื่องที่ยอมรับได้หรือไม่?
A6. ตามเทคนิคแล้วสามารถทำได้ แต่ไม่แนะนำ การประกาศประเภทข้อยกเว้นที่กว้างเกินไปทำให้ไม่ชัดเจนว่าข้อผิดพลาดใดอาจเกิดขึ้นและทำให้การจัดการที่ผู้เรียกทำได้ยากขึ้น ควรใช้คลาสข้อยกเว้นที่เจาะจงเมื่อเป็นไปได้
Q7. ฉันต้องจับข้อยกเว้นที่ประกาศใน throws เสมอหรือไม่?
A7.
สำหรับข้อยกเว้นที่ตรวจสอบได้ ผู้เรียกต้องจับข้อยกเว้นนั้นหรือส่งต่อต่อไปโดยใช้ throws.
หากไม่ทำเช่นนั้น จะทำให้เกิดข้อผิดพลาดในการคอมไพล์.
ข้อยกเว้นที่ไม่ตรวจสอบ (unchecked exceptions) ไม่ต้องทำอย่างใดอย่างหนึ่ง.
Q8. จะเกิดอะไรขึ้นหากฉันลืมเขียน throws?
A8.
หากเมธอด throws ข้อยกเว้นที่ตรวจสอบได้แต่ไม่ได้ระบุด้วย throws จะเกิดข้อผิดพลาดในระหว่างคอมไพล์.
สำหรับข้อยกเว้นที่ไม่ตรวจสอบ เมธอดจะคอมไพล์ปกติแม้ไม่มี throws, แต่ควรยังคงทำการจัดการข้อผิดพลาดอย่างเหมาะสม.
ใช้ส่วน FAQ นี้เพื่อเพิ่มความเข้าใจของคุณเกี่ยวกับการจัดการข้อยกเว้นใน Java.


