文档章节

Java之异常处理【7】

kongjunli
 kongjunli
发布于 2016/08/13 13:28
字数 740
阅读 3
收藏 0
点赞 0
评论 0

异常:程序运行期(执行期)出现的错误【不是语法错误】,是java提供的一种用于处理程序错误的机制。如:除0溢出,数组下标溢出、读文件不存在。

Java程序执行过程中如出现异常事件,系统自动的生成异常类对象,封装了异常事件的信息并被提交给Java运行时系统,成为‘’抛异常‘’。

当Java运行时系统收到异常时,会寻找能处理这一异常的代码,并把当前异常交给其处理,称为“捕获异常”。

一、异常分类图

Throwable:父类  Error和Exception是两个子类。其中Error指系统异常,比如虚拟机异常,不需要处理。Exception又分为两种,其中Runtime Exception指经常出现的,比如除0溢出等,可以捕获也可以不捕获。其他的就要求必须要捕获,常见的在jdk中看到方法后面跟了throws就必须catch.

public class TestException{
public static void main(String args[]){
     int a[]={3,2,5};
//捕获异常 
     try{
	System.out.println(a[3]);}
     catch(ArrayIndexOutOfBoundsException e){//e是异常对象,当检测到异常的时候会系统自动初始化,交给Catch的代码处理
	System.out.println("系统正在维护。。。。");
	e.printStackTrace();}//用来跟踪异常事件发生时执行堆栈的内容
}}

 

二、五个关键字

  • try:可能发生异常的语句
  • catch:捕获,并处理异常(printStackTrace()用来跟踪异常事件发生时执行堆栈的内容)
  • throw:方法内部抛异常
  • throws:声明方法异常
  • final:代码中无论是否有异常都会执行,清除资源
public void someMethod()throws someException{
     if(somecondition)
     throw new someException(“错误原因”);
}
try{
someMethod(); //someMethod()方法明确抛异常,所以调用时必须要catch
}
catch(someMethod e)
{
}
try{
}
catch(someException1 e1){
}
try{
}
catch(someException2 e2){
}
finally{
}
执行过程:1.e1->finally
        2.e2->finally
        3.无异常->finally

三、自定义异常类

步骤:

  • 通过继承java.lang.Exception类声明自己的异常类
  • 在方法适当的位置生成自定义异常的实例,并用throw语句抛出
  • 在方法的声明部分用throws语句声明该方法可能抛出的异常
package Exception;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
class MyException extends Exception{
	private int id;
	private String message;
	public MyException(String message,int id){
		super(message);
		this.id=id;
	}
	public int getID(){
		return id;	}
}
public class TestException {
	public void regist(int i) throws MyException{
		if(i<0)
			throw new MyException("人数不合法。。",1);
		else
			System.out.println("num:"+i);
	}
	public void manger(){
		try{regist(-50);}//regist()方法抛异常了,因此必须捕获
		catch(MyException e){
			System.out.println("操作类型:"+e.getID());
			e.printStackTrace();
		}
		System.out.println("操作结束!");
	};
	public static void main(String args[]) 
	{  
		TestException test=new TestException();
		test.manger();
	}
		/*int a[]={3,2,5}; 
		try{
		System.out.println(a[3]);}
		catch(ArrayIndexOutOfBoundsException e){//e是异常对象,当检测到异常的时候会系统自动初始化
			System.out.println("系统正在维护。。。。");
			e.printStackTrace();{}*/
			
	}
结果:操作类型:1
     操作结束!
     Exception.MyException: 人数不合法。。
	at Exception.TestException.regist(TestException.java:19)
	at Exception.TestException.manger(TestException.java:24)
	at Exception.TestException.main(TestException.java:34)

 

© 著作权归作者所有

共有 人打赏支持
kongjunli
粉丝 0
博文 24
码字总数 7291
作品 0
西安
程序员
Java编程基础知识点和技术点归纳

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

Java小辰 ⋅ 05/23 ⋅ 0

Java 5 、6、 7中新特性

JDK5新特性(与1.4相比)【转】 1 循环 for (type variable : array){ body} for (type variable : arrayList){body} 而1.4必须是: for (int i = 0; i < array.length; i++){ type variabl......

thinkyoung ⋅ 2014/10/14 ⋅ 0

做几道基础的Java测试题,看看最近有进步吗?欢迎来学习

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

启示录是真的 ⋅ 05/24 ⋅ 0

java-解决默认jdk限制密钥长度

  报错      今天新搭建的storm集群,处理大数据日志分析,发现报错:java.security.InvalidKeyException:Illegalkeysize      原因   如果密钥大于128,会抛出java.security.I...

linux运维菜 ⋅ 05/28 ⋅ 0

关于编写Java程序让Jvm崩溃

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

thinkyoung ⋅ 2014/11/01 ⋅ 0

JNI开发流程与引用数据类型的处理

今天我们来看下Java JNI,先看下维基百科给的定义, JNI, Java Native Interface, Java本地接口,是一种编程框架,使得Java虚拟机中的Java程序可以调用本地应用或库,也可以被其他程序调用。...

juexingzhe ⋅ 05/04 ⋅ 0

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

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

大数据大咖 ⋅ 06/10 ⋅ 0

PMD 6.4.0 发布,支持 Java 10 局部变量类型推断

PMD 6.4.0 发布了,这是一个小的更新版本,带来了一些新特性和 bug 修复。 值得关注的大变动是: 支持 Java 10,Java 10 中引入的局部变量类型推断已经能够被 PMD 理解。 支持类型解析,现在...

雨田桑 ⋅ 05/30 ⋅ 0

2018年Java编程学习面试最全知识点总结

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

Java小辰 ⋅ 05/14 ⋅ 0

Lambda 表达式有何用处?如何使用?(针对Java8)

什么是Lambda? 我们知道,对于一个Java变量,我们可以赋给其一个“值”。 如果你想把“一块代码”赋给一个Java变量,应该怎么做呢? 比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的J...

亭子happy ⋅ 06/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android JNI 读写Bitmap的方法

Java层创建Bitmap,通过JNI将Bitmap传到C/C++进行处理 Java部分 public static native boolean greenBitmap(Bitmap bitmap); C/C++部分 JNIEXPORT jboolean JNICALL Java_com_test_Test_gree......

国仔饼 ⋅ 18分钟前 ⋅ 0

一次性让你懂async/await,解决回调地狱

什么是async? 欢迎留言讨论 async 函数是 Generator 函数的语法糖。使用 关键字 async 来表示,在函数内部使用 await 来表示异步。相较于 Generator,async 函数的改进在于下面四点: 内置执...

阿K1225 ⋅ 18分钟前 ⋅ 0

angular常用命令

.下载更新操作 1.利用npm下载angular的命令行工具AngularCLI: npm install -g @angular/cli 2.下载jquery: npm install --save jquery 3.更新npm: npm i -g npm 4.更新angular: ng update ......

消散了的诗意 ⋅ 21分钟前 ⋅ 0

window.print 页面打印

定义和用法 print() 方法用于打印当前窗口的内容。 语法 window.print(); window.print() 实际上,是浏览器打印功能菜单的一种程序调用。与点击打印功能菜单一样,不能精确分页,不能设置纸型...

初学者的优化 ⋅ 21分钟前 ⋅ 0

魔兽世界 7.0版本上 PVE装备全攻略

  T套 因为大家应该都会打穿副本的所以具体是哪个boss我就不说了。   T1: 所有套装都在【熔火之心】出   T2: 头原来是在【奥妮克希亚的巢穴】改到黑翼之巢的奈法利安了,腿是在【熔火之...

wangchen1999 ⋅ 22分钟前 ⋅ 0

java.math.BigDecimal使用小结

原文地址 java.math.BigDecimal使用小结 divide方法 使用BigDecimal.divide方法时一定要考虑: 除数是否为0 商是否是无限小数 正确的使用方式 判断除数是否为0,是0做另外的处理逻辑 调用除法...

666B ⋅ 25分钟前 ⋅ 0

关于qstring转char乱码问题。

if (OpenClipboard(NULL)) { HGLOBAL hgClip; EmptyClipboard(); QByteArray byay = FValue.toLocal8Bit(); //转latin编码 char *bochsrc_line = byay.data(); hgClip = GlobalAlloc(GMEM_DD......

backtrackx ⋅ 25分钟前 ⋅ 0

了解SSH加密和连接过程

介绍 SSH或安全shell是安全协议,也是安全管理远程服务器的最常用方式。通过使用多种加密技术,SSH提供了一种机制,用于在双方之间建立加密安全连接,对彼此进行身份验证,以及来回传递命令和...

吴伟祥 ⋅ 31分钟前 ⋅ 0

微信小程序

小程序的全局配置app.json 微信小程序的全局配置保存在app.json文件中。开发者通过使用app.json来配置页面文件(pages)的路径、窗口(window)表现、设定网络超时时间值(networkTimeout)以...

上官清偌 ⋅ 34分钟前 ⋅ 0

【转】百度坐标坐标系之间的转换(JS版代码)

/** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换 *///定义一些常量var x_PI = 3.1415926535897932...

HAVENT ⋅ 36分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部