目錄
應該拋出相同的異常或子類型
範例
輸出
不應該拋出超類別的異常
編譯時錯誤
不拋出任何例外
首頁 Java java教程 在Java中,關於方法覆蓋,異常處理的規則是什麼?

在Java中,關於方法覆蓋,異常處理的規則是什麼?

Sep 06, 2023 pm 06:29 PM
異常處理(exception handling) 繼承(inheritance) 方法覆蓋: 覆蓋(override) 方法重寫(method override) 異常處理: 異常(exception) try-catch區塊

在Java中,關於方法覆蓋,異常處理的規則是什麼?

當覆寫超類別方法時,如果該方法拋出異常,您需要遵循一定的規則。

應該拋出相同的異常或子類型

如果超類別方法拋出某個異常,子類別中的方法應該拋出相同的異常或它的子類型。

範例

在下面的範例中,超類別的readFile()方法拋出了IOException異常,而子類別的readFile()方法拋出了FileNotFoundException異常。

由於FileNotFoundException異常是IOException的子類型,所以程式可以在沒有任何錯誤的情況下編譯和執行。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
abstract class Super {
   public String readFile(String path) throws IOException {
      throw new IOException();
   }
}
public class ExceptionsExample extends Super {
   @Override
   public String readFile(String path) throws FileNotFoundException {
      Scanner sc = new Scanner(new File("E://test//sample.txt"));
      String input;
      StringBuffer sb = new StringBuffer();
      while (sc.hasNextLine()) {
         input = sc.nextLine();
         sb.append(" "+input);
      }
      return sb.toString();
   }
   public static void main(String args[]) {
      String path = "E://test//sample.txt";
      ExceptionsExample obj = new ExceptionsExample();
      try {
         System.out.println(obj.readFile(path));
      }catch(FileNotFoundException e) {
         System.out.println("Make sure the specified file exists");
      }
   }
}
登入後複製

輸出

Tutorials Point is an E-learning company that set out on its journey to provide knowledge to that class of readers that responds better to online content. With Tutorials Point, you can learn at your own pace, in your own space. After a successful journey of providing the best learning content at tutorialspoint.com, we created our subscription based premium product called Tutorix to provide Simply Easy Learning in the best personalized way for K-12 students, and aspirants of competitive exams like IIT/JEE and NEET.
登入後複製

範例

同樣,如果子類別拋出與超類別相同的異常,則程式將成功編譯並執行。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
abstract class Super {
   public void sampleMethod()throws FileNotFoundException {
      System.out.println("Method of superclass");
   }
}
public class ExceptionsExample extends Super {
   public void sampleMethod()throws FileNotFoundException {
      System.out.println("Method of Subclass");
   }
   public static void main(String args[]) {
      ExceptionsExample obj = new ExceptionsExample();
      obj.sampleMethod();
   }
}
登入後複製

輸出

Method of Subclass
登入後複製
登入後複製

不應該拋出超類別的異常

如果超類別方法拋出某個異常,子類別中的方法不應該拋出其超類。

範例

在下面的範例中,超類別的readFile()方法拋出FileNotFoundException異常,而子類別的readFile()方法拋出IOException異常,後者是FileNotFoundException的超類。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
abstract class Super {
   public String readFile(String path)throws FileNotFoundException {
      throw new FileNotFoundException();
   }
}
public class ExceptionsExample extends Super {
   @Override
   public String readFile(String path)throws IOException {
      //method body ......
   }
}
登入後複製

編譯時錯誤

編譯時,上面的程式給出以下輸出-

ExceptionsExample.java:13: error: readFile(String) in ExceptionsExample cannot override readFile(String) in Sup
   public String readFile(String path)throws IOException {
                 ^
   overridden method does not throw IOException
1 error
登入後複製

不拋出任何例外

如果父類別方法拋出出某些異常,你可以在重寫時不拋出任何異常。

範例

在下面的範例中,父類別的sampleMethod()方法會拋出FileNotFoundException異常,而子類別的sampleMethod()方法根本不會拋出任何例外。儘管如此,該程式可以編譯和執行而不會出現任何錯誤。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
abstract class Super {
   public void sampleMethod()throws FileNotFoundException {
      System.out.println("Method of superclass");
   }
}
public class ExceptionsExample extends Super {
   public void sampleMethod() {
      System.out.println("Method of Subclass");
   }
   public static void main(String args[]) {
      ExceptionsExample obj = new ExceptionsExample();
      obj.sampleMethod();
   }
}
登入後複製

輸出

Method of Subclass
登入後複製
登入後複製

以上是在Java中,關於方法覆蓋,異常處理的規則是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

解決Java斷言異常(AssertionError)的解決方案 解決Java斷言異常(AssertionError)的解決方案 Aug 25, 2023 pm 03:06 PM

解決Java斷言異常(AssertionError)的解決方案在Java開發中,斷言是一種常用的偵錯工具。透過使用斷言,我們可以在程式碼中插入一些條件,以確保程式在運行時滿足預期的條件。然而,有時我們可能會遇到Java斷言異常(AssertionError),這意味著斷言條件沒有得到滿足,導致程式拋出異常。出現斷言異常的原因通常是設計時對程式碼的假設不正確或者

如何解決C++開發中的程式碼層級關係問題 如何解決C++開發中的程式碼層級關係問題 Aug 22, 2023 am 11:22 AM

如何解決C++開發中的程式碼層級關係問題開發複雜的C++程式時,一個常見的問題就是程式碼層級關係的管理。不正確的層級關係會導致程式碼變得難以閱讀、維護和擴展。為了解決這個問題,我們可以採取以下幾個策略。首先,我們可以使用合適的目錄結構來組織程式碼檔案。一個好的目錄結構可以使程式碼檔案更有序地排列,方便我們在開發過程中快速定位或修改相關程式碼。通常,建議按照功能或模

C++中常見的程式碼復用問題解決方案 C++中常見的程式碼復用問題解決方案 Oct 09, 2023 pm 01:50 PM

C++中常見的程式碼復用問題解決方案在C++程式設計中,程式碼重複使用是一種重要的技術,可以提高開發效率和程式碼的可維護性。然而,常常會遇到一些常見的程式碼重複使用問題,例如重複的程式碼片段、複雜的繼承關係等。本文將介紹幾種解決這些問題的常用方法,並提供具體的程式碼範例。函數封裝函數封裝是一種常見的程式碼復用方法,透過將一段程式碼封裝成一個函數,可以在其他地方多次調用,避免重複編寫相同

在Java中的抽象類別 在Java中的抽象類別 Sep 22, 2023 am 11:53 AM

在聲明中包含abstract關鍵字的類別稱為抽象類別。抽象類別可能包含也可能不包含抽象方法,即沒有主體的方法(publicvoidget();)但是,如果一個類別至少有一個抽象方法,則該類別必須聲明為抽象。如果一個類別聲明為抽象,則它不能被實例化。要使用抽象類,您必須從另一個類別繼承它,並提供其中抽象方法的實作。如果您繼承抽象類,則您有為其中的所有抽象方法提供實作。範例本節為您提供了抽象類別的範例。要建立抽象類,只需在類別聲明中的class關鍵字之前使用abstract關鍵字。 /*Filename:Emplo

PHP中如何處理並發錯誤? PHP中如何處理並發錯誤? Dec 18, 2023 am 08:24 AM

PHP中如何處理並發錯誤?在開發網頁應用程式時,我們經常會遇到並發錯誤的問題。並發錯誤是指多個使用者同時存取同一段程式碼時可能出現的問題,如資料庫死鎖、資源競爭等。為了確保程式碼的正確性和效能,我們需要採取一些措施來處理並發錯誤。以下是一些處理並發錯誤的方法,包括具體的程式碼範例。使用資料庫事務具體範例程式碼:try{$pdo->beginTran

Golang的異常處理 Golang的異常處理 Jul 24, 2023 pm 03:20 PM

Golang的優點很多,以前的文章中也有提到過,但也有很多槽點為Gopher所詬病,尤其是 錯誤處理。在說錯誤和異常之前,先要說兩個概念:錯誤處理:錯誤是業務中的一部分,是可以預見的。異常處理:非業務的一部分,不可預見的。

如何在C++中進行物件導向的程式設計? 如何在C++中進行物件導向的程式設計? Aug 27, 2023 am 08:34 AM

如何在C++中進行物件導向的程式設計?物件導向程式設計(Object-OrientedProgramming,OOP)是一種十分常見且重要的軟體開發範式。 C++是一種多範式的程式語言,其中包含了對物件導向程式設計的支援。在C++中,透過類別(class)和物件(object)的概念,我們可以方便地實現物件導向的程式設計。首先,我們需要定義一個類別。類別是一種自訂

如何解決Java中遇到的安全性問題 如何解決Java中遇到的安全性問題 Jul 01, 2023 am 11:13 AM

如何解決Java中遇到的安全性問題導語:隨著網路的普及和發展,Java成為了最常用的程式開發語言之一。然而,由於其開放性和普及度,Java程式頻繁受到駭客攻擊。本文將介紹一些常見的Java安全性問題,並探討如何解決這些問題,以保護我們的應用程式免受攻擊。引言:在Java開發中,安全性問題主要包括資料外洩、身份驗證和授權、異常處理以及程式碼注入等面向。下面,我

See all articles