CodeGym /หลักสูตร /Java ไวยากรณ์ /ประเภทข้อยกเว้น

ประเภทข้อยกเว้น

Java ไวยากรณ์
ระดับ, บทเรียน
มีอยู่
ประเภทข้อยกเว้น

"วันนี้ฉันอยากจะพูดอีกเรื่องหนึ่ง ใน Java ข้อยกเว้นทั้งหมดจะแบ่งออกเป็นสองประเภท: ทำเครื่องหมายและไม่ได้ทำเครื่องหมาย (สิ่งที่ต้องตรวจจับได้ และสิ่งที่ไม่ต้องตรวจจับ) ตามค่าเริ่มต้นข้อยกเว้น ทั้งหมด ต้องเป็น จับได้."

"คุณจงใจโยนข้อยกเว้นในโค้ดของคุณได้ไหม"

"คุณสามารถโยนข้อยกเว้นใดๆ ลงในโค้ดของคุณเองได้ คุณยังสามารถเขียนข้อยกเว้นของคุณเองได้ แต่เราจะพูดถึงเรื่องนี้ในภายหลัง ตอนนี้ เรามาเน้นที่ข้อยกเว้นที่โยนโดย Java Machine"

"ตกลง."

"หากClassNotFoundExceptionหรือFileNotFoundExceptionถูกโยน (เกิดขึ้น) ในเมธอด ผู้พัฒนาต้องระบุในเมธอดการประกาศ สิ่งเหล่านี้คือ ข้อยกเว้นที่ มีการตรวจสอบนี่คือลักษณะที่ปรากฏ:"

ตัวอย่างของข้อยกเว้นที่ตรวจสอบ
public static void method1() throws ClassNotFoundException, FileNotFoundException
public static void main() throws IOException
public static void main() // Doesn't throw any exceptions

"เราแค่เขียน 'throws' ตามด้วยรายการข้อยกเว้นที่คั่นด้วยเครื่องหมายจุลภาค ใช่ไหม"

"ใช่ แต่ยังมีอีกมาก เพื่อให้โปรแกรมคอมไพล์ เมธอดที่เรียกใช้method1ในตัวอย่างด้านล่างต้องทำอย่างใดอย่างหนึ่งจากสองสิ่งต่อไปนี้: จับข้อยกเว้นเหล่านี้หรือโยนใหม่ (ให้กับผู้เรียก)โดยระบุข้อยกเว้นที่เปลี่ยนใหม่ในการประกาศ "

"อีกครั้ง ถ้าเมธอดหลักของคุณต้องการเรียกเมธอดที่มีการประกาศว่า ' throws FileNotFoundException , …' คุณต้องทำอย่างใดอย่างหนึ่งต่อไปนี้:

1) จับ FileNotFoundException , …

คุณต้องห่อโค้ดที่เรียกใช้เมธอดที่ไม่ปลอดภัยในบล็อกtry-catch

2) อย่าจับ FileNotFoundException , …

คุณต้องเพิ่มข้อยกเว้นเหล่านี้ใน รายการ โยนของ วิธีการ หลัก ของคุณ "

"คุณช่วยยกตัวอย่างให้ฉันได้ไหม"

"ดูที่นี้:"

ตัวอย่างของข้อยกเว้นที่ตรวจสอบ
public static void main(String[] args)
{
    method1();
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"โค้ดในตัวอย่างนี้จะไม่คอมไพล์ เนื่องจาก เมธอด หลักเรียกใช้method1()ซึ่งจะโยนข้อยกเว้นที่ต้องตรวจจับ"

"ในการคอมไพล์ เราจำเป็นต้องเพิ่มการจัดการข้อยกเว้นให้กับเมธอดหลัก คุณสามารถทำได้ด้วยวิธีใดวิธีหนึ่งจากสองวิธี:"

ตัวเลือกที่ 1: เราเพียงแค่โยนข้อยกเว้นใหม่ (ให้กับผู้โทร):
public static void main(String[] args)  throws FileNotFoundException, ClassNotFoundException
{
    method1();
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"และที่นี่เราจับมันด้วยการลองจับ :"

ตัวเลือกที่ 2: จับข้อยกเว้น:
public static void main(String[] args)
{
    try
    {
        method1();
    }
    catch(Exception e)
    {
    }
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"เริ่มชัดเจนขึ้นแล้ว"

"ดูตัวอย่างต่อไปนี้ จะช่วยให้คุณเข้าใจส่วนที่เหลือ"

แทนที่จะจัดการข้อยกเว้น เราโยนมันใหม่เป็นเมธอดที่อยู่ลึกลงไปที่ call stack ซึ่งรู้วิธีจัดการกับมัน:
public static void method2() throws FileNotFoundException, ClassNotFoundException
{
    method1();
}
จัดการข้อยกเว้นหนึ่งรายการแล้วโยนอีกรายการหนึ่ง:
public static void method3() throws ClassNotFoundException
{
   try
    {
        method1();
    }
    catch (FileNotFoundException e)
    {
        System.out.println("FileNotFoundException has been caught.");
    }
}
จับข้อยกเว้นทั้งสอง ไม่โยนเลย:
public static void method4()
{
    try
    {
        method1();
    }
    catch (FileNotFoundException e)
    {
        System.out.println("FileNotFoundException has been caught.");
    }
    catch (ClassNotFoundException e)
    {
        System.out.println("ClassNotFoundException has been caught.");
    }
}
3
งาน
Java ไวยากรณ์, ระดับ, บทเรียน
ล็อค
Code entry
Your attention, please! Now recruiting code entry personnel for CodeGym. So turn up your focus, let your fingers relax, read the code, and then... type it into the appropriate box. Code entry is far from a useless exercise, though it might seem so at first glance: it allows a beginner to get used to and remember syntax (modern IDEs seldom make this possible).

"มีข้อยกเว้นอีกประเภทหนึ่งคือ RuntimeExceptionและคลาสที่สืบทอดมา คุณไม่จำเป็นต้องจับข้อยกเว้นเหล่านี้ สิ่งเหล่านี้เป็นข้อยกเว้นที่ไม่ได้ตรวจสอบ พวกเขาถือว่าคาดเดาได้ยาก คุณสามารถจัดการกับพวกเขาในลักษณะเดียวกัน แต่คุณ ไม่จำเป็นต้องระบุไว้ใน ประโยค โยน "

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION