java异常总结

异常

1整体框架

   Throwable类是 Java 语言中所有错误或异常的超类,下面有Error和Exception两个子类
   1) Error为严重问题,一般,比如说内存溢出(应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存)。
  2) 问题:ExceptionException 类及其子类是Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件,另外还有以下两种情况的处理:
  a、编译期问题:不是RuntimeException的异常 必须进行处理的,如果不处理,编译就不能通过。
  b、运行期问题:RuntimeException 可以不处理但是会抛出运行异常
这里写图片描述
   

2 throws和throw的区别   

  所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行。常用的有throws和throw这两种情况
 

   2.1throws的使用方法

  • 用在方法声明后面,跟的是异常类名
  • 可以跟多个异常类名,用逗号隔开
  • 表示抛出异常,由该方法的调用者来处理
  • throws表示出现异常的一种可能性,并不一定会发生这些异常
  • 编译期异常抛出,将来调用者必须处理。而在运行期异常抛出,将来调用可以不用处理。但是为了良好的用户体验还是必须要处理的,否则程序在出现异常时无法运行。

    2.2throw的使用方法

  • 用在方法体内,跟的是异常对象名
  • 只能抛出一个异常对象名
  • 表示抛出异常,由方法体内的语句处理
    -throw则是抛出了异常,执行throw则一定抛出了某种异常
                        

3try…catch…finally的使用说明

3.1 finally的用法

  finally:被finally控制的语句体一定会执行(除非在执行到finally之前jvm退出了,如System.exit(0)在finally之前执行)
  格式为 try…catch…finally..一般用于释放资源,在IO流操作和数据库操作中会见到。
  try…catch…finally的格式变形一般为一下几种情况   

  • try…catch…finally
    • try…catch
    • try…catch…catch…
    • try…catch…catch…finally
    • try…catch…catch…finally
    • try…finally 
3.2 try…catch的说明       
  • try 中可能出现问题的代码,且里面的代码越少越好
  • 能明确的尽量明确,不要用大的来处理
  • 在catch 中平级关系的异常可以与顺序无关,如果出现了子父关系,父必须在后面

4常用的异常方法

  • public String getMessage():异常的消息字符串
  • public String toString():返回异常的简单信息描述
    • 此对象的类的 name(全路径名) “: “(冒号和一个空格)
  • 调用此对象 getLocalizedMessage()方法的结果 (默认返回的是getMessage()的内容)
  • printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。把信息输出在控制台。

5final,finally和finalize的区别

  • final可以修饰类,成员变量,成员方法

    • 修饰方法,方法不能被重写
    • 修饰类,类不能被继承
    • 修饰变量,变量是常量
  • finally:是异常处理的一部分,用于释放资源。

    • 一般来说,代码肯定会执行,特殊情况:在执行到finally之前jvm退出了
    • 如果catch里面有return语句,finally里面的代码会在return之前执行
  • finalize:是Object类的一个方法,用于垃圾回收

6自己定义异常

  • 子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。
  • 如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
  • 如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

    测试例程
    MyException

public class MyException extends Exception {
    public MyException() {
    }

    public MyException(String message) {
        super(message);
    }
}
public class LookAfter {
    public void check(Integer i) throws MyException
    {
        if (i>=0&&i<=100)
        {
            System.out.println("当前学生的成绩为"+i);
        }
        else
        {
            throw  new MyException("应该输入0--100之间的数字");
        }
    }
}
package lsx.ExceptionDemo;
import java.util.Scanner;
public class ExceptionDemo {
    public static void main(String[] args)
    {
        Scanner sc =new Scanner(System.in);
        System.out.println("请输入成绩:");
        int i =sc.nextInt();
        LookAfter la =new LookAfter();
        try{
            la.check(i);
        }
        catch (MyException me)
        {
            me.printStackTrace();
        }
        finally {
            System.out.println("加油");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值