Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

กฎของการจัดการข้อยกเว้นเกี่ยวกับวิธีการแทนที่ใน java คืออะไร?


ในขณะที่เมธอด superclass ส่งข้อยกเว้นในขณะที่ทำการแทนที่ คุณต้องปฏิบัติตามกฎบางอย่าง

ควรโยนข้อยกเว้นเดียวกันหรือประเภทย่อย

หากเมธอด super-class แสดงข้อยกเว้นบางอย่าง เมธอดในคลาสย่อยควรมีข้อยกเว้นเดียวกันหรือประเภทย่อย

ตัวอย่าง

ในตัวอย่างต่อไปนี้ เมธอด readFile() ของซูเปอร์คลาสจะส่ง IOEXception และเมธอด readFile() ของคลาสย่อยจะส่งข้อยกเว้น FileNotFoundException

เนื่องจากข้อยกเว้น FileNotFoundException เป็นประเภทย่อยของ IOException โปรแกรมนี้จึงถูกคอมไพล์และดำเนินการโดยไม่มีข้อผิดพลาด

นำเข้า java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.util.Scanner;abstract class Super { สตริงสาธารณะ readFile (เส้นทางสตริง) พ่น IOException { โยน IOException ใหม่ (); }} คลาสสาธารณะ ExceptionsExample ขยาย Super { @Override สตริงสาธารณะ readFile (เส้นทางสตริง) พ่น FileNotFoundException { Scanner sc =สแกนเนอร์ใหม่ (ไฟล์ใหม่ ("E://test//sample.txt")); อินพุตสตริง; StringBuffer sb =ใหม่ StringBuffer(); ในขณะที่ (sc.hasNextLine ()) { อินพุต =sc.nextLine (); sb.append(" "+อินพุต); } ส่งคืน sb.toString(); } โมฆะคงที่สาธารณะหลัก (สตริง args []) { เส้นทางสตริง ="E://test//sample.txt"; ExceptionsExample obj =ExceptionsExample ใหม่ (); ลอง { System.out.println (obj.readFile (เส้นทาง)); } catch (FileNotFoundException จ) { System.out.println ("ตรวจสอบให้แน่ใจว่ามีไฟล์ที่ระบุอยู่"); } }}

ผลลัพธ์

Tutorials Point เป็นบริษัทอีเลิร์นนิงที่ออกเดินทางเพื่อให้ความรู้แก่ผู้อ่านกลุ่มนั้นที่ตอบสนองต่อเนื้อหาออนไลน์ได้ดีขึ้น ด้วย Tutorials Point คุณสามารถเรียนรู้ได้ตามต้องการในพื้นที่ของคุณเอง หลังจากการเดินทางที่ประสบความสำเร็จในการจัดหาเนื้อหาการเรียนรู้ที่ดีที่สุดที่ tutorialspoint.com เราได้สร้างผลิตภัณฑ์พรีเมียมตามการสมัครรับข้อมูลที่เรียกว่า Tutorix เพื่อให้การเรียนรู้ที่ง่ายอย่างง่ายในรูปแบบส่วนตัวที่ดีที่สุดสำหรับนักเรียน K-12 และผู้ที่ต้องการสอบแข่งขัน เช่น IIT/JEE และ นีท

ตัวอย่าง

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

<ก่อน> นำเข้า java.io.File; นำเข้า java.io.FileNotFoundException; นำเข้า java.io.IOException; นำเข้า java.util.Scanner; คลาสนามธรรม Super { โมฆะสาธารณะ sampleMethod () โยน FileNotFoundException { System.out.println (" วิธีการของซูเปอร์คลาส"); }} ExceptionsExample คลาสสาธารณะขยาย Super { โมฆะสาธารณะ sampleMethod () โยน FileNotFoundException { System.out.println ("วิธีการของคลาสย่อย"); } โมฆะคงที่สาธารณะหลัก (สตริง args []) { ExceptionsExample obj =ExceptionsExample ใหม่ (); obj.sampleMethod(); }}

ผลลัพธ์

วิธีการของคลาสย่อย

ไม่ควรโยนข้อยกเว้นของ super type

หากเมธอด super-class ส่งข้อยกเว้นบางอย่าง เมธอดในคลาสย่อยไม่ควรโยน super type

ตัวอย่าง

ในตัวอย่างต่อไปนี้ เมธอด readFile() ของซูเปอร์คลาสส่งข้อยกเว้น FileNotFoundException และเมธอด readFile() ของคลาสย่อยส่ง IOException ซึ่งเป็นประเภทซุปเปอร์ของ FileNotFoundException

<ก่อนหน้า> นำเข้า java.io.File; นำเข้า java.io.FileNotFoundException; นำเข้า java.io.IOException; นำเข้า java.util.Scanner; คลาสนามธรรม Super { สตริงสาธารณะ readFile (เส้นทางสตริง) โยน FileNotFoundException { โยน FileNotFoundException ใหม่ (); }} คลาสสาธารณะ ExceptionsExample ขยาย Super { @Override สตริงสาธารณะ readFile (เส้นทางสตริง) โยน IOException { //method body ...... }}

ข้อผิดพลาดในการคอมไพล์

ในการคอมไพล์ โปรแกรมด้านบนให้ผลลัพธ์ต่อไปนี้ -

ExceptionsExample.java:13:ข้อผิดพลาด:readFile(String) ใน ExceptionsExample ไม่สามารถแทนที่ readFile (String) ในสตริงสาธารณะ Sup readFile (เส้นทางสตริง) โยน IOException { ^ วิธีการที่ถูกแทนที่ไม่เกิดข้อผิดพลาด IOException1

ไม่มีข้อยกเว้น

หากเมธอด super-class ส่งข้อยกเว้นบางอย่างออกไป คุณสามารถแทนที่ได้โดยไม่มีข้อยกเว้น

ตัวอย่าง

ในตัวอย่างต่อไปนี้ เมธอด sampleMethod() ของ super-class ส่งข้อยกเว้น FileNotFoundException และเมธอด sampleMethod() จะไม่ส่งข้อยกเว้นใดๆ เลย โปรแกรมนี้ยังคงได้รับการคอมไพล์และดำเนินการโดยไม่มีข้อผิดพลาด

<ก่อน> นำเข้า java.io.File; นำเข้า java.io.FileNotFoundException; นำเข้า java.io.IOException; นำเข้า java.util.Scanner; คลาสนามธรรม Super { โมฆะสาธารณะ sampleMethod () โยน FileNotFoundException { System.out.println (" วิธีการของซูเปอร์คลาส"); }} คลาสสาธารณะ ExceptionsExample ขยาย Super { โมฆะสาธารณะ sampleMethod () { System.out.println ("วิธีการของคลาสย่อย"); } โมฆะคงที่สาธารณะหลัก (สตริง args []) { ExceptionsExample obj =ExceptionsExample ใหม่ (); obj.sampleMethod(); }}

ผลลัพธ์

วิธีการของคลาสย่อย