zoukankan      html  css  js  c++  java
  • 异常和IO

    1.异常的概述分类

      异常就是java程序在运行过程中出现的错误

    2.jvm默认是如果处理异常的

      main方法收到问题时,有两种是处理方式

      自己将问题处理,然后运行

      自己没有针对问题的处理方式,只有交给调用main的jvm来处理,并将异常名称,异常信息,异常出现的位置

        打印在了控制台上,同时将程序停止运行(也就是报错)。

    3.try...catch的方式处理异常

      try时用来检测异常

      catch是用来捕获异常

      finally 释放资源

    1     int i = 5;
    2     int b = 0;
    3     try {
    4         int c = i/5;
    5     } catch (Exception e) {
    6             System.out.println(e.getMessage());        // 查看异常信息
    7         }
     1       

        try...catch的方式处理多个异常

           JDK7以后处理多个异常的方式及注意事项

           int i = 5;
     2         int b = 0;
     3         try {
     4             int c = i / 5;
     5         } catch (ArithmeticException e) {//只可以捕获除零错误
     6             System.out.println("除数不能为零");
     7         } catch (ArrayIndexOutOfBoundsException e) {//只可以捕获下标越界
     8             System.out.println("索引越界了");
     9 
    10         } catch (Exception e) { // Exception e = new NullPointerException();
    11             // 如果把所有的错误都放入Exception里面,完全可以接收异常信息,但是不利于错误的查找
    12             System.out.println("出错了");
    13         }
    14         System.out.println("over");

      finally关键字

        被finally控制的语句体一定会执行

        特殊情况:执行到finally 之前 jvm退出了System.exit(0))

      finally的作用:用于释放资源,在IO流操作和数组库操作中会见到

      IO流是需要打开的,打开之后需要关闭,在finally里面关闭

      finally强大到用return结束方法也会执行

        

     1                 int i = 5;
     2         int b = 0;
     3         try {
     4             int c = i / 5;    
     5             //直接退出java虚拟机这是系统级别的退出,jvm不在运行
     6             System.exit(0);
     7         } catch (Exception e) {
     8             System.out.println("出错了");
     9         }finally {
    10             //try当中无论是渝澳catch,还是return语句他都会执行
    11             //除非退出java虚拟机
             //当出现java虚拟机退出时,finally中的语句就不会运行了,java程序直接终止运行
    12 System.out.println("aaaaaaaaaaaaaaaaaaaa"); 13 } 14 System.out.println("over");

    4.编译期异常和运行期异常的区别

      java中异常被分为两类,编译器异常和运行时异常,

        当上面出现了add或者surround的时候,就是程序出现了编译器的异常信息,解决方法时要么使用throws或者时使用trycatch进行包围,才能使程序正常运行    

       编译时异常:在编译某个程序的时候,有可能会有这样那样的事情发生,比如文件找不到,这样的异常就必须在编译的时候处理

         如果不处理编译通不过

       运行时异常:就是程序员所犯得错误,需要回来修改代码

          就像空指针的时候你不赋值为null.索引越界异常,你不越界

    5.Throwable的几个常见方法

      getMessage()  获取异常信息,返回字符串

      toString()    获取异常类名和异常信息,返回字符串

      printStackTrace()  获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void

      

     1     public static void main(String[] args) throws Exception {
     2         Student s = new Student();
     3         s.setAge(-13);    
     4     }
     5 
     6 
     7 
     8 
     9     public void setAge(int age)     throws Exception {
    10         if(age > 0 && age < 150) {
    11         this.age = age;
    12         }else {
    13             throw new RuntimeException("年龄输入有误");
    14         }
    15     }

    6.throw 的概述 以及和 throws 的区别

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

      2.一个方法在使用throws进行抛出异常时,如果其他方法调用了该方法,那么调用方法必须也要抛出对应的异常,

        或者是使用try...catch 语句进行捕获该异常

      throws:

        用在方法声明的后面,跟的是异常类名

        可以跟多个异常类名,用逗号隔开

        表示抛出异常,有该方法的调用者来处理

      throw

        用在方法体,跟的是异常对象名

     1   /**
     2      *
     3      * @param args
     4      * @throws AgeOutOfBoundsException  自定义异常
     5      */
     6     public static void main(String[] args) throws AgeOutOfBoundsException {
     7         Person p = new Person();
     8         // 捕获异常
     9        try{
    10            p.setAge(17);
    11            System.out.println(p.getAge());
    12        }catch (Exception e){
    13            System.out.println("年龄非法");
    14        }
    15     }
    16 }
    17 
    18 package com.jhedu.day20;
    19 public class Person {
    20     private String name;
    21     private int age;
    22     public Person() {
    23         super();
    24     }
    25     public Person(String name, int age) {
    26         super();
    27         this.name = name;
    28         this.age = age;
    29     }
    30     public String getName() {
    31         return name;
    32     }
    33     public void setName(String name) {
    34         this.name = name;
    35     }
    36     public int getAge() {
    37         return age;
    38     }
    39     public void setAge(int age) throws AgeOutOfBoundsException {
    40         if(age >0 && age <= 150) {
    41             this.age = age;
    42         }else {
    43             throw new AgeOutOfBoundsException("年龄非法");
    44         }
    45     }
    46 }
    47 
    48 package com.jhedu.day20;
    49 public class AgeOutOfBoundsException extends Exception {
    50     // 空参数的构造方法
    51     public AgeOutOfBoundsException() {
    52         super();   // 调用父类Exception的构造方法
    53     }
    54     // 有参数的构造方法
    55     public AgeOutOfBoundsException(String message) {
    56         super(message);  // 调用父类Exception的有参数构造方法
    57     }

        只能抛出一个异常对象名

        表示抛出异常,有方法体内的语句处理

     

    7.为什么需要自定义异常

      异常有很多子类就是为了让你更好的知道抛出的是啥异常,为了有利于你排错,抱不同异常代表不同的错误,看了名字就知道犯了什么错误,就是为了有个名字而已,所作的事情父类都去做了。

    8.异常的注意事项以及如何使用异常处理

      1.子类重写父类方法时,子类的方法必须抛出相同的异常或父类异类的子类。

      2.如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或是他的子类,子类不能抛出父类没有的异常

      3.如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

      

      如何使用异常处理:如果该功能内部可以将问题处理,用try,如果处理不了,交给调用者处理。。这是throws

      区别:后续程序需要继续就运行try

         后续程序不需要运行就throws

        如果jdk没有提供相对相应的异常,需要自定义异常

  • 相关阅读:
    【二分】
    【POJ】2456Aggressive cows
    【POJ】1064Cable master
    【动态规划】完全背包
    【DP】01背包
    【全排序】next_permutation
    【网络流】概念+EK算法+Dinic算法+Ford-Fulkerson算法
    【二分图】二分图的多重匹配
    web.xml配置SpringMVC时导致访问的页面资源不存在,跳转页面时出现404
    Struts2获得HttpServletRequest / HttpSession / ServletContext / HttpServletResponse对象
  • 原文地址:https://www.cnblogs.com/xsh726/p/11425065.html
Copyright © 2011-2022 走看看