A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李伟松 中级黑马   /  2015-4-1 14:02  /  568 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

异常的概念

异常就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
抛出去
[java] view plaincopy
try  catch示例:  
[java] view plaincopy
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");  
    }  
}  

[java] view plaincopy
try catch  finally 示例:  
[java] view plaincopy
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

5 个回复

倒序浏览
很有用,赞一个
回复 使用道具 举报
:handshake赞一个
回复 使用道具 举报
学习了,谢谢分享,总结得很有特色!
回复 使用道具 举报
谢谢分享,
回复 使用道具 举报
感谢分享!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马