Java中异常的基本应用(一)
在Java中,我们把异常当做一种对象来处理,正是异常机制的引入,使得我们的程序更加健壮。异常指示了一个不正常的条件,或者一个错误条件,简单地说就是一个中断了正常的指令流的事件。程序控制将无条件的抛至一个特定的代码段,在此将捕获异常并加以处理,由此将错误处理与程序的正常处理分离开来,错误就可以被单独处理了。
异常由Exception类及其子类的实例表示,大多数包都定义了自己的异常类型,它们往往是Exception的子类,我们也可以自己定义异常的类型。当错误条件出现时,应有一段代码用来创建异常对象。Exception对象要作为一个参数传递给负责处理的代码块,这就涉及到异常的抛出和捕获。
如图所示,可抛出的除了异常还有错误类。Error类通常指示一些重大的错误或者虚拟机错误,不应由程序捕获。至于异常则分为两类,分别是运行时异常和编译时异常,或者可以叫做unchecked异常和checked异常。我们通常会遇到的IO异常和SQL异常都属于checked异常,对于这种异常,编译器要求我们必须对其进行处理。而runtime exception则可以不作处理,由虚拟机来接管。
出现异常时,要么直接处理,要么向上抛出,等待上层调用方法进行处理。如果始终没有得到处理,那么如果是多线程就由Thread.run()抛出,如果是单线程就由main()抛出,之后相应的线程或整个程序退出。Runtime Exception和Error都可以不做处理,因此程序在遇到此类错误时,如果没有处理块程序就会终止退出。
异常的处理方式:
1、try-catch-finally结构处理异常
try{
//正常代码,包含可能出错的代码
//如果有return,先走finally再回来return
}catch(异常类型 Exception e){
//异常处理
}finally{
//finally块,无论程序是否出现异常都会运行
//异常的出口
}
2、暂不处理,向上抛出
throw用于手动抛出异常(系统无法识别的异常),throws进行声明,用于说明方法有可能发成的错误类型,调用该方法时进行try-catch处理。如果不声明,就需要在方法内进行try-catch处理。
public void setAge(int age) throws Exception{
if(age>=15&&age<=40){
this.age=age;
}else{
throw new Exception("年龄必须在15到40之间!");
}
该例在调用setAge方法时,进行try-catch处理,或者继续向上抛出。
Java中异常的基本应用(一)的更多相关文章
- 《java中异常和错误》
异常和错误的区别. 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发 ...
- 浅谈java中异常抛出后代码是否会继续执行
问题 今天遇到一个问题,在下面的代码中,当抛出运行时异常后,后面的代码还会执行吗,是否需要在异常后面加上return语句呢? public void add(int index, E element) ...
- java中异常的抛出:throw throws
java中异常的抛出:throw throws Java中的异常抛出 语法: public class ExceptionTest{ public void 方法名(参数列表) throws 异常列表 ...
- Java中异常关键字throw和throws使用方式的理解
Java中应用程序在非正常的情况下停止运行主要包含两种方式: Error 和 Exception ,像我们熟知的 OutOfMemoryError 和 IndexOutOfBoundsExceptio ...
- java中异常以及处理异常
一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在java中,阻止当前方法或作用域的情况,称之为异常. java中异常的体系是怎么样的呢? 1.Java中的所有不正常类都 ...
- [转载]Java中异常的捕获顺序(多个catch)
http://blog.sina.com.cn/s/blog_6b022bc60101cdbv.html [转载]Java中异常的捕获顺序(多个catch) (2012-11-05 09:47:28) ...
- Java基础知识强化24:Java中异常
1.什么是异常 ? Java程序运行中,常常会遇到非正常的现象,这种情况称为运行错误.根据性质可以分为错误和异常.Java程序中(无论谁写的代码),所有抛出(throw)的异常都必须从Th ...
- java中异常的面试
https://blog.csdn.net/qq_36523638/article/details/79363652 1) Java中的检查型异常和非检查型异常有什么区别? 这又是一个非常流行的Jav ...
- JAVA中异常状况总结
之前在<会当凌绝顶>这本书中学到过对于异常处理的知识,当时也是根据书上的代码,自己进行编写大概知道是怎么回事儿,王老师给我们上了一节课之后,发现异常处理可以发挥很大的作用. 通过在网络上 ...
随机推荐
- Spring的OpenEntityManagerInViewFilter
在Java Web项目中使用Hibernate经常会遇到LazyInitializationException .这是因为controller和model层(java代码)将通过JPA的一些启用了延迟 ...
- struts2 Convention插件零配置,使用注解开发
从struts21开始,struts2不再推荐使用codebehind作为零配置插件,而是改用Convention插件来支持零配置.与以前相比较,Convention插件更彻底. 使用Conventi ...
- Javascript面向对象编程(二):构造函数的继承 by 阮一峰
今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个"动物"对象的构造函数. function Animal(){ this.species = & ...
- 通过redis-rdb-tools分析redis内存使用量
背景:生产上一台redis服务器,物理内存32G,几个项目都在用,经常不足一月内存就会耗尽,然后开始使用swap,当swap也用尽的时候,系统就宕机.redis配置也优化过几次,但未见成效.因此决定看 ...
- DFS hdu 1016
http://acm.hdu.edu.cn/showproblem.php?pid=1016 #include <iostream> using namespace std; int a[ ...
- lightoj 1005 组合数学
题目链接:http://lightoj.com/volume_showproblem.php?problem=1005 #include <cstdio> #include <cst ...
- @property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的
出题者简介: 孙源(sunnyxx),目前就职于百度 整理者简介:陈奕龙(子循),目前就职于滴滴出行. 转载者:豆电雨(starain)微信:doudianyu @property 的本质是什么? @ ...
- greenplum和postgresql
想着要不要写,两个原因"懒"和"空".其实懒和空也是有联系的,不是因为懒的写,而是因为对PostgreSQL和Npgsql的知识了解匮乏,也就懒得写.好了,开头 ...
- Java父类子类的对象初始化过程
摘要 Java基本的对象初始化过程,子类的初始化,以及涉及到父类和子类的转化时可能引起混乱的情况. 1. 基本初始化过程: 对于一个简单类的初始化过程是: static 修饰的模块(static变量和 ...
- [Javascript] String method: endsWith() && startsWith()
With endsWith && startsWith, you can easily find out whether the string ends or starts with ...