Java之旅(一)---说说“异常”那些事
来源:互联网 发布:视频同步录制软件 编辑:程序博客网 时间:2024/06/04 17:43
Java异常:基础知识
(1)异常和错误
在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,给你一次修改的机会。Java中使用异常类来表示异常,不同的异常类代表了不同的异常。但是在Java中所有的异常都有一个基类,叫做Exception。
而与异常对应的错误Error则是指一个合理的应用程序不能截获的严重的问题。大多数都是反常的情况。错误是VM的一个故障(虽然它可以是任何系统级的服务),比如内存溢出。和异常一样,在Java中用错误类来表示错误,不同的错误类代表了不同的错误。但是在Java中所有的错误都有一个基类,叫做Error。
主要包括运行时异常和编译时异常。运行时异常即RuntimeException是指未检查的错误,是程序员处理的一大难点;而编译时异常则是已检查的错误。
上述介绍中有提到,Java中不同的异常类代表了不同的异常。关于运行时异常主要有以下几个子类:
1、 java.lang.ArrayIndexOutOfBoundsException
数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
2、java.lang.ArithmeticException
算术条件异常。譬如:整数除零等。
3、java.lang.NullPointerException
空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等
4、java.lang.ClassNotFoundException
找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。
RuntimeException与Error可以在任何代码中产生,它们不需要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出。而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常。
遇到Error,程序员一般是无能为力的;遇到RuntimeException,那么一定是程序存在逻辑错误,要对程序进行修改(相当于调试的一种方法),而了解上述主要的四种RuntimeException分类,使我们针对性更强的去调试和修改我们的逻辑错误;只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理已检查异常。
Java异常:处理方式
了解Java的异常之后,就需要知道该如何处理了。Java异常处理的主要流程如下:
处理方式有以下两种:
(1)捕捉
对于捕捉方式,Java有针对性的处理方式,也就是我们常说的try…catch:
try {//需要被检测的代码;}catch(异常类 变量名){//异常处理代码;}fianlly{//一定会执行的代码;主要让用户关闭资源。无论是否发生异常,资源都必须进行关闭。}
而在程序中,我们通常使用以下方式来显示异常信息:
catch (Exception e) { //e用于接收try检测到的异常对象。 System.out.println("message:"+e.getMessage()); //获取的是异常的信息。System.out.println("toString:"+e.toString()); //获取的是异常的名字+异常的信息。 e.printStackTrace(); //打印异常在堆栈中信息;异常名称+异常信息+异常的位置。}
(2)抛出
1.抛出异常的方法
在方法声明中,添加throws子句表示该方法将抛出异常。带有throws子句的方法的声明格式如下:
[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]
其中,throws是关键字,<异常类>是方法要抛出的异常类,可以声明多个异常类,用逗号隔开。
public void test(byte a) throws Exception { /抛出异常 try{ if(a>Byte.MAX_VALUE/i) //Integer类的常量,表示最大值
throw new Exception("overflow"); //溢出时抛出异常 } catch(Exception e){ System.out.println("exception:"+e.getMessage()); e.printStackTrace();
如何确定抛出何种异常呢?对于一个异常对象,真正有用的信息时异常的对象类型,而异常对象本身毫无意义。比如一个异常对象的类型是ClassCastException,那么这个类名就是唯一有用的信息。所以,在选择抛出什么异常时,最关键的就是选择异常的类名能够明确说明异常情况的类。
2.由调用方法处理异常
如果某个方法声明抛出异常,则调用它的方法必须捕获及处理异常,否则会出现异常错误,注意即可不再多说。
说明了两种方式之后,我们就需要想一想了,为什么要声明方法抛出异常呢?可以说,方法是否抛出异常与方法返回值的类型一样重要。假设方法抛出异常却没有声明该方法将抛出异常,那么程序员可以调用这个方法而且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决,就会出现意料之外的不友好页面了。
使用异常很方便,所以有些程序员一般不再愿意编写处理错误的代码,而仅仅是简简单单的抛出一个异常。这样做是不对的,对于完全已知的错误,应该编写处理这种错误的代码,增加程序的健壮性。另外,异常机制的效率很差,不宜过分使用。
以上对Java异常的基础知识和处理方式进行了大概的描述,还有不尽如意的地方,继续慢慢领悟!
- Java之旅(一)---说说“异常”那些事
- Java那些事:异常
- 说说规划那些事
- 说说加班那些事
- 说说JavaScript那些事
- 说说JavaScript那些事
- 说说makefile那些事
- 说说EMC解决方案中的那些产品和案例(一)
- 代理模式之说说那些重复的代码事(1)
- 说说JAVA I/O流的那些事
- java基础之异常处理(一)
- 说说Java中的枚举(一)
- 说说调剂的那些事
- 说说mysql的那些事
- 说说细胞统计那些事
- 说说那些光说不练的事
- 说说接口测试那些事
- 说说建站那些事
- 第9周项目6换分币问题
- "无法为具有固定名称“System.Data.SqlServerCe.4.0”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“System.Data.Entity.Sq
- Java实现多线程的两种方式
- 行为7
- Redis Cache 工具类项目
- Java之旅(一)---说说“异常”那些事
- CSS实现等高
- 中国山东哪家强?
- 稀疏学习
- java模拟缓存器
- Eclipse 修改maven 仓储Repository位置
- 慕客网-MySql性能优化视频
- 查看修改Linux时区和时间
- JS高级应用积累