文档章节

java基础---->Exception

小强斋太
 小强斋太
发布于 2016/11/09 20:06
字数 1706
阅读 2
收藏 0
点赞 0
评论 0

一、程序错误与处理

1.1、程序错误、发现时刻及错误处理原则

(1).语法错

违反语法规范的错误称为语法错,在编译时发现。

(2).语义错

语义上存在错误,则称为语义错,如除数为零,待打开的文件不存在,网络连接中断等,该错误运行时才能被发现。

(3).逻辑错

系统无法发现逻辑错。

1.2、错误与异常

①错误(error)指程序运行时遇到的硬件或操作系统的错误。错误会导致程序无法运行,只能依靠外界干预,否则会一直处于非正常状态。如运行的类文件中没有main()方法,找不到.class文件

异常(exception)指在硬件和操作系统正常时,程序遇到的运行错。异常会导致程序的非正常终止,异常处理机制使程序能捕获异常,由异常处理代码调整程序运行方向,程序仍可继续运行

1.3、程序对错误与异常的三种处理方式

(1).程序不能处理错误:如内存溢出
(2).程序应避免而不捕获的异常,如除数为0、数组下标越界等。
(3).必须捕获的异常:由特殊环境造成的异常,如文件没找到,网络连接失败。

二、异常的捕获及处理

2.1、认识异常

异常的定义:异常是导致一个程序中断的指令流,一旦出现之后程序就将立即退出,

Exception本身又是Throwable子类,

public class Throwable implements Serializable 
{
    public Throwable()
    public Throwable(String message)
    public String getMessage() 	//获得异常信息
    public String toString() 		//获得异常对象的描述信息
    public void printStackTrace() 	//显示异常栈跟踪信息
}


此类有两个子类:此类有两个子类:

       ·Error:Error类对象由Java虚拟机生成并抛出给系统。如运行没有main()方法的类,所以一般不去处理。

       ·Exception:是在程序中发生的异常,一般都需要进行处理。

如果一个try语句之中同时有多个catch的话一定要记住的是,捕获范围小的异常要放在捕获范围大的异常之前,一般在开发中为了简单起见,大部分的异常都直接使用Exception接收即可。

2.2、处理异常

一个异常对象经历抛出、捕获及处理过程。创建一个异常类对象的过程称为抛出(throw)异常,获得异常对象的过程称为捕获(catch)异常,对异常执行相应操作的过程称为处理异常,异常对象由捕获它的语句进行处理。通常,这几个过程分别由不同的方法或虚拟机完成。

 在Java中使用如下的语法进行异常的处理:

try{

        可能出现异常的语句  ;

} catch(异常类型异常对象){

        处理异常;

} catch(异常类型异常对象){

        处理异常;

} ...

finally{

        异常处理的统一出口  ;

}

 在异常的处理中基本上都是采用如下的过程完成的:

 

 

1、每当一个异常产生之后,实际上都会自动生成一个异常类的实例化对象,如果此时编写了异常处理语句的话,则进行异常的处理,如果没有的话,则交给JVM进行处理。

2、使用了try捕获异常之后,将自动与catch中的异常类型相匹配,如果匹配成功,则表示可以使用此catch处理异常,如果都没有匹配成功的,则不能处理。

3、程序中不管是否出现了异常,如果存在了finally语句,都要执行此语句的代码。

2.3、throws关键字

 throws关键字主要是用在方法的声明上,表示一个方法不处理异常,而交给被调用处进行处理。

 throws关键字不光可以在普通的方法上使用,主方法上也可以使,如果在主方法上使用的话就表示一旦出现了异常之后,继续向上抛,表示由JVM进行处理了。

2.4、throw关键字

         throw关键字是在程序中人为的抛出一个异常对象。  

          throw new  Exception("抛着玩的!")

2.5、RuntimeException

        如果将一个字符串变为整型数据类型,则可以使用Integer类中的parseInt()方法完成。

       ·public static int parseInt(String s) throws NumberFormatException

        本方法中存在了throws关键字的声明,理论上讲,在调用时必须进行异常处理,但是从实际的使用中可以发现,即使不使用try…catch处理也没问题。

public class  ExpDemo10 {

         public static void main(String  args[]) {

                   int x =  Integer.parseInt("10") ;

         }

};

想解释这个问题,必须观察NumberFormatException异常的继承结构:

 可以发现NumberFormatException是RuntimeException的子类,那么实际上在程序中,Java为了异常的处理方便,定义出了一个特殊的异常类—— RuntimeException,一旦抛出的异常是此类或者是此类的子类的话,那么可以不用进行异常处理的操作,如果不做任何异常处理的话,则一旦出现了异常之后将交给被调用处进行处理。

RuntimeException和Exception的区别,Exception必须处理,而RuntimeException可以不用处理。

1.算术异常ArithmeticException:除数为0
2.空对象异常NullPointerException

int a[]= null;

a[0]= 1;          //对空数组中的元素进行操作,产生空对象异常

Stringstr =null;

System.out.println(str.length());        //调用空对象的方法,产生空对象异常

3.类型强制转换异常ClassCastException

Objectobj =new Object();

Stringstr =(String)obj;

4.负数组长度异常NegativeArraySizeException 

int a[]= newint[-1]; //产生负数组长度异常

5.数组下标越界异常ArrayIndexOutOfBoundsException

int a[]= newint[1];

a[1]= 1; //产生数组下标越界异常

6.数值格式异常NumberFormatException

int j =Integer.parseInt("abc");        //产生数值格式异常

2.6、异常处理的例子

之前的异常的处理语句:try…catch…finally、throw、throws实际上在开发中是要一起使用的,以下面的程序为例。

        编写一个除法的操作,要求在计算开始的时候输出“开始计算”的信息,在计算完成之后,输出“结束计算”的信息,而且只要是出现了异常一定要交给被调用处处理。

class MyMath {

         public int div(int i,int j) throws  Exception{

                   System.out.println("================ 计算开始 ================") ;

                   int temp = 0 ;

                   try{

                            temp = i / j ;

                   }catch(Exception e){

                            throw e ;     //向上抛

                   }finally{

                            System.out.println("================ 计算结束 ================") ;

                   }

                   return temp ;

         }

};

public class  ExpDemo11 {

         public static void main(String  args[]){

                   try{

                            System.out.println(new  MyMath().div(10,0)) ;

                   }catch(Exception e){

                            e.printStackTrace()  ;

                   }

         }

};

2.7、自定义异常类

public class IllegalAgeException extends Exception         //无效年龄异常类
{
    public IllegalAgeException(String s)
    public IllegalAgeException()
}
…………….
//捕获自定义异常类,而非Exception类
catch(IllegalAgeException e)   	
{
        e.printStackTrace(); 	//显示异常栈跟踪信息
}


 


 


 

 

本文转载自:http://www.cnblogs.com/xqzt/archive/2013/01/07/5637120.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

你所需要的java提升篇大总结

java基础篇深入解析大总结 java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规则 java基础(三) 加强型for循环与Iterator java基础(四) java运算顺序的深入解析 java基础(五) Str...

sihailoveyan ⋅ 04/25 ⋅ 0

Java学习---Java简单认识

前言 小编在学习Java方面的基础知识,发现里面有很多是结合之前的语言的特点发展过来的,不同的地方是,Java有它自己的发展和特点。下面小编先简单地做一下总结,结合看过的1-2章的J2SE视频,...

m18633778874 ⋅ 04/01 ⋅ 0

学编程,学java还是大数据、android?平均月薪23k以上告诉你方向

学编程,学java还是大数据、android?有不少同学在纠结中,最近有不少初学者来问到,学习大数据,学习spark,公司主要使用那些语言编写,每听到这一个问题,起码还是很不错的,证明你已经开始...

编程南风 ⋅ 05/30 ⋅ 0

编写你的第一个HelloWorld

写在前面的话 因为Java基础是以后学习框架的基石,因此开个文集首先写写Java基础,本来想直奔基础知识的介绍,但是为了保证知识的完整性,因此从Java安装和运行“hello world”开始(虽然百度...

nanaFighting ⋅ 06/15 ⋅ 0

关于编写Java程序让Jvm崩溃

  今天在书上看到一个作者提出一个问题"怎样通过编写Java代码让Jvm崩溃",我看了之后也不懂。带着问题查了一下,百度知道里面有这样一个答案:   1 package jvm;   2   3 public clas...

thinkyoung ⋅ 2014/11/01 ⋅ 0

学习大数据需要Java基础吗?

近几年,很多人都听到过一个名词“大数据”也有一部分人选择学习了解大数据,那么大数据到底是什么,学习大数据需要有Java基础吗? 推荐一个大数据学习交流群 119599574每天晚上20:10都有一节...

大数据大咖 ⋅ 06/10 ⋅ 0

Java程序员必读书单,家族又添新成员

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 有些革命出其不意地吸引了全世界的眼球。Twitter、Linux操作系统和...

异步社区 ⋅ 05/09 ⋅ 0

《成神之路-基础篇》JVM——JVM参数及调优(已完结)

Java内存模型,Java内存管理,Java堆和栈,垃圾回收 本文是[《成神之路系列文章》][1]的第一篇,主要是关于JVM的一些介绍。 持续更新中 JVM参数及调优 JVM实用参数系列 成为Java GC专家(5)...

⋅ 05/05 ⋅ 0

安卓开发必备知识体系:Java篇

大家好我是张拭心,自从各位朋友帮点广X开始,我发现我每天更有奔头了,走起路来也更有劲了,说啥也得更新的勤快一点。不过放心,我一定推送有价值的内容给大家,还请朋友们照旧动动手指点点...

d29h1jqy3akvx ⋅ 05/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

istio 文档

https://istio.io/docs/concepts/ https://istio.io/docs/concepts/traffic-management/handling-failures/ https://istio.io/docs/concepts/traffic-management/rules-configuration/......

xiaomin0322 ⋅ 14分钟前 ⋅ 0

编程语言的作用及与操作系统和硬件的关系

一、编程语言的作用及与操作系统和硬件的关系 作用:编程语言是计算机语言,是一种程序员与计算机之间沟通的介质,通过编程语言可以使得计算机能够根据人的指令一步一步去工作,完成某种特定...

slagga ⋅ 25分钟前 ⋅ 0

runtime实现按钮点击事件

也不能说是实现吧,,,就是有点类似于RAC里边的写法,不用给btn添加另外的点击事件,就那个add...select...这样子很不友好,来看下代码: [self.btn handleControlEvent:UIControlEventTou...

RainOrz ⋅ 25分钟前 ⋅ 0

Windows系统运维转linux系统运维的经历

开篇之前,首先介绍一下我的背景把:我是一个三线城市的甲方运维。最近,在《Linux就该这么学》书籍的影响下和朋友小A(Linux运维已经三年了,工资也比我的高很多)的影响下,决定转行。最近...

linux-tao ⋅ 26分钟前 ⋅ 0

zip压缩工具,tar打包工具

zip压缩工具 zip打包工具跟前面说到的gzip,bz2,xz 工具最大的不一样是zip可以压缩目录。如果没有安装,需要使用yum install -y zip 来安装。安装完之后就可以直接使用了,跟之前提到的压缩...

李超小牛子 ⋅ 34分钟前 ⋅ 0

使用npm发布自己的npm组件包

一、注册npm账号 官网:https://www.npmjs.com/signup 注册之后需要进行邮箱验证,否则后面进行组件包发布时候会提示403错误,让进行邮箱核准。 二、本地新建一个文件夹,cd进入后使用npm i...

灰白发 ⋅ 36分钟前 ⋅ 0

010. 深入JVM学习—垃圾收集策略概览

1. 新生代可用GC策略 1. 串行GC(Serial Copying) 算法:复制(Copying)清理算法; 操作步骤: 扫描年轻代中所有存活的对象; 使用Minor GC进行垃圾回收,同时将存活对象保存到“S0”或“S...

影狼 ⋅ 36分钟前 ⋅ 0

JVM性能调优实践——JVM篇

在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践——性...

Java小铺 ⋅ 37分钟前 ⋅ 0

误关了gitlab sign-in 功能的恢复记录

本想关sign-up的,误点了sign-in 退出后登录界面提示: No authentication methods configured 一脸懵逼.. 百度后众多方案说修改application_settings 的 signin_enabled字段; 实际上新版本字段...

铂金蛋蛋 ⋅ 38分钟前 ⋅ 0

登录后,后续请求接口没有带登录cookie可能原因

1.XMLHttpRequest.withCredentials没设置好,参考https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials...

LM_Mike ⋅ 38分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部