zoukankan      html  css  js  c++  java
  • java之异常处理

         * 异常处理的两种方式:
         *         a: try...catch...finally
         *             try...catch
         *             try...catch...finally
         *             try...finally
         *         b:throws
         * try...catch处理异常的基本格式
         *         try...catch...finally
         *
         * try:用来检测异常
         * catch:用来捕获异常
         * finally:释放资源
         *
         * 如果try后面跟多个catch,那么小的(子类异常)放到前面,大的放后面
         *
         * Throwable中的几个常见方法
         *         a: getMessage()
         *             获取异常信息,返回字符串
         *         b: toString()
         *             获取异常类名和异常信息,返回字符串
         *         c: printStackTrace()
         *             获取异常类名和异常信息,以及异常出现在程序中的位置,返回void
         *
         * throw: 在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转是,就用throw把异常对象抛出
         *
         * throw和throws的区别:
         *         a:throws
         *             用在方法声明后面,跟的是异常类名
         *             可以跟多个异常类名,用都好隔开
         *             表示抛出异常,由该方法的调用者来处理
         *         b:throw
         *             用在方法体内,跟的是异常对象名
         *             只能抛出一个异常对象名
         *             表示抛出异常,由该方法体内的语句处理
         *
         * finally:
         *         被finally控制的语句一定会被执行(在执行到finally之前JVM退出了,finally就不会再执行,如:System.exit(0))
         *         finally的作用:用于释放资源,在IO流操作和数据库操作汇总会见到
         *         当遇到return语句是,会先看下return后面是否有finally语句,如果有会将finally执行之后再结束程序
         *
         * final、finally和finalize的区别:
         *         final:可以修饰类,不能被继承
         *            可以修饰方法,不能被重写
         *            可以修饰变量,变量值不能被修改
         *      finally:是try语句中的有一个语句体,不能单独使用,用来释放资源
         *      
         *      finalize:是一个方法,当垃圾回收期确定不存在对该对象的更多引用时,有对象的垃圾回收期调用此方法
         *      
         *如果catch中有return语句,那么finally会执行吗?如果执行是在return之前还是之后?
         *        是在return之后才执行finally语句,此时的return执行只是建立一个返回路径,不会真正返回;
         *      千万不要在finally里面写return语句,因为finally语句只是用来释放资源的;
         *      
         *异常的注意事项:
         *    a: 子类重写父类方法是,子类的方法的方法必须抛出相同的异常或父类异常的子类;
         *    b: 如果父类抛出了多个异常,子类重写父类是,只能抛出相同的异常或是他的子集,子类不能抛出父类没有的异常;
         *    c: 如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类内部有异常发生,那么子类只能try,不能throws;
         *
         *如何使用异常:
         *  原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这样用throws;
         *  区别:
         *      后续程序需要继续运行就用try;
         *      后续程序不需要运行就用throws;
         *      
         *   如果JDK没有提供相应的异常,需要自定义异常进行处理;
         *   
         *try...catch的快捷键:选中需要处理的代码  用  alt + shift + z

    1.  Throwable中的几个常见方法如下:

     1 public static void main(String[] args) {
     2         try {
     3             System.out.println(1/0);
     4         } catch (Exception e) {
     5             // TODO: handle exception
     6             System.out.println(e.getMessage());
     7             System.out.println(e.toString());    //调用toString方法时和直接打印对象e效果一样
     8             e.printStackTrace();                 //JVM默认就用这种方式处理异常
     9         }
    10     }

    2.  异常练习之键盘输入整数,对整数进行转换为二进制处理

     1 public class Demo2_Test {
     2 
     3     /*
     4      * 从键盘录入一个整数,将这个整数转换成二进制显示
     5      * 对处理过程进行异常处理:可能录入的是一个过大的整数、小数或者是个字符串
     6      * 
     7      * 分析:
     8      *     对录入的字符串进行转换为BigInteger,如果转换出错说明不是整数过大
     9      *     对录入的字符串今次那个转换为BigDecimal,如果转换出错说明不是小数
    10      *     剩下的情况就是非法字符的情况了
    11      */
    12     public static void main(String[] args) {
    13 
    14         Scanner sc = new Scanner(System.in);
    15         System.out.println("请输入一个整数:");
    16         while (true) {
    17             String line = sc.nextLine();
    18             try {
    19                 Integer i = Integer.parseInt(line);
    20                 System.out.println(i.toBinaryString(i));
    21                 break;
    22             } catch (Exception e) {
    23                 try {
    24                     new BigInteger(line);
    25                     System.out.println("输入的整数过大,请重新输入一个整数:");
    26                 } catch (Exception e2) {
    27                     try {
    28                         new BigDecimal(line);
    29                         System.out.println("输入的整数是小数,请重新输入一个整数:");
    30                     } catch (Exception e3) {
    31                         System.out.println("输入的整数是非法字符,请重新输入一个整数:");
    32                     }
    33                 }
    34             }
    35         }
    36     }
    37 
    38 }
  • 相关阅读:
    Nginx性能测试
    Centos 7.0设置/etc/rc.local无效问题解决
    Centos 7.0系统服务管理
    Centos 7.0设置静态IP
    importError:cannot import name imsave/imread等模块
    一位父亲写给儿子的信:今天你努力一点,比将来低头求人强100倍
    清华大学计算机学科推荐学术会议和期刊列表---人工智能与模式识别
    在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: ‘文件路径’
    论文阅读笔记---HetConv
    typeerror: __init__() missing 2 required positional arguments: 'inputs' and 'outputs'
  • 原文地址:https://www.cnblogs.com/jiangjunwei/p/9279456.html
Copyright © 2011-2022 走看看