异常总结

 

异常的概念

异常就Java程序在编译和运行时出现的错误

异常的分类

 

顶层为Throwable 下分为分三种

        Error

         通常出现重大问题如:服务器宕机数据库崩溃等。不编写针对代码对其处理。

Exception

        除了 RuntimeException 和其所有子类,其他所有的异常类都是在编译的时候必须要处理的,要么try,要么抛

RuntimeException

        RuntimeException 和其所有的子类,都不会在编译的时候报异常,而是在运行时报异常,这时候我们就需要回头看看我们的代码是否有问题,比如角标越界,空指针等

jvm是如何处理异常的

      jvm发现运算是已经违反了数学运算规则,java将这种常见的问题进行描述,并封装成了对象叫做ArithmeticException当除0运算发生后,jvm将该问题打包成了一个异常对象.并将对          象抛给调用者main函数,new ArithmeticException("/by zero");

      main函数收到这个问题时,有两种处理方式:1,自己将该问题处理,然后继续运行

                                                                              2,自己没有针对的处理方式,只有交给调用main的jvm来处理jvm有一个默认的异常处理机制,就将该异常进行处理.并将该异常的名称,异                                                                                     常的信息.异常出现的位置打印在了控制台上同时将程序停止运行 

 

处理异常处理方式:

一个是try    catch        finally

                try是用来检测异常的
catch是用来捕获异常的
 finally释放资源 

         1,try catch         不需要释放资源
 2,try catch finally 需要释放资源
 3,try finally 需要释放资源,但是不能对象异常捕获,需要交给调用处理

另一个是throws
抛出去 

 

 try  catch示例:
try {
        需要检测的代码;
    }
    catch(异常类  变量) {//异常类名 对象名= new 异常类名();
        异常处理代码;
    }
世界上最真情的相依,就是你在try,我在catch,无论你发神马脾气,我都默默接受,静静处理
public class Demo1_Exception {

    public static void main(String[] args) {
        Demo d = new Demo();                        //创建对象
        try {
            int num = d.div(10, 0);                 //调用div方法并将10和0给方法的参数
            System.out.println(num);                //打印调用方法的结果
        } catch (Exception e) {                     //当try检测出异常的时候,就跳到catch语句中
                                                    //接收异常Exception e =  new ArithmeticException("/ by zero");
            System.out.println(e);                  //打印异常对象的toString方法
            System.out.println(e.toString());
            System.out.println("错了,除数为零了"); //提示
        }
        System.out.println("11111111111111111111"); //异常处理完代码可以继续执行
    }

}

class Demo {
    public int div(int a,int b) {                   //a = 10,b = 0
        return a / b;                               // new ArithmeticException("/ by zero");
    }
}

 

try catch  finally 示例:
public static void main(String[] args) {
		try {
			System.out.println(1/0);
		} catch (Exception e) {
			System.out.println("catch执行了吗");
			//System.exit(0);	//如果先退出虚拟机就不会执行finally了
			return;				//return在将死之前,会让finally完成未完成的遗愿
		} finally {
			System.out.println("finally执行了吗");
		}
	}

 

 

 

final,finalize,finally的区别 

       1,final可以修饰类,可以修饰方法,可以修饰变量

      2,finalize,在对象没有更多引用,垃圾回收的时候调用

      3,finally 关闭流,数据库等,释放资源

 throw的概述
     在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。

 

    throws和throw的区别
    a:throws
         用在方法声明后面,跟的是异常类名
         可以跟多个异常类名,用逗号隔开
        表示抛出异常,由该方法的调用者来处理

 

       throws如果抛出的是RuntimeException及其子类,调用该方法的时候不用处理,抛出RutimeException和不抛效果一样
  如果抛出的是除了RuntimeException及其子类.调用方法必须处理
    b:throw
        用在方法体内,跟的是异常对象名
        只能抛出一个异常对象名
        表示抛出异常,由方法体内的语句处理

 异常注意事项
     a:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)
     b:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
     c:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
 如何使用异常处理
    原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throws
     区别:
        后续程序需要继续运行就try
         后续程序不需要继续运行就throws

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值