java异常

java异常

异常

异常就是程序运行时发生的不正常情况,如打开一个不存在的文件,与错误不同(代码错误),异常一般分为两大类:

  • Error:由于java虚拟机的限制而产生的程序错误,一般无法解决。如:JVM系统内部错误、资源耗尽等严重情况。
  • Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理
    Error和Exception包含如下:

异常处理

  • Java采用抓抛模型catch-throw异常处理机制,将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序简洁,易于维护。
  • 异常对象的生成两种方式
    1.由虚拟机自动生成:程序运行过程中,虚拟机检测到程序发生了问题,如果在当前代码中没有找到相应的处理程序,就会在后台自动创建一个对应异常类的实例对象并抛出——自动抛出
    2.由开发人员手动创建:创建好的异常对象不抛出对程序没有任何影响,和创建一个普通对象一样
  • 捕获异常
    当一个方法抛出异常时,如果没有实现异常处理,会一直向上寻找异常解决方法,如果一个异常回到main()方法,并且main()也不处理,则程序运行终止。
  • 选择处理异常
    如果这些异常是运行时异常,则方法的调用者有3种选择:
    (1)不理会这些声明,编译可以通过;
    (2)使用try…catch处理异常;
    (3)使用throws继续延迟处理
    如果是非运行时异常,方法调用者有两种选择:
    (1)使用try…catch处理异常;
    (2)使用throws继续延迟处理,让编译先通过。

try——catch捕获异常

  • try-catch语句
    在try语句块中,放置可能出现异常的代码。在catch语句块中是对异常对象进行处理的代码。当try中的保护代码块发生异常时,如果catch块中声明了该异常,异常将会被传递到catch块中。
  • 每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。
  • 如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可以用其父类作为catch的参数,但是参数不能是与已知异常无关的异常类,否则将不会执行
  • try-catch-finally语句
    try-catch-finally语句就是在try-catch语句的基础上,加上finally代码块,finally代码块是无论是否发生异常都会被执行

throw和throws

当程序没有使用try-catch语句捕获异常时,就需要用到throw和throws关键字

  • throws关键字
     throws关键字(必须在定义方法的时候使用),用于声明该方法可能会抛出的异常类型,一般用于不知道该怎么处理异常时,放任其不管,当有异常抛出时会中断该方法,而异常被抛到这个方法的调用者那里。
     使用throws关键字明确指出了该方法可能抛出的异常。throws后面如果声明多个异常类型,之间可用“,”分隔
  • throw关键字
    当创建一个异常对象之后,可以使用throw关键字抛出异常对象。throw必须在方法体中使用。
    手动抛出异常但是有时候有些错误在jvm看来不是错误,所以我们需要自己手动引发异常,这就是throw的作用,例如:
public void setAge(int age) throws Exception {
	if(age<0){
	     Exception e = new ArithmeticException(“年龄不能为负”)throw e;
	}
	this.age = age;
}
  • 注意重写方法不能抛出比被重写方法范围更大的异常类型:
public class A {
public void methodA() throws IOException {
      ……
}  }
public class B1 extends A {
public void methodA() throws FileNotFoundException {
      ……
}  }
public class B2 extends A {
public void methodA() throws Exception {   //报错,抛出的异常类型比父类异常类型大
        ……
}  }

人工抛出异常

Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要人工创建并抛出。

  • 人工抛出异常,首先要生成异常类对象,然后通过throw语句实现抛出操作,注意,可抛出的异常必须是Throwable或其子类的实例。
  • 自定义异常类
    自定义异常类是包括人工抛出异常的自定义类:
    1.一般地,用户自定义异常类都是RuntimeException的子类。
    2.自定义异常类通常需要编写几个重载的构造器。
    3.自定义的异常类对象通过throw抛出。
    4.自定义异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型。
    5.用户自己的异常类必须继承现有的异常类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值