Java基础之Java异常处理机制

原创 2015年07月08日 17:50:48

Java异常处理

查看一下Java的API:
java.lang

Class Throwable

  • 从这里不难看出

    Exception:是处理编译级别错误; Error:是JVM处理级别错误

异常:是导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以在程序的设计中必须考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序的正常执行。

处理异常的几个关键字:
throw  

throws

try {
//异常出现点
}catch(Exception e){  //细粒度的异常放在前面,粗粒度异常放在后面
 //捕获遗产处理
}catch(Exception){
    
}finally{
 //不管是否有异常,都执行。
}

Demo1
public class ExceptionDemo06{
	public static void main(String args[]){
		System.out.println("********** 计算开始 ***********") ;
		int i = 0 ;		// 定义整型变量
		int j = 0 ;			// 定义整型变量
		try{
			String str1 = args[0] ;		// 接收第一个参数
			String str2 = args[1] ;		// 接收第二个参数
			i = Integer.parseInt(str1) ;	// 将第一个参数由字符串变为整型
			j = Integer.parseInt(str2) ;	// 将第二个参数由字符串变为整型
			int temp = i / j ;	// 此处产生了异常
			System.out.println("两个数字相除的结果:" + temp) ;
			System.out.println("----------------------------") ;
		}catch(ArithmeticException e){	// 捕获算术异常
			// System.out.println("算术异常:" + e) ;
			e.printStackTrace() ;
		}catch(NumberFormatException e){	// 捕获数字转换异常
			System.out.println("数字转换异常:" + e);
		}catch(ArrayIndexOutOfBoundsException e){	// 捕获数组越界异常
			System.out.println("数组越界异常:" + e) ;
		}catch(Exception e){
			System.out.println("其他异常:" + e) ;
		}
		System.out.println("********** 计算结束 ***********") ;
	}
};
        当所有的异常处理的方式是一样得时候就可以使用以上的形式,直接使用Exception进行捕获,当然,在一个
比较细致的开发中是不建议这样使用的,所有的异常最好分别捕获。
问题:
       既然,捕获Exception是最方便的,那么直接捕获Throwable可以不可以?
      首先,这样的做法是可以的,但是正常的开发人员是不会这样去做的,因为在程序的try中只会抛出Exception的子类部分内容,而Throwable中还有Error。
      所以,最高就是Exception.

throws 与throw

throws : 在定义异常时,他会把异常抛出给调用的一方处理,自己不做处理;
class Math{
<span style="white-space:pre">	</span>public int div(int i,int j) throws Exception{<span style="white-space:pre">	</span>// 定义除法操作,如果有异常,则交给被调用处处理
<span style="white-space:pre">		</span>int temp = i / j ;<span style="white-space:pre">	</span>// 计算,但是此处有可能出现异常
<span style="white-space:pre">		</span>return temp ;
<span style="white-space:pre">	</span>}
};
public class ThrowsDemo01{
<span style="white-space:pre">	</span>public static void main(String args[]){
<span style="white-space:pre">		</span>Math m = new Math() ;<span style="white-space:pre">		</span>// 实例化Math类对象
<span style="white-space:pre">		</span>try{
<span style="white-space:pre">			</span>System.out.println("除法操作:" + m.div(10,2)) ;
<span style="white-space:pre">		</span>}catch(Exception e){
<span style="white-space:pre">			</span>e.printStackTrace() ;<span style="white-space:pre">	</span>// 打印异常
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
};
如果在主方法中不处理任何的异常了,而是交给最大的头,JAVA中的最大的头JVM处理,所以,如果在主方法中使用throws关键字,则表示一切的异常都交给JVM处理。

throw: 它是可以直接抛出一个异常。抛出的异常可以直接抛出异常的实例化对象即可。

public class ThrowDemo01{
	public static void main(String args[]){
		try{
			throw new Exception("自己抛着玩的。") ;	// 抛出异常的实例化对象
		}catch(Exception e){
			System.out.println(e) ;
		}
	}
};

下面看看异常联合使用的案例:这是使用最多的方式;
class Math{
	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 ThrowDemo02{
	public static void main(String args[]){
		Math m = new Math() ;
		try{
			System.out.println("除法操作:" + m.div(10,0)) ;
		}catch(Exception e){
			System.out.println("异常产生:" + e) ;
		}
	}
};



Exception:存在他的构造方法,可以抛出他的实例化对象;



Exception 与 RuntimeException

我们来看看这段代码:
public class RuntimeExceptionDemo01{
	public static void main(String args[]){
		String str = "123" ;	// 定义字符串,全部由数字组成
		int temp = Integer.parseInt(str) ; // 将字符串变为int类型
		System.out.println(temp * temp) ;	// 计算乘方
	}
};

转型的过程中,发生了异常抛出,当上层代码却没有try{  }cath(){  }  捕获异常?原因是NumberFormatException是RuntimeException的子类。
public static int parseInt(String s)
                    throws NumberFormatException

在JAVA异常处理机制中,用Exception必须使用try .....catch 进行处理。如果抛出的RuntimeException的类型,则不是必须使用trt......catch().., 他一旦发生异常,则由JVM处理;

自定义异常

class MyException extends Exception{	// 自定义异常类,继承Exception类
	public MyException(String msg){
		super(msg) ;	// 调用Exception类中有一个参数的构造方法,传递错误信息
	}
};
public class DefaultException{	
	public static void main(String args[]){
		try{
			throw new MyException("自定义异常。") ;	 // 抛出异常
		}catch(Exception e){
			System.out.println(e) ;
		}
	}
}


了解断言的作用

public class Test{
	public static void main(String args[]){
		int x[] = {1,2,3} ;	// 定义数组,长度为3
		assert x.length==0 : "数组长度不为0" ;	// 此处断言数组的长度为0
	}
};





版权声明:转载注明出处

JAVA中的异常处理机制及异常分类

JAVA的异常处理机制:如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的...
  • sinat_36713319
  • sinat_36713319
  • 2017年04月01日 16:18
  • 3425

深入理解java异常处理机制

demo1:package test.java.example; /** * Created by hejingyuan on 2016/5/2. */ public class TestCat...
  • hejingyuan6
  • hejingyuan6
  • 2016年05月02日 16:59
  • 4430

Java中的异常处理机制的简单原理?

答:    1:java常见异常架构图          1、  粉红色的是受检查异常(checked exception),其必须被try{}catch语句块所捕获,或者在方法签名里通过t...
  • goutiantian
  • goutiantian
  • 2015年10月28日 00:34
  • 1155

Java异常处理机制的简单原理和应用

异常是指Java程序运行时所发生的非正常情况或者错误,就像人们正常生活发生的意外事件、在什么地点, 可以 用一个对象来表示,Java采用面向对象的方式来处理异常,把程序中发生的每个异常都封装到一个对象...
  • JavaReact
  • JavaReact
  • 2017年07月10日 11:17
  • 593

Java中异常机制的意义

什么是异常:异常就是程序在运行时出现的不正常情况。对于严重的情况Java通过Error类进行描述,一般不用编写代码处理;对于不严重的情况Java通过Exception描述,一般编写针对性代码对其进行处...
  • qq_34122768
  • qq_34122768
  • 2016年05月18日 20:06
  • 1704

java中异常处理机制

try{ //代码区 }catch(Exception e){ //异常处理 } 代码区如果有错误,就会返回所写异常的处理。   首先要清楚,如果没有try的话,出现异常会导致程序崩溃。...
  • holandstone
  • holandstone
  • 2014年04月09日 22:34
  • 804

java 详解异常处理原理

一、Java异常处理机制的优点 在一些传统的编程语言,如C语言中,并没有专门处理异常的机制,程序员通常用方法的特定返回值来表示异常情况,并且程序的正常流程和异常流程都采用同样的流程控制语句。 ...
  • qilixiang012
  • qilixiang012
  • 2014年07月17日 23:01
  • 3732

JAVA异常机制介绍/如何正确的进行JAVA异常处理

作者:Maverick  blog:http://blog.csdn.net/zhaohuabing  转载请注明出处 1. 课前练习 在阅读本文的内容之前,请从下面这段代码中找出异常处理有...
  • best1196
  • best1196
  • 2015年03月19日 11:42
  • 1937

Java中的事件处理与异常处理机制-解析

异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间、地点、人物、情节等信息,可以用一个对象来表示,Java使用面向对象的方式...
  • heart_2015
  • heart_2015
  • 2016年05月25日 15:56
  • 2660

疯狂Java学习笔记(49)------------异常处理机制

Java的异常处理机制  异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众...
  • u011225629
  • u011225629
  • 2015年05月22日 20:44
  • 977
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java基础之Java异常处理机制
举报原因:
原因补充:

(最多只允许输入30个字)