JavaSE学习总结(八)—— 异常处理(Exception)

一、理解异常及异常处理的概念

异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。

异常不是错误

程序中关键的位置有异常处理,提高程序的稳定性

二、掌握Java异常处理机制

 Java的异常处理是通过5个关键字来实现的

try:尝试,把有可能发生错误的代码放在其中,必须有

catch:捕获,当发生异常时执行

finally:最终,不管是否有异常都将执行

throw:抛出,引发异常

throws:抛出多个,声明方法将产生某些异常

三、掌握try 、catch 、 finally 处理异常

 3.1、try..catch

package com.zhangguo.chapter6.d1;

import java.util.Scanner;

public class Exception1 {

    public static void main(String[] args) {
        
        Scanner input=new Scanner(System.in);
        //int i=input.nextInt();
        int i=Integer.parseInt(input.next());
        System.out.println("您输入的是:"+i);
        System.out.println("程序结束了");
    }

}

异常处理:

package com.zhangguo.chapter6.d1;

import java.util.Scanner;

public class Exception1 {

    public static void main(String[] args) {

        try {
            Scanner input = new Scanner(System.in);
            int i = Integer.parseInt(input.next());
            System.out.println("您输入的是:" + i);
        } catch (Exception exp) {
            System.out.println("发生异常了:" + exp.getMessage());
        }
        System.out.println("程序结束了");
    }

}

结果:

3.2、try..catch..finally

finally在任何情况下都将执行,正常时会执行,不正常也会执行

package com.zhangguo.chapter6.d1;

import java.util.Scanner;

public class Exception1 {

    public static void main(String[] args) {

        try {
            Scanner input = new Scanner(System.in);
            int i = Integer.parseInt(input.next());
            System.out.println("您输入的是:" + i);
        } catch (Exception exp) {
            System.out.println("发生异常了:" + exp.getMessage());
        }finally {
            System.out.println("输入结束");
        }
        System.out.println("程序结束了");
    }

}

结果:

1 您输入的是:1 输入结束 程序结束了

如果用户输入是的xyz

四、掌握throw 抛出异常、throws 声明异常

 4.1、java中常用的异常

//算术异常
ArithmeticExecption

//空指针异常类
NullPointerException

//类型强制转换异常
ClassCastException

//数组负下标异常
NegativeArrayException

//数组下标越界异常
ArrayIndexOutOfBoundsException

//违背安全原则异常
SecturityException

//文件已结束异常
EOFException

//文件未找到异常
FileNotFoundException

//字符串转换为数字异常
NumberFormatException

//操作数据库异常
SQLException

//输入输出异常
IOException

//方法未找到异常
NoSuchMethodException

//抽象方法错误,当应用试图调用抽象方法时抛出
 java.lang.AbstractMethodError

//断言错误,用来指示一个断言失败的情况
java.lang.AssertionError

//类循环依赖错误,若检测到类之间循环依赖则抛出该异常
java.lang.ClassCircularityError

//类格式错误
java.lang.ClassFormatError

//错误基类,标识严重程序运行问题,不应被应用程序捕获的反常情况
java.lang.Error

//非法访问错误,违反域或方法的可见性声明
java.lang.IllegalAccessError

//不兼容的类变化错误,当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常
java.lang.IncompatibleClassChangeError

//实例化错误,构造一个抽象类或者接口时抛出该异常
java.lang.InstantiationError

//内部错误
java.lang.InternalError

//链接错误
java.lang.LinkageError

//未找到类定义错误,找不到该类的定义时抛出该错误
java.lang.NoClassDefFoundError

//域(成员变量,字段)不存在错误
java.lang.NoSuchFieldError

//方法不存在错误
java.lang.NoSuchMethodError

//内存不足错误
java.lang.OutOfMemoryError

//堆栈溢出错误,如递归调用的层次太深
java.lang.StackOverflowError

//线程已结束
java.lang.ThreadDeath

//未知错误
java.lang.UnknownError

//未满足的链接错误
java.lang.UnsatisfiedLinkError

//不支持的类版本错误
java.lang.UnsupportedClassVersionError

//验证错误
java.lang.VerifyError

//虚拟机错误
java.lang.VirtualMachineError

//算术条件异常,如整数除零
java.lang.ArithmeticException

//数组索引越界异常
java.lang.ArrayIndexOutOfBoundsException

//数组存储异常,存放非数组声明类型
java.lang.ArrayStoreException

//类型转换异常
java.lang.ClassCastException

//找不到类异常
java.lang.ClassNotFoundException

//克隆不支持异常,如没有实现Cloneable接口
java.lang.CloneNotSupportedException

//枚举常量不存在异常
java.lang.EnumConstantNotPresentException

//根异常
java.lang.Exception

//非法访问异常
java.lang.IllegalAccessException

//非法的监控状态异常
java.lang.IllegalMonitorStateException

//非法的状态异常
java.lang.IllegalStateException

//非法的线程状态异常
java.lang.IllegalThreadStateException

//索引越界异常
java.lang.IndexOutOfBoundsException

//实例化异常
java.lang.InstantiationException

//被中断异常
java.lang.InterruptedException

//数组大小为负值异常
java.lang.NegativeArraySizeException

//属性不存在异常,当访问某个类的不存在的属性时抛出该异常
java.lang.NoSuchFieldException

//方法不存在异常
java.lang.NoSuchMethodException

//空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常
java.lang.NullPointerException

//数字格式异常
java.lang.NumberFormatException

//运行时异常
java.lang.RuntimeException

//安全异常
java.lang.SecurityException

//字符串索引越界异常
java.lang.StringIndexOutOfBoundsException

//类型不存在异常
java.lang.TypeNotPresentException

//不支持的方法异常
java.lang.UnsupportedOperationException

//Jsp页面异常
javax.servlet.jsp.JspException

//JSP引擎解析异常
org.apache.jasper.JasperException

//Servlet异常
javax.servlet.ServletException

//对象已被删除异常
org.hibernate.ObjectDeletedException

常用的异常

4.2、throw..throws

package com.zhangguo.chapter6.d1;

public class Exception2 {

    public static void main(String[] args) {
        
        try {
            System.out.println(div(30,3));
        } catch (Exception e) {
            //输出异常的堆栈信息
            e.printStackTrace();
        }
        
        try {
            System.out.println(div(3,0));
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        
    }
    
    //throws 声明方法将可能抛出异常
    public static int div(int n1,int n2) throws Exception{
        if(n2==0){
            //抛出异常
            throw new Exception("除数不能为零");
        }
        return n1/n2;
    }

}

运行结果:

五、掌握自定义异常

public class ArithmeticException extends RuntimeException {
    private static final long serialVersionUID = 2256477558314496007L;

    /**
     * Constructs an {@code ArithmeticException} with no detail
     * message.
     */
    public ArithmeticException() {
        super();
    }

    /**
     * Constructs an {@code ArithmeticException} with the specified
     * detail message.
     *
     * @param   s   the detail message.
     */
    public ArithmeticException(String s) {
        super(s);
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java学习

java每日一练(2017/8/11)

(单选题) 1、关于下面的程序Test.java说法正确的是( )。 publicclass Test { staticString x="1"; sta...

2626
来自专栏WindCoder

Java基础小结(一)

1、default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

541
来自专栏一个会写诗的程序员的博客

第2章 Kotlin 语法基础第2章 Kotlin 语法基础

人与人之间通过语言来交流沟通,互相协作。人与计算机之间怎样“交流沟通”呢?答案是编程语言。一门语言有词、短语、句子、文章等,对应到编程语言中就是关键字、标识符、...

1002
来自专栏haifeiWu与他朋友们的专栏

System方法总结

最近在研究Android源码,突然看到有很多和System有关,什么System.arraycopy、System.nanoTime(),所以专门花时间看了一下...

602
来自专栏进击的君君的前端之路

字符串与JSON

1363
来自专栏开发之途

重拾Java(0)-基础知识点

1994
来自专栏Java架构师历程

==和equals的区别

当执行String s1 = “chance”;这条语句时,会在堆中的字符常量池里找”chance”这个字符串,若没有找到,则将”chance”这个字符串放入字...

1222
来自专栏郭耀华‘s Blog

Java String 类

字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 ---- 创建字符串 创建字符串最简...

34512
来自专栏java学习

Java基础总结大全(3)

8、Map集合和Collection集合的区别? 1, Map中一次存储是键值对。 Collection中一次存储是单个元素。 2, Map的存储使用...

32910
来自专栏java学习

Java基础总结大全(3)

8、Map集合和Collection集合的区别? 1, Map中一次存储是键值对。 Collection中一次存储是单个元素。 2, Map的存储使用...

3377

扫码关注云+社区