zoukankan      html  css  js  c++  java
  • 小学生之Java中的异常

    1.异常
    try{
    //可能出现异常的代码
    }
    catch(Exception ex){

    }
    finally{
    //释放资源
    }
    2.异常的高级应用
    开闭原则:对修改关闭,对新增开放
    3.什么是异常?
    解析:异常是代码在运行时发生的错误
    int result=5/0;
    *********************************************
    异常: 01.5个关键字 try catch finally throw throws
    02.try catch三种应用场景
    try 没有异常 执行catch之后的代码
    try中有异常 先跳入catch执行,然后执行后续代码
    try中有异常 ,catch捕获,异常类型不匹配, 结果程序中断

    03.try catch finally 三种组合不合法形式
    有一种情况下,finally不会执行,catch中有System.exit(0):含义
    java虚拟机退出

    04.面试题
    catch中有return的情况
    try{
    return "0";
    }
    catch(){
    return "1";
    }
    finally{
    System.out.println("执行");
    }
    结论:虽然代码中有return,但是finally块依然会被执行
    05.Throwable:分成两种异常:一种是运行时异常 ,一种是检查异常

    06.throw一般用于程序员手动抛出自己的异常信息
    throw new Exception("错误提示");

    07.throws :声明异常
    public void test() throws Exception{

    }

    08.异常的继承图
    4.如何使用log4j记录日志?
    解析:引入jar包
    创建properties文件
    编写log4j配置代码
    log4j记录日志
    5.能枚举出来的,可以想象到异常信息的情况,尽量 避开异常捕获,因为
    其对程序性能消耗很大。
    6.官方文档
    http://dlc-cdn.sun.com/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html/zh_CN/api/
    7.如果大家选择了java,就意味着大家选择了配置文件(4k)
    System.Configuration
    8.一般情况下获取类的对象
    方法一:最低级就是new()

    SqlDataReader dr=cmd.ExecuteReader();

    方法二:工厂对象

    方法三:配置文件

    结论:
    1、不管有木有出现异常,finally块中代码都会执行;
    2、当try和catch中有return时,finally仍然会执行;
    3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,
    而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),
    所以函数返回值是在finally执行前确定的;
    4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
    举例:
    情况1:try{} catch(){}finally{} return;
    显然程序按顺序执行。
    情况2:try{ return; }catch(){} finally{} ;
    程序执行try块中return之前(包括return语句中的表达式运算)代码;
    再执行finally块,最后执行try中return;
    finally块之后的语句return,因为程序在try中已经return所以不再执行。
    情况3:try{ } catch(){return;} finally{} return;
    程序先执行try,如果遇到异常执行catch块,
    有异常:则执行catch中return之前(包括return语句中的表达式运算)代码,再执行finally语句中全部代码,
    最后执行catch块中return. finally之后也就是4处的代码不再执行。
    无异常:执行完try再finally再return.
    情况4:try{ return; }catch(){} finally{return;}
    程序执行try块中return之前(包括return语句中的表达式运算)代码;
    再执行finally块,因为finally块中有return所以提前退出。
    情况5:try{} catch(){return;}finally{return;}
    程序执行catch块中return之前(包括return语句中的表达式运算)代码;
    再执行finally块,因为finally块中有return所以提前退出。


    情况6:try{ return;}catch(){return;} finally{return;}
    程序执行try块中return之前(包括return语句中的表达式运算)代码;
    有异常:执行catch块中return之前(包括return语句中的表达式运算)代码;
    则再执行finally块,因为finally块中有return所以提前退出。
    无异常:则再执行finally块,因为finally块中有return所以提前退出。

    最终结论:任何执行try 或者catch中的return语句之前,都会先执行finally语句,如果finally存在的话。
    如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,
    编译器把finally中的return实现为一个warning。

    下面是个测试程序

    public class FinallyTest 
    {
    public static void main(String[] args) {
    
    System.out.println(new FinallyTest().test());;
    }
    
    static int test()
    {
    int x = 1;
    try
    {
    x++;
    return x;
    }
    finally
    {
    ++x;
    }
    }
    }

    结果是2。
    分析:
    在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
    在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去,执行完finally之后,在从中取出返回结果,
    因此,即使finally中对变量x进行了改变,但是不会影响返回结果。
    它应该使用栈保存返回值。

  • 相关阅读:
    Fidder4 顶部提示 “The system proxy was changed,click to reenable fiddler capture”。
    redis 哨兵 sentinel master slave 连接建立过程
    虚拟点赞浏览功能的大数据量测试
    python基础练习题(题目 字母识词)
    python基础练习题(题目 回文数)
    python基础练习题(题目 递归求等差数列)
    python基础练习题(题目 递归输出)
    python基础练习题(题目 递归求阶乘)
    python基础练习题(题目 阶乘求和)
    python基础练习题(题目 斐波那契数列II)
  • 原文地址:https://www.cnblogs.com/1600kun/p/4905833.html
Copyright © 2011-2022 走看看