您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页JAVA_SE_Day17

JAVA_SE_Day17

来源:飒榕旅游知识分享网
# 异常
- 将程序执行中发生的不正常情况称为"异常"
	1.Error : Java虚拟机无法解决的严重,一般不编写针对性请的代码进行处理
	2.Exception : 因为编程错误或偶然的存在外在因素导致的一般性问题,可以使用针对性的代码进行处理
- 异常的解决方法
	1.一旦遇到错误就终止程序的
	2.在编写程序时,就考虑检测,错误消息的提示,以及错误的处理
- 异常体系结构
	java.lang.Throwable
		|------java.lang.Error(一般不写针对性的带啊码进行处理)
		|------java.lang.Exception(可以进行异常的处理)
			|------编译时异常(checked)
				|------IOException
					|------FileNotFoundException
				|------ClassNotFoundException
			|------运行时异常(unchecked)
				|------NullPointException
				|------ArrayIndexOutOfBoundsException
				|------ClassCastException
- 异常的处理 抓抛模型
	1.“抛”的过程  程序在执行的过程中,一旦出现异常,就会在异常代码处生成一个异常对象的对象
		并将此对象抛出
	2.“抓”的过程  可以理解为异常的处理方式 1.try-catch-finally  2.throws + 异常类型
- 异常处理方式
	1.try-catch-finally
		try{
			// 可能出现异常的代码
		}catch(异常类型1 变量名1){
			//处理异常的方式1
		}catch(异常类型2 变量名2){
			//处理异常的方式2
		}finally{
			//一定会执行的代码
		}
		1.1 finally是可选的
		1.2 一旦出现异常就去catch中匹配抛出异常的类型,一旦处理完成,再执行完finally,就跳出结构执行其后的代码
		1.3 如果catch中的类型是子父类关系,子类写在前边否则报错
		1.4 异常对象的处理方式 1.e.getMessage() 2.e.getStackTrace()
		1.5 使用try-catch-finally将编译时异常,延迟到运行时异常
		1.6 由于运行时异常比较常见,所以我们就不针对运行时异常编写try-catch-finally
	2.throws + 异常类型
		2.1 一旦方法体执行时,出现异常,仍然在异常代码处生一个异常对象,如果此对象满足throws类型时,就会被抛出,异常代码后续的代码也不会被执行
		2.2 throws的方式只是将异常抛给了方法的调用这,并没有真正的将异常处理掉
		2.3 如果父类中被重写的没有throws方式处理异常,则子类重写的方法也不能用throws只能用try-catch-finally
- 用户手动抛出异常
	1. 使用throw抛出异常
	2. 自定义异常类需要继承异常父类  如    public class EcDef  extends RuntimeException
	3. 需要重写无参构造器和带参msg构造器
- throws和throw的区别
	1.throw表示抛出一个异常类的对象,生成异常对象的过程,声明在方法体内
	2.throws是属于异常处理的一种方式,声明在方法的声明处

实例1

public class Test {
	public static void main(String[] args) {
		try {
			int[] i = null;
			System.out.println(i[7]);
		}catch (NullPointerException e) {
			// TODO: handle exception
			System.out.println(e);
		}
	}
}

class Super{
	public void method() throws IOException{};
}

class Son extends Super{
	@Override
	public void method() throws FileNotFoundException{};
}

实例2

public class Test {
	
	public static void main(String[] args) {
		try {
			Integer i = Integer.parseInt(args[0]);
			Integer j = Integer.parseInt(args[1]);
			int result = ecm(i,j);
			System.out.println(result);
		} catch (NumberFormatException e) {
			System.out.println("数据格式异常");
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("缺少命令行参数");
		} catch (ArithmeticException e) {
			System.out.println("除零异常");
		} catch (EcDef e) {
			System.out.println("分母或分子为负数!");
			
		}
		
	}
	
	public static int ecm(int i,int j) throws EcDef{
		if(i < 0 || j < 0) {
			throw new EcDef();
		}
		return i / j;
		
	}
}






public class EcDef  extends RuntimeException{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public EcDef() {};
	
	public EcDef(String msg) {
		super(msg);
	};
	
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务