本文主要是介绍异常处理的方式2:throws,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
异常处理的方式2:throws 1. 格式:在方法的声明除,使用"throws 异常类型1,异常类型2,..."2. 举例:public void test() throws 异常类型1,异常类型2,.. {//可能存在编译时异常 }
package chapter09_exception.src.com.atguigu03._throws; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException;/*** @author 尚硅谷-宋红康* @create 15:24*/ public class ThrowsTest {public static void main(String[] args) {methond3();}public static void methond3 (){try {methond2();} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}}public static void methond2() throws FileNotFoundException, IOException {method1();}public static void method1() throws FileNotFoundException, IOException {File file = new File("D:\\hello.txt");FileInputStream fis = new FileInputStream(file); //可能报FileNotFoundExceptionint data = fis.read(); //可能报IOExceptionwhile(data != -1){System.out.print((char)data);data = fis.read(); //可能报IOException}fis.close(); //可能报IOException}}
3. 是否真正处理了异常? > 从编译是否能通过的角度看,看成是给出了异常万一要是出现时候的解决方案。此方案就是,继续向上抛出(throws)。 > 但是,此throws的方式,仅是将可能出现的异常抛给了此方法的调用者。此调用者仍然需要考虑如何处理相关异常。从这个角度来看,throws的方式不算是真正意义上处理了异常。
4. 方法的重写的要求:(针对于编译时异常来说的) 子类重写的方法抛出的异常类型可以与父类被重写的方法抛出的异常类型相同,或是父类被重写的方法抛出的异常类型的子类。
package chapter09_exception.src.com.atguigu03._throws;import java.io.FileNotFoundException; import java.io.IOException;/*** ClassName: OverrideTest* Package: chapter09_exception.src.com.atguigu03._throws* Description:** @Author 小白* @Create 2024/4/6 14:24* @Version 1.0*/ public class OverrideTest {public static void main(String[] args) {Father f =new Son();try {f.method1();} catch (IOException e) {e.printStackTrace();}//父类调用方法用Number接收 因为父类的返回值就是 Number 实际执行的时候是子类重写的方法//子类返回的是Integer 体现的是多态性Number n= f.method4();}}//因为多态性 编译看父类 所以编译时的异常在父类(比如本例中父类的异常IOException已经处理了) // 就已经处理了(就已经try{}catch{}了) // 所以子类的 throws异常(比如本例的FileNotFoundException异常)不能大于父类的异常 class Father{public void method1() throws IOException {}//父类没有抛出异常 刚子类就不要去抛public void method2() {}public void method3() {}public Number method4() {return null;}}class Son extends Father{public void method1() throws FileNotFoundException {}//父类没有抛出异常 则类就不要去抛 也就是不能用throws 如果子类有异常只能只能try{}catch{} // public void method2() throws IOException { // // }//虽然说父类没有抛出异常 则子类就不要去抛 但是可以抛运行时异常 不过写不写throws RuntimeException//都没有多大关系 也就是说子类这边也是可以不用抛public void method3 () throws RuntimeException {}public Integer method4() {return null;}}
5. 开发中,如何选择异常处理的两种方式?(重要、经验之谈) - 如果程序代码中,涉及到资源的调用(流、数据库连接、网络连接等),则必须考虑使用try-catch-finally来处理,保证不出现内存泄漏。 - 如果父类被重写的方法没有throws异常类型,则子类重写的方法中如果出现异常,只能考虑使用try-catch-finally进行处理,不能throws。 - 开发中,方法a中依次调用了方法b,c,d等方法,方法b,c,d之间是递进关系。此时,如果方法b,c,d中有异常,我们通常选择使用throws,而方法a中通常选择使用try-catch-finally。
这篇关于异常处理的方式2:throws的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!