异常问题

版权声明:A_芦瑞华_i_DO.欢迎转载 https://blog.csdn.net/weixin_43067223/article/details/82931187

异常笔记

1.1异常的概念

不正常,我们在代码的时候出现的变异或者运行时的错误。

1.2为什么出现异常

Java它为我们提供异常处理机制,可以找到异常位置,错误的类型,错误的原因,方便我们处理异常。

1.3异常的体系结构

Throwable(最顶层)
Error:出现的不可能处理的严重问题
Exception:可以处理的问题

1.4异常的处理方式

1.4.1不处理

如果我们不处理异常,jvm会处理,将异常的位置,类型,原因信息显示到console控制台中,还会把我们的程序终止。

1.4.2我们处理

1)捕获异常
try…catch语句

Try {
有可能出现问题的代码;
} catch(异常对象) {
处理异常;
}

Try…catch的执行顺序:
执行try语句
如果发现异常,异常下面的代码不在执行,直接跳入catch语句,catch语句结束后,整个try。。Catch结束,如果没有发现异常,try语句执行结束之后,catch语句不再执行。
2)抛出异常
我们不想处理异常,或者没有能力处理异常的时候,我们可以选择抛出异常,谁调用方法谁处理异常。
使用关键字throws,在方法声明之后抛出。

1.5如何处理多个异常

1.5.1解决方法:

第一种:可以使用多个try…catch语句,分别包含异常代码。
第二种:可以使用try…catch…catch…catch…语句,try中包含多个异常代码块,每个catch包含一种异常。
第三种:使用try…catch(Exception e)…

1.5.2多个catch之间的顺序:

多个catch之间可以子父类关系
同级之间没有顺序关系
如果有子父类,父类异常必须放在后面。

1.5.3常见异常

RuntimeException:
1)NullPointerException:空指针异常
一个引用对象的值为null,这时调用他的成员变量或者方法,就会出现空指针异常。
2)IndexOutOfException:下标越界异常
3)ArithmeticException:运算异常
4)ClassNotFoundException:类找不到异常(jar包没等)
5)NuberFormateException:数字格式异常

非RuntimeException

1)IOException: io异常
2)SQLException:SQL语句异常

1.6Throwable的常用方法

常用方法:

String getMessage():原因
String toString():类型和原因
Void printStackTrace():类型原因位置

1.7finally的应用

Try {
有可能出现问题的代码;
} catch(异常对象) {
处理异常;
} finally {
释放资源;
清理垃圾;
}

组合try…catch语句使用,用于释放资源等收尾工作,无论try…catch语句如何执行,finally的代码一定会执行。

1.8异常的分类

1.8.1运行时期异常

RuntimeException的子类就是运行时期异常,在编译时期可以自由选择处理或者不处理。

1.8.2编译时期异常

在编译时期必须处理。

1.9自定义异常

1.9.1案例需求:

写一个方法,接收考试成绩,如果考试范围在0-100之间则属于正常,否则属于异常。
异常抛出成绩不符合要求
1)编译时期异常
2)运行时期异常

1.9.2为什么需要自定义异常:

使用自定义异常,可以更加直观的的看出我们自己想要抛出的信息,可以通过跑出的信息区分异常发生的位置,根据异常名我们就知道哪里有一场,根据异常信息进行程序修改。

1.9.3Throws和throw的区别:

Throws:处理异常的一种方式,把异常抛出,由调用者来处理。
Throw:制造异常的方式,碰到异常直接终止程序。

1.9.4注意:

编译时期异常必须要抛出异常。

1.9.5如何自定义一个异常类:

写一个类去继承Exception或者RuntimeException,然后实现多个构造。
1)自定义一个类。
2)如果希望写一个编译时异常(检查性异常类),则需要继承Exception类。
3)如果希望写一个运行时异常类,那么需要继承RuntimeException类。
4)自定义异常类需要重写父类的两个构造方法,分别是无参构造和有一个String的有参构造。

1.10代码

1.10.1编写运行时异常


package com.aaa.exception;


@SuppressWarnings("serial")
public class ScoreOutOfRantimeException extends RuntimeException{

	public ScoreOutOfRantimeException() {
		super();
		// TODO Auto-generated constructor stub
	}

	public ScoreOutOfRantimeException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}

测试类测试运行时异常


    //测试类测试运行时异常
    package com.aaa.test;
    
    
    import com.aaa.exception.ScoreOutOfRantimeException;
    
    public class ScoreTest {
    	public static void main(String[] args) {
    		double score = -10;
    		if(score < 0 || score > 100) {
    			//抛出异常,用关键字throw+new+异常名(异常原因);
    			throw new ScoreOutOfRantimeException("分数格式错误!!!");
    		} else {
    			System.out.println("分数格式正确!!!");
    		}
    	}
    }

结果
在这里插入图片描述

1.10.2编写编译时异常


package com.aaa.exception;

@SuppressWarnings("serial")
public class ScoreOutOfNotRuntimeException extends Exception{

	public ScoreOutOfNotRuntimeException() {
		super();
		// TODO Auto-generated constructor stub
	}

	public ScoreOutOfNotRuntimeException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}
	
}

测试编译时异常
注意:如果抛出编译时期异常,必须要处理。


package com.aaa.test;


import com.aaa.exception.ScoreOutOfNotRuntimeException;

public class ScoreTest {
	public static void main(String[] args) {
		//调用方法
		try {
			inputScore(1000);
		} catch (ScoreOutOfNotRuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	/**
	 * 编写判断分数是否合格方法
	 * @param score
	 * @throws ScoreOutOfNotRuntimeException
	 */
	public static void inputScore(double score) throws ScoreOutOfNotRuntimeException {
		if(score < 0 || score > 100) {
			//抛出异常,用关键字throw+new+异常名
			throw new ScoreOutOfNotRuntimeException("分数格式不正确");
		} else {
			System.out.println("分数格式正确!!!");
		}
	}
}

注意:如果是抛出编译时期异常,方法头部必须要抛出。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43067223/article/details/82931187
今日推荐