异常处理

◇◆丶佛笑我妖孽 提交于 2019-12-24 07:39:31

RuntimeException 运行时异常 逻辑异常
CheckedException 已检查异常


RuntimeException 运行时异常 逻辑异常

package cn.cn.异常;
/*
RuntimeException 运行时异常   逻辑异常
CheckedException  已检查异常
ArithmeticException  加判断
*/
public class TestException {
    public static void main(String[] args) {
        //ArithmeticException异常
        int a=0;
        int b=5;
        //System.out.print(b/a);

        //处理加判断
        if(a!=0){
            System.out.print(b/a);
        }

        //空指针异常NullPointerException
        String str=null;
        //str.length();

        //处理加判断
        if(str!=null){
            str.length();
        }

        //异常.ClassCastException
        Animal d=new Dog();
        Cat c=(Cat)d;

        //处理可以加判断

        //数组越界NumberFormatException  处理加判断 使用正则判断

    }
}
class Animal{
}
class Dog extends Animal{
}
class  Cat extends  Animal{
}

CheckedException 已检查异常 通过编译器处理
/*
try 语句用来存放的是可能是发生异常的语句
catch用来激发被捕获的异常
finall异常结构执行的部分
*/


    try{
        //程序代码快
    }catch(Exception e){
        //对 Exception 1的处理
    }catch(Exception e){
        //对 Exception 2处理
    }final {
        //程序快
    }


·finally语句块
完整的异常处理语句一定要包含finally语句,无论程序中有无异常 并且无论try-catch语句是否顺利执行完 都会执行finally


自定义异常

  1. 创建自定义异常类
  2. 在方法中通过throw关键字抛出异常
  3. 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句来捕获并处理,否则在方法的声明通过throws关键字指名要抛出的异常
  4. 在出现异常方法的调用者中捕获异常
public class MyException extends Exception{    //创建自定义异常
    public MyException(String  ErrorMessage){    //钩造方法
        super(ErrorMessage);                       //父类构造方法
    }
}

在方法中抛出异常 使用throws关键字抛出异常(常用)


Java常见的异常

异常类 说明
ClassCatExcetion 类型转换异常
ClassNotFoundExceotion 未找到相应类异常
ArithmeticExcetion 算数异常
ArrayIndexOutOfBoundsExcetion 数组下标越界异常
ArrayStoreExcetion 数组中包含不兼容值抛出的异常
SQLExcetion 操作数据库异常类
NullPointerExcetion 空指针异常
NoSuchFieldExcetion 字段未找到异常
NoSuchMethodExcetion 方法未找到抛出的异常
NummberFormatExcetion 字符串转化为数字抛出的异常
NegativeArraySizeExcetion 数组元素个数为负数抛出异常
StringIndexOutOfBoundsExcetion 字符串索引超出范围抛出的异常
IOExcetion 输入输出异常
IllegalAccessExcetion 不允许访问某类异常
InstantiationExcetion 当程序试图使用Class类中的newLNstance()方法创建一个类的实例,而指定的类对象无法被实列化时,抛出的异常
EOFExcetion 文件以结束异常
FileNotFoundExcetion 文件未找到异常

运行时异常

种类 说明
NullPointerExcetion 空指针异常
ArrayIndexOutOfBoundsExcetion 数组下标越界异常
ArithmeticExcetion 算数异常
ArrayStoreExcetion 数组中包含不兼容值抛出的异常
NegativeArraySizeExcetion 数组元素个数为负数抛出异常
SecurityExcetion 安全性异常
IllegalArgumentExcetion 非法参数异常
//package cn.笔记.异常;
//
//public class 常见异常 {
// 1、NullPointerException:
//              空指针异常,当操作一个 null 对象的方法或属性时会抛出这个异常。是一个很头疼的异常,因为它是运行时异常,不需要手动捕获,但运行时碰到这个异常会中断程序。
//
//2、OutOfMemoryError:
//              内存溢出异常,这不是程序能控制的,当需要分配的对象的内存超出了当前最大的堆内存,需要调整堆内存大小(-Xmx)以及优化程序。
//
//3、IOException:
//              IO,即:Input、Output,我们在读写磁盘文件、网络内容的时候经常会生的一种异常,这种异常是受检查异常,需要进行手工捕获。
//
//    比如读写文件是需要抛出异常:
//
//    public int read() throws IOException
//    public void write(int b) throws IOException
//4、FileNotFoundException:
//              找不到文件异常,如果文件不存在就会抛出这种异常。
//
//    如定义输入输出文件流,文件不存在会报错:
//
//    public FileInputStream(File file) throws FileNotFoundException
//    public FileOutputStream(File file) throws FileNotFoundException
//    FileNotFoundException 其实是 IOException 的子类,同样是受检查异常,需要进行手工捕获。
//
// 5、ClassNotFoundException:
//              类找不到异常,Java开发中经常遇到的一种异常,这是在加载类的时候抛出来的,即在类路径下不能加载指定的类。它是受检查异常,需要进行手工捕获。
//
//    复制代码
//    public static <T> Class<T> getExistingClass(ClassLoader classLoader, String className) {
//        try {
//            return (Class<T>) Class.forName(className, true, classLoader);
//        }
//        catch (ClassNotFoundException e) {
//            return null;
//        }
//    }
//    复制代码
//6、ClassCastException:
//              类转换异常,将一个不是该类的实例转换成这个类就会抛出这个异常。
//
//    如将一个数字强制转换成字符串就会报这个异常:
//
//    Object x = new Integer(0);
//System.out.println((String)x);
//    它是运行时异常,不需要手工捕获。
//
//7、NoSuchMethodException:
//    没有这个方法异常,一般发生在反射调用方法的时候:
//
//
//    public Method getMethod(String name, Class<?>... parameterTypes)
//            throws NoSuchMethodException, SecurityException {
//        checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);
//        Method method = getMethod0(name, parameterTypes, true);
//        if (method == null) {
//            throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes));
//        }
//        return method;
//    }
//   
//    它是受检查异常,需要手工捕获。
//
// 8、IndexOutOfBoundsException:
//    索引越界异常,当操作一个字符串或者数组的时候经常遇到的异常。
//
//
//
//
//
//  9、ArithmeticException:
//    算术异常,发生在数字的算术运算时的异常,如一个数字除以 0 就会报这个错。
//
//    此异常虽然是运行时异常,可以手工捕获抛出自定义的异常,如:
//
//
//    public static Timestamp from(Instant instant) {
//        try {
//            Timestamp stamp = new Timestamp(instant.getEpochSecond() * MILLIS_PER_SECOND);
//            stamp.nanos = instant.getNano();
//            return stamp;
//        } catch (ArithmeticException ex) {
//            throw new IllegalArgumentException(ex);
//        }
//    }
//   
//10、SQLException:
//    SQL异常,发生在操作数据库时的异常。
//
//    如下面的获取数据库连接时:
//    public Connection getConnection() throws SQLException {
//        if (getUser() == null) {
//            return DriverManager.getConnection(url);
//        } else {
//            return DriverManager.getConnection(url, getUser(), getPassword());
//        }
//    }
//
//   它是受检查异常,需要进行手工捕获。
//}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!