zoukankan      html  css  js  c++  java
  • 异常(Exception)

    异常在Java中是用于问题的反馈和处理的机制

    Throwable是所有异常或错误的超类

    区分异常和错误:

    错误:一旦出现,不能处理

    异常:出现后可以处理,处理方式:捕获或者继续抛出

    捕获方式:(try{}catch(){})

    1、多个异常处理方式不同,用多个catch分别捕获分别处理

    2、所有异常处理方式都一样,捕获一个父类异常统一处理

    3、多个异常分成不同组,不同组之间可以用 | 隔开分组处理(JDK1.7开始)

    注意:try-catch同时出现,意味着try不一定能执行成功,try在不是必然成功的前提下,try中的return不一定执行

    try{
        return 1;
    }
    catch(Exception e){
        e.printStackTrace();
    }

    报错会提示:This method must return a result of type int,此时在catchreturn一个int型数据即可,或在catch方法结束后返回一个int型的值

    Java中的一些异常提示:

    编译时异常:编译的时候就出现,由于在编译的时候就已经出现,所以要求必须处理。 

    CloneNotSupportedException 不支持克隆异常

    ParseException 解析异常(日期或者字符串格式化时可能会抛出这个异常) 

    package cn.jay.exer;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    public class Exer14 {
        public static void main(String[] args) throws Exception  {
                    /*
            String str = "2018-7-18 13:12:11";
            SimpleDateFormat sdf = new SimpleDateFormat();
            Date date = sdf.parse(str);
            System.out.println(date);
            //java.text.ParseException: Unparseable date: "2018-7-18 13:12:11"
            */
    
            String str = "2018-7-18 13:12:11";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            Date date = sdf.parse(str);
            System.out.println(date);
        }
    }        

    运行时异常:运行的时候才出现,可以处理,也可以不处理。 --- RuntimeException(所有运行时异常父类)

    ArithmeticException 算数异常(整数/0)

    ArrayIndexOutofBoundsException数组下标越界异常

    NullPointerException 空指针异常

    PatternSyntaxException 正则格式异常

    NumberFormatException 数字格式化异常

    Integer in=new Integer("0x456");

    ClassCastException 类转换异常

    ArrayStoreException 数组存储异常

    InputMismatchException 输入不匹配异常(switch语句实现简单计算器时出现) 

    EmptyStackException 空栈异常

    ConcurrentModificationException 当前标记异常(标记不匹配)

    List<String> list = new LinkedList<>();
    
    
    //中间代码省略
    
    
    Iterator<String> it = list.iterator();
    
    
    //中间代码省略
    
    
    it.remove(); //不报错
    
    
    list.remove(); //报错
    View Code 

    NotSerializableException 不能序列化异常

    后续遇到其它异常会继续更新...

    Java中异常处理流程(读取文件时的路径异常处理)

    public class Test{
        public static void main(String[] args) throws PathNotExistException{
                    //若读入的文件路径必然正确,则异常不用捕获处理,直接抛出即可
            try{
                    //异常捕获处理后,主函数中不用抛出异常
                //读取文件
                String msg = readTxt("H:\test.txt");
            }catch(PathNotExistException){
                //进行异常处理
                            System.out.println(e.getMessage());
            }
        }
    public static String readTxt(String path) throws PathNotExistException{
            //文件路径可能不存在,此时应该抛出异常,方便其他使用该文档的人清楚其中可能出现的异常情况,如果方法中捕获的是父类异常,要在上面单独的捕获方法后再catch一个父类异常,且该父类异常必须在单独异常之后
                    if(path.startWith("H:\")){
                    throw new PathNotExistException("警告:路径以H开头!");
                }        
                return "文件读取成功!";
    }
    //自定义异常(PathNotExistException)
    class PathNotExistException extends Exception{
            private String message;
            public PathNotExistException(){}
            Public PathNotExistException(String message){
                    this.message =message;
            }
            public String getMessage(){
            return message;
            }
    }
    View Code

    自定义异常:定义一个类继承某个异常类,如果继承的是Exception或者是其它的异常,那么定义了一个编译时异常;如果继承的是RuntimeException或者是它的子类,那么定义的就是一个运行时异常。

    方法重载时,对异常的范围没有限定

    方法重写时,子类抛出的编译时异常不能超过父类编译时异常的范围

     

  • 相关阅读:
    java IO输入输出流实现文本复制
    java HashMap
    java TreeSet 实现存自定义不可重复数据
    java中的ArrayList 使得集合中的对象不重复
    java 多线程执行过程
    final关键字的使用
    java中==和equals的区别
    java面向对象理解
    java语言基础(变量和运算符)
    学习Java第一天,大致了解
  • 原文地址:https://www.cnblogs.com/lj-cn/p/9333018.html
Copyright © 2011-2022 走看看