Java异常Exception详细讲解

目录
  • 1、异常中最大的父类Throwable
  • 2、try-catch-finally三条语句注意的问题
  • 3、final-finally-finalize的各作用
  • 4、throws关键字
  • 5、throws和throw的区别

1、异常中最大的父类Throwable

Throwable可以分为两种:

Error

Exception:

  • 运行时异常(非受检异常)
  • 非运行时异常(受检异常)

Error错误:Error是程序无法处理的错误,它是由jvm产生抛出的,比如OutOfMemoryError,ThreadDeath等,这些异常发生时,jvm会选择终止程序执行

Exception:是程序本身可以处理的异常

  • 运行时异常:都是RuntimeException类及子类,如NullPointerException(空指针),IndexOutOfBoundException(数组越界)等,这些异常可以选择捕获处理,或者可以不处理
  • 非运行时异常:(受检异常)时除了RuntimeException以外的异常,类型上属于Exception类,从程序语法角度这些异常必须要进行处理,如果不处理,程序不饿能通过编译,如IOException,SQIException

2、try-catch-finally三条语句注意的问题

  • try,catch,finally均不能单独使用,三者可以组合使用,组合方式:try…catch, try…catch…finally, try…finally ,其中catch可以有一个或者多个,finally语句最多只能有一个
  • 三个语句块中变量的作用域为代码块,分别独立的不能互相访问,如果要在三块中都可以访问,就把变量定义到这些块外边
  • 如果存在多个catch块,最多只会匹配一个异常类且执行该catch块代码,而不会在执行其他catch块,且匹配顺序是从上到下,最多只会匹配一个异常类,也就是说也可以一个异常类都不执行
  • catch捕获的异常类不能重复,且先捕获子类异常再捕获父类异常
  • 无论try中语句有没有问题,finally中的语句一定执行,finally为程序提供统一的出口,保证程序状态的统一管理,通常情况下finally中进行资源的关闭清除工作
package com.exception;
public class Test {
    public static void main(String[] args) {
        int[] a=new int[5];
        try {
            for (int i = 0; i <10 ; i++) {
                a[i]=i;
            }
            //空指针
        }catch (ArrayIndexOutOfBoundsException e){
            //弹出出错的地方
            System.out.println("1");
            e.printStackTrace();
            //访问异常,数组越界
        }catch (NullPointerException e){
            System.out.println("2");
            e.printStackTrace();
            //无论有错与否,finally最终执行
        } finally {
            System.out.println("都能执行");
        }
        System.out.println("---------------");
    }
}

3、final-finally-finalize的各作用

  • final:用于定义常量的关键字
  • finally:异常中总能执行的代码块
  • finalize() :垃圾回收,该方法是系统调用,不用程序员手动调用

4、throws关键字

  • 定义一个方法的时候可以使用throws关键字声明,表示该方法时不处理该异常,而是交给方法调用者处理该异常
  • 在定义方法时,throws关键字可以程序员自主选择使用,如果使用了,那么说明该方法时不处理该异常的
  • 如果主方(main)也使用throws关键字,那么就意味着主方法也不处理异常,最后留给jvm处理,jvm处理异常就是终止程序
  • throws抛出一个子类异常,调用该方法的调用者可以不必须处理该异常

注意:

throw关键字:是可以自定义异常,也就是抛异常,抛出的时候是一个异常类的对象

5、throws和throw的区别

throws:

  • 用在方法声明之后,跟着的是异常类名
  • 可以跟多个异常类,用逗号隔开
  • 表示抛出异常,有该方法的调用者处理
  • throws表示出现异常的一种可能性,并不一定会发生异常

throw:

  • 用在方法体内,跟着的是异常对象
  • 只能抛出一个异常对象
  • 表示抛出异常,有方法体内语句处理
  • throw抛异常是一定会发生,并不是一种可能

代码表示:

package com.test;
public class Throw {
    //throws Exception 代表该方法出现异常时不做处理
    public void deposit(int num1,int num2) throws Exception
    {
        // RuntimeException()是运行时异常最大的父类
        int sum;
        if(num2==0){
            throw new RuntimeException("可以自定义一个异常抛出:除数不能为0");
        }else{
           sum=num1/num2;
        }
    }
}

到此这篇关于Java异常Exception详细讲解的文章就介绍到这了,更多相关Java异常 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Java的Exception异常机制

    一.前言 在Java中,我们在执行代码的过程中难免会遇到错误与Exception异常,可是我们一直都是锤头Coding而忽略了学习Exception这个东西!我们只是知道在发生Exception的地方让代码自动生成throw exception或者是使用try-catch括起来处理,那你了解Java的Exception吗?今天就让我们把一起来看看Java的Exception吧! 在Java中,我们的代码再出现错误的时候无非是两种情况:一是Error,一是异常Exception.如果是Error,

  • Java 异常机制Exception和自定义异常

    目录 异常机制 异常体系结构 异常的捕获与抛出 自定义异常 异常机制 异常:就是不符合实际需求,在实际中可能不存在也可能不满足实际,所以出现的问题称之为异常. 异常的三种类型: 检查性异常:用户错误或问题引起的异常,是程序员无法预见的.例如打开一个不存在的文件,就会发生一个检查性异常. 运行时异常:是可能被程序员避免的异常,与检查性异常相反,运行时异常可以在编译是被忽略. 错误(ERROR):错误不是异常!错误是脱离了程序员的问题.一般不是程序员的问题. 异常体系结构 Java当中,万物皆对象,

  • Java异常 Exception类及其子类(实例讲解)

    C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象. Java异常处理通过5个关键字try.catch.finally.throw.throws进行管理.基本过程是用try包住要监视的语句,如果在try内出现异常,则异常会被抛出,catch中捕获抛出的异常并做处理,finally一定会完成未尽事宜. 练习: package com.swift; public class Exception1

  • Java Exception异常全方面分析

    目录 一.什么是异常? Java的异常体系 如何排查异常 二. 处理异常 try…catch基本语法 这个时候就要处理异常 如果我们用Exception来捕获异常呢? finally 在方法中出现异常 异常处理流程 手动抛出异常 三.自定义异常 源码剖析 自定义 注意 如下实例: public class Demo { public static void main(String[] args) { int num = 2/0; } } 这段代码中“除0”的逻辑在C语言中就只是报个警告,但是Ja

  • Java异常(Exception)处理以及常见异常总结

    目录 前言 异常简介 异常类型 总结 前言 很多事件并非总是按照人们自己设计意愿顺利发展的,经常出现这样那样的异常情况.例如: 你计划周末郊游,计划从家里出发→到达目的→游泳→烧烤→回家.但天有不测风云,当你准备烧烤时候突然天降大雨,只能终止郊游提前回家."天降大雨"是一种异常情况,你的计划应该考虑到这样的情况,并且应该有处理这种异常的预案. 计算机程序的编写也需要考虑处理这些异常情况.异常(exception)是在运行程序时产生的一种异常情况,已经成为了衡量一门语言是否成熟的标准之一

  • Java throw Exception实现异常转换

    简介 之前的文章我们讲到,在stream中处理异常,需要将checked exception转换为unchecked exception来处理. 我们是这样做的: static <T> Consumer<T> consumerWrapper( ThrowingConsumer<T, Exception> throwingConsumer) { return i -> { try { throwingConsumer.accept(i); } catch (Exce

  • Java异常Exception详细讲解

    目录 1.异常中最大的父类Throwable 2.try-catch-finally三条语句注意的问题 3.final-finally-finalize的各作用 4.throws关键字 5.throws和throw的区别 1.异常中最大的父类Throwable Throwable可以分为两种: Error Exception: 运行时异常(非受检异常) 非运行时异常(受检异常) Error错误:Error是程序无法处理的错误,它是由jvm产生抛出的,比如OutOfMemoryError,Thre

  • java反射超详细讲解

    目录 Java反射超详解✌ 1.反射基础 1.1Class类 1.2类加载 2.反射的使用 2.1Class对象的获取 2.2Constructor类及其用法 2.4Method类及其用法 Java反射超详解✌ 1.反射基础 Java反射机制是在程序的运行过程中,对于任何一个类,都能够知道它的所有属性和方法:对于任意一个对象,都能够知道它的任意属性和方法,这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制. Java反射机制主要提供以下这几个功能: 在运行时判断任意一个对象所属

  • Java BeanDefination接口详细讲解

    目录 功能作用 为什么这样设计 假设没有BeanDefinition 有BeanDefinition BeanDefinition 属性介绍 示例 功能作用 BeanDefinition 是定义 Bean 的配置元信息接口,包含: Bean 的类名 设置父 bean 名称.是否为 primary. Bean 行为配置信息,作用域.自动绑定模式.生命周期回调.延迟加载.初始方法.销毁方法等 Bean 之间的依赖设置,dependencies 构造参数.属性设置 BeanDefinition 子类方

  • java异常(Exception)处理机制详解

    一. 异常的定义 在<Java编程思想>中这样定义 异常:阻止当前方法或作用域继续执行的问题.虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常.绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败.之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意. 记得当初学习java的时候,异常总是搞不太清楚,不知道这个异常是什么意思,为什么会有这个机制?但是随着知识的积累逐渐也对异常有一点感觉了.举一

  • java ClassLoader机制详细讲解

    要深入了解ClassLoader,首先就要知道ClassLoader是用来干什么的,顾名思义,它就是用来加载Class文件到JVM,以供程序使用的.我们知道,java程序可以动态加载类定义,而这个动态加载的机制就是通过ClassLoader来实现的,所以可想而知ClassLoader的重要性如何. 看到这里,可能有的朋友会想到一个问题,那就是既然ClassLoader是用来加载类到JVM中的,那么ClassLoader又是如何被加载呢?难道它不是java的类? 没有错,在这里确实有一个Class

  • Java 垃圾回收超详细讲解记忆集和卡表

    目录 那么如何才能解决跨代引用呢? 记忆集 卡表 在说记忆集和卡表之前,先给大家介绍一下跨代引用的问题. 假如要现在进行一次只局限于新生代区域内的收集(Minor GC),但新生代的实例对象1在老年代中被引用,为了找出该区域(新生代)中所有的存活对象,不得不在固定的GC Roots之外,再额外遍历整个老年代中所有对象来确保可达性分析结果的正确性,反过来也是一样.遍历整个老年代所有对象的方案虽然理论上可行,但无疑会为内存回收带来很大的性能负担. 事实上并不只是新生代.老年代之间才有跨代引用的问题,

  • Java 垃圾回收超详细讲解记忆集和卡表

    目录 跨代引用 解决跨代引用 记忆集 卡表 跨代引用 在说记忆集和卡表之前,先给大家介绍一下跨代引用的问题. 假如要现在进行一次只局限于新生代区域内的收集(Minor GC),但新生代的实例对象1在老年代中被引用,为了找出该区域(新生代)中所有的存活对象,不得不在固定的GC Roots之外,再额外遍历整个老年代中所有对象来确保可达性分析结果的正确性,反过来也是一样.遍历整个老年代所有对象的方案虽然理论上可行,但无疑会为内存回收带来很大的性能负担. 事实上并不只是新生代.老年代之间才有跨代引用的问

  • Java详细讲解异常Exception的处理

    目录 1.异常介绍 2.常见的运行时异常 1.空指针异常 2.数学运算异常 3.数组下标越界异常 4.类型转换异常 5.数字格式不正确异常 1.异常介绍 基本概念 程序执行中发生的不正常情况称为异常.(语法错误和逻辑错误不是异常). package com.demo; /** * @version 1.0 * @auther Demo龙 */ public class exception01 { public static void main(String[] args) { int num1

  • 超详细讲解Java异常

    目录 一.Java异常架构与异常关键字 Java异常简介 Java异常架构 1.Throwable 2.Error(错误) 3.Exception(异常) 4.受检异常与非受检异常 Java异常关键字 二.Java异常处理 声明异常 抛出异常 捕获异常 如何选择异常类型 常见异常处理方式 1.直接抛出异常 2.封装异常再抛出 3.捕获异常 4.自定义异常 5.try-catch-finally 6.try-with-resource 三.Java异常常见面试题 1.Error 和 Excepti

随机推荐