异常

异常:就是程序在运行时出现不正常情况,如除数为0.
异常由来:问题也是现实生活中一个具体的事物,也可以通过java类的形式进行描述,并封装成对象,其实就是java对不正常情况进行描述后的对象体现。

一,对于问题的划分,两种:一种是严重的问题,一种非严重的问题。

对于严重的,java通过Error类进行描述。
 对于Error一般不便携针对性的代码对其进行处理。

对于非严重的,java通过Exception类进行描述。
 对于Exception可以使用针对性的处理方式进行处理。

Throwable
  |--Error
  |--Exception

二,异常处理:
try{
需要被检测的代码
}
catch(异常类 变量){
处理异常的代码(处理方式)
}
finally{
一定会执行的语句
}

三,对捕获到的异常对象的常见处理方式:
    String getMessage();异常信息
    String toString();异常名称:异常信息
    String printStackTrace();异常名称:异常信息,异常出现的位置,JVM默认的异常处理机制,就是调用这个方法,打印异常的堆栈的跟踪信息。

public class Test {
	public static void main(String args[]) //throws Exception 在这里抛给了虚拟机去处理,虚拟机遇见异常就结束程序了
    {

		ExceptionDemo d= new ExceptionDemo();
		int x;
		try {
			x = d.div(4, 0);
			System.out.println("x="+x);
		} catch (Exception e) {
			System.out.println("除数为0了");
		}
		
		System.out.println("over");

    } 



}
class ExceptionDemo{
	//在功能上通过throws关键字声明了该功能有可能会出现异常
	//声明了异常以后,调用者就要处理,不处理就会编译失败。如果不声明,调用者不会编译报错
	int div(int a,int b) throws Exception{
		return a/b;
	}
}


四,

throw和throws区别:
throw使用在函数内,throws使用在函数上(写在函数名后面)

throws后面跟的是异常类,可以跟多个,用逗号隔开;
throw后跟的是异常对象。

五,

对多异常的处理:
1,声明异常时,建议声明更具体的异常,这样处理的更具体。
2,方法声明几个异常,就对应几个catch块,不要定义多余的catch块。如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

建议在进行catch处理时,catch中一定要定义具体处理方式,不要简单的定义一句e.printStackTrace();也不要简单的写一条输出语句。
真正开发中,会把异常写到一个异常日志文件中。

六,RuntimeException异常

package test;

import java.io.File;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
/**
 * Excetpion中有一个特殊的子类异常RuntimeException 运行时异常
 * 
 * ArithmeticException是RuntimeException的子类。
 * 如果在函数内抛出该异常,函数上可以不用声明,编译可以通过。
 * 如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。
 * 
 * 自定义异常时,如果该异常的发生,无法再继续进行运算,
 * 就让自定义异常继承RuntimeException。
 * 
 * Object类的wait(long timeout)方法,在函数声明时,只声明了InterrupteException异常,
 * 但是在函数说明时却抛出了IllegalArgumentException和IllegalMonitorStateException异常。
 * IllegalArgumentException和IllegalMonitorStateException异常都是RuntimeException异常的子类。
 * 注意:对于异常分两种:
 *       1,编译时被检测的异常,这个异常是可以处理的。
 *       2,编译时不被检测的异常(运行时异常--RuntimeException以及其子类)
 *   在自定义异常的时候,要分析问题是不是可以处理,可以处理就使用Excepttion;
 *   如果需要程序停下来修正后再继续执行,则使用RuntimeException
 *       
 */

public class Test {
	public static void main(String args[]) //throws Exception 在这里抛给了虚拟机去处理,虚拟机遇见异常就结束程序了
    {

		ExceptionDemo d= new ExceptionDemo();
		int x;
		x = d.div(4, 0);
		System.out.println("x="+x);
		
		System.out.println("over");

    } 



}
class ExceptionDemo{
	int div(int a,int b){//throws ArithmeticException
		                 //如果这里声明ArithmeticException异常,则调用者在调用这个方法时,必须处理异常。
		                 //这里之所以不用再函数声明,是因为不需要让调用者处理,因为调用者处理后就不知道方法有没有异常了。
		                 //当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,
		                 //希望停止程序,由程序员对代码进行修改,
		if(b==0){
			throw new ArithmeticException("被零除啦");
		}
		return a/b;
	}
}



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值