java知识点三:异常

异常

一.概念

异常时程序中的一些错误,但并不是所以的错误都是异常,并且错误有时候是可以避免的。

异常体:

Throwable:所以异常类的超类

Error:表示不希望被程序捕获,或者是程序无法处理的错误

Exception:表示用户程序可能捕捉的异常情况或者说可以处理的异常

其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常。

Java异常又可以分为不受检查异常(Unchecked Exception)和检查异常(Checked Exception)。

检查异常属于编译时异常,也就是编译时就会出现的异常,必须进行处理(try catch/throws)

而不受检查的异常属于运行时异常,在编译期间不可查,在程序控制范围之外。

更多异常:http://www.importnew.com/16725.html

二.异常处理机制

了解异常处理机制之前,先要了解异常情形(exception condition),它是指阻止当前方法或作用域继续执行的问题。所以,异常发生的时候,作用域后续的代码无法继续执行!抛出异常后,会有几件事随之发生。首先,是像创建普通的java对象一样将使用new在堆上创建一个异常对象;然后,当前的执行路径(已经无法继续下去了)被终止,并且从当前环境中弹出对异常对象的引用。此时,异常处理机制接管程序

异常处理机制主要分为两大类——捕获异常,抛出异常

1.捕获异常:

捕获语句:

try {
            //可能发生异常的代码
        } catch (Exception e1) {
            // 捕获异常后的处理代码
        } catch (Exception e2) {
            // 捕获异常后的处理代码
        } finally {
            // 总是会执行的代码(可选)
        }

注意点:1.try语句块中的是肯能和出现异常的语句;try中声明的变量生命走起仅在try语句                   块中有效,通常,将声明写在try之前以提高生命周期!

2.catch语句块是捕获异常后的异常处理:发生异常后catch语句依次依次检查                   (catch语句捕获的异常应该是逐级捕获,先捕获小的异常,后捕获大的异常)

3.finnally语句无论是否发生异常都会执行,如果之前代码有return语句,那么                     会在return语句之前执行,通常,可以用来做一些资源关闭的操作

try catch模型,一般用于非运行时的异常(checked Exception),运行时异常一般不需要手动进行处理。

2.抛出异常

在方法签名上声明抛出的异常(自动抛出一个异常对象):

对于异常情形,已经无法继续下去了,因为在当前环境下无法获得必要的信息来解决问题,你所能做的就是从当前环境中跳出,并把问题提交给上一级环境,这就是抛出异常时所发生的事情。

方法只是抛出异常,谁调用谁负责处理(要么继续外抛,要么try_catch进行捕获处理)

  

   //其中file()方法选择了将异常抛出,那么在发生异常的时候就会抛出一个异常的对象!调用它的main方法就必须处理:要么继续在方法声明上抛出,要么进行try_catch

  //如果方法中抛出了具有父子关系的异常,那么如果异常是统一处理的,可以只抛出大的异常,捕获大的异常,统一处理,想不同的异常区别处理,可以遵循catch块的原则,分别处理!

手动抛出一个异常:

public static void main(String[] args) {
        inputNumber(0);
    }

    // 抛出异常
    public static void inputNumber(int num){
        if (num == 1) {
            System.out.println("输入了:1");
        } else {
            // 手动抛出异常
            throw new RuntimeException("传入的不是1!(只能传入1!)");
        }
    }

抛出异常就是这两种方式:1.在方法声明出抛出一个异常的类型——throws

2.在代码处手动抛出一个异常对象——throw

throw出的异常一般是运行时异常(RuntimeException及其子类等)

三.自定义异常

例子:

public class MyException extends RuntimeException{
    static final long serialVersionUID = -7034868990745766939L;

    public MyException() {
    }

    public MyException(String message) {
        super(message);
    }
}
public class MyException extends RuntimeException{
    static final long serialVersionUID = -7034868990745766939L;

    public MyException() {
    }

    public MyException(String message) {
        super(message);
    }
}

参考地址:http://www.cnblogs.com/Qian123/p/5715402.html

原文地址:https://www.cnblogs.com/python-road/p/10465570.html

时间: 2024-08-29 18:25:36

java知识点三:异常的相关文章

程序有异常不知道咋办?来学习Java异常处理知识点和异常链机制

Java异常处理知识点和异常链机制异常处理是程序设计中一个非常重要的方面,毕竟人无完人,不可能永不犯错,程序中有异常是很正常的, Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,下面是我对Java异常知识和异常链的一个总结.一.Java异常的基础知识异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.有些异常需要做处理,有些则不需要捕获处理,在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免.不可预测的情况则在考虑异常发生时如何处理.J

java虚拟机规范阅读(三)异常

Java虚拟机里面的异常使用Throwable或其子类的实例来表示,抛异常的本质实际上是程序控制权的一种即时的.非局部(Nonlocal)的转换--从异常抛出的地方转换至处理异常的地方. 绝大多数的异常的产生都是由于当前线程执行的某个操作所导致的,这种可以称为是同步的异常.与之相对的,异步异常是指在程序的其他任意地方进行的动作而导致的异常.Java虚拟机中异常的出现总是由下面三种原因之一导致的: 1.虚拟机同步检测到程序发生了非正常的执行情况,这时异常将会紧接着在发生非正常执行情况的字节码指令之

JAVA中的异常疑点解析

1 final, finally, finalize的区别. final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承. 内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码…… finally是异常处理语句结构的一部分,表示总是执行. finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等.JVM不保证此方法总被调用 2运行时异常与一般异常有何异同? 异常表

java Scanner和异常

Java Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 下面是创建 Scanner 对象的基本语法: Scanner s = new Scanner(System.in); 接下来我们演示一个最简单的的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据: 使用 ne

给Java新手的一些建议——Java知识点归纳(Java基础部分)

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

给Java新手的一些建议----Java知识点归纳(Java基础部分)

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

Java 里的异常(Exception)详解

作为一位初学者, 本屌也没有能力对异常谈得很深入.   只不过Java里关于Exception的东西实在是很多. 所以这篇文章很长就是了.. 一, 什么是java里的异常 由于java是c\c++ 发展而来的,  首先我们先看看c语言里的错误. 1.1 c语言里的错误 我们实现1个程序的过程包括,  代码编写, 编译代码成为程序,  执行程序. . 其中大部分常见的语法错误都会被编译代码这样部过滤掉.   但是即使通过了编译. 执行程序这一步可能还是会有错误. 原因很多, 例如常见的除数为0,

【转】JAVA知识点列表

网上盗链的JAVA知识点列表,学习安卓开发前对JAVA要有一个基本的了解,作为一个CheckList,有空检测下自己 1 开发环境Java SDK 下载和安装2 环境变量的配置(path和classpath)3 编程基础 标识符命名规范4 Java数据类型5 运算符6 分支语句(if,switch)7 循环语句(for,while)8 函数的定义方法9 面向对象基础 面向对象与面向过程语言之间的区别10 面向对象基本思想(封装)11 类的定义方法12 对象和类的关系13 对象的创建方法14 通过

java知识点梳理

网络搜索结果,出处不详,仅供参考 对于刚刚接触Java的人,java基础知识技术点繁多,那么gkstk小编为大家汇总最全java知识点如下,仅供大家参考学习! 1. JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可.不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的. JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透.我在面试有超过3年J