java异常处理之throw(主动抛)和throws(被动抛)以及自定义异常类

throws被动抛

格式和位置

修饰符 返回值类型 方法名(参数列表) throws 异常类名 {
					方法体内容
			}

在这里插入图片描述
异常被抛给java虚拟机jvm了,在发生异常的代码处会中断执行,在控制台由jvm打印异常信息,换言之,发生异常之后的代码都不再执行。
在这里插入图片描述
可以连续抛多个异常

编译时异常和运行时异常

①针对运行时异常RuntimeException,它在编译时不会报红,只会在运行时打印错误,就算我们不在方法声明后面throws运行时异常,java虚拟机jvm也会帮我们在控制台输出异常信息,所以针对RuntimException加不加其实都可以。

②但是编译时异常会在你写代码的时候就报红(有红叉),你要吗try-catch要么抛出去,不然没办法生成.class字节码文件,就根本无法运行。
在这里插入图片描述

使用的注意事项

1.哪里调用抛哪里

在这里插入图片描述
a.在方法ccc()中的第26行代码,底层会创建ParseException pe = new ParseException();这里出现格式解析异常属于编译时异常,会报错,所以要吗try-cacth捕获后自己处理(处理后上面调用就不会再爆红了)
要吗在方法体上throws抛出异常,让调用者去处理。所以这个异常就被抛到调用者那里了。这就是所谓的哪里调用抛哪里

b.bbb()调用ccc(),那它要么try-catch处理ccc()抛出来的异常要么用throws 继续向上抛。aaa()同理

c.如果他们全都选择继续向上抛,那么main在调用aaa()时就会报红,可以在main里进行try-catch
当然!main也可以继续向上抛。main向上抛给谁呢?当然是调用它的java虚拟机(jvm)啦,而jvm已经是最底层了,他不能再继续向上抛了,就只能帮我们处理啦。

2.抛编译时异常和运行时异常的区别

如果抛的是编译时期异常的话,哪里调用抛里,接收的地方还是要继续处理,要么抛要么捕获(因为会报红)
如果抛的是运行时期异常的话,哪里调用抛哪里,接收的地方是不需要处理的。(能正常编译在运行时才会出现)

3.子父类继承时

在子父类继承中,子类重写父类的方法,如果父类的方法没有抛异常,子类的方法也不能抛异常。
如果父类方法也抛异常了,子类重写的方法所抛的异常不可以是父类方法所抛异常的父类
(子类抛出的异常范围不能超过父类)

throw主动抛

1. 格式和位置

格式:throw 异常对象
位置:写在方法的里面

2.Exception的有参构造

在这里插入图片描述
Exception e = new Exception(“没有给我吃肉”);
就是有参构造,可以用来描述具体的错误信息

自定义异常类

1.格式

写一个类让它extends(继承) throwable,Exception,RuntimeEXception等,它就成为异常类了。通常里面留一个空参构造,一个有参构造就可以了。
在这里插入图片描述

2.用法

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Java中,当程序出现异常时,可以使用throws关键字出该异常。异常被出之后,可以在调用此方法的地方使用try-catch语句来捕获并处理该异常。 例如: ``` public class Test { public void method1() throws Exception { throw new Exception("An exception occurred"); } public static void main(String[] args) { Test test = new Test(); try { test.method1(); } catch (Exception e) { System.out.println("An exception was caught: " + e.getMessage()); } } } ``` 上面的代码中,method1()方法出了一个Exception异常,在main()方法中使用try-catch语句捕获并处理该异常。 注意,如果一个方法抛出异常,它的调用者需要使用try-catch语句或者在它的方法声明中使用throws来捕获和处理该异常。 ### 回答2: Java异常处理中的throws关键字是一种将异常出的方法。当我们使用throws关键字时,我们可以将异常从一个方法传递到另一个方法或中,以便在这些方法或中对异常进行处理或捕获。 throws关键字的作用是通知调用者或调用链中的其他方法,在当前方法中可能会抛出异常,以便在调用者或调用链中的方法中进行处理。这种处理方式比较适用于多层调用的情况,因为这样可以让异常从底层方法向上层调用链传递,直到被处理或到最上层,如果到了最上层都没有被处理,那么程序将会终止。 当我们使用throws关键字时,需要在抛出异常的方法中明确声明可能会出的异常型。例如,我们可以使用throws关键字将IOException从一个方法中出如下: public void readFile() throws IOException { //read file code } 在这个方法中,我们明确声明了IOException异常可能会被出。这样,当这个方法被调用的时候,在方法体内部可能会出IOException的代码就可以被包装在try-catch块中或者再使用throws关键字将此异常给上层方法。 在对抛出异常进行处理时,我们可以使用try-catch块捕获异常,也可以再次通过throws将异常给上层方法。但是,在处理异常的过程中,我们需要注意以下几点: 1. 如果使用throws将异常给上层方法,在上层方法中应该继续进行异常处理,否则程序将会终止。 2. 在进行异常处理时,应该根据具体的业务场景来选择合适的处理方式,例如,可以通过记录日志来及时发现和解决异常问题。 3. 在捕获异常时,应该尽可能地减少代码的执行,以便在出现问题时及时发现并解决。 总之,throws关键字是Java异常处理中非常重要的语法结构之一,它能够使程序更加健壮和安全。但是,在实际使用时,我们需要根据具体的业务需求和代码逻辑来合理使用,并注意异常处理的规范和安全性。 ### 回答3: Java异常处理Java编程中一个非常重要的方面。异常处理通过try-catch块来捕获和处理异常。而throws语句则是用于在方法签名中指明该方法可能会出的异常。本文将重点探讨throws语句的使用。 当一个方法可能会抛出异常时,使用throws语句来声明异常是一个非常好的编程习惯。使用throws语句,可以将控制权交给方法的调用者来处理异常,而不是在方法内部处理异常。使用throws语句,可以使代码更加清晰,也可以提高代码的重用性。 下面是一个简单的例子: ```java public void readFile(String path) throws FileNotFoundException { File file = new File(path); Scanner scanner = new Scanner(file); while(scanner.hasNextLine()) { System.out.println(scanner.nextLine()); } scanner.close(); } ``` 在这个例子中,readFile方法可能会出FileNotFoundException异常。因此,在方法签名中使用了throws语句来声明这个异常。当调用这个方法时,调用者可以选择捕获这个异常或者再将这个异常出给更高级的调用者。 调用readFile方法的代码可以像这样: ```java public static void main(String[] args) { String path = "input.txt"; try { readFile(path); //调用方法 } catch (FileNotFoundException e) { System.out.println("文件不存在!"); } } ``` 在这个例子中,调用readFile方法时,在try块中调用。如果readFile方法出FileNotFoundException异常,会被catch块捕获并输出错误信息。这样,程序就不会在运行过程中出未捕获的异常。 总之,在Java开发过程中,使用throws语句来声明异常是一个非常重要的语言特性。这样可以使代码更加清晰,也可以提高代码的重用性。同时,在调用带有throws语句的方法时,需要在调用代码处处理可能出的异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值