十五、异常

							***异常***

一、了解异常的概念
学而时习之,不亦乐乎!
1编写的程序时来源于或者超脱于现实生活
2.生活中的不符合你预期的场景就是异常出现了
*3.*程序中经常会出现的异常

Scanner in = new Scanner(System.in);
System.out.print("请输入除数:");
int num1 = in.next.Int();
System.out.print("请输入被除数:");
int num2 = in.next.Int();
System.out.print(num1+"/"+num2+"="+num1/num2);
System.out.print("感谢使用本程序!");
*4生活中我们不能放弃。程序中也不能放弃*
程序中我们要将上面的代码进行整改,防止输入的错误而导致程序的中断
程序中的解决方案(代码臃肿,不容易补足所有的漏洞)
Scanner in = new Scanner(System.in);
System.out.print("请输入除数:");
//hasNextInt();判断Scanner接受到的你输入的值是否是某个类型。如果是true
	if(in.hasNextInt){
		//讲类型进行转换
		int num1 = in.nextInt();
		System.out.print("请输入除数:");
		if(in.hasNextInt()) {
		int num2 = in.nextInt();
		// 排除掉0为除数场景
		if(num2 == 0) {
			System.out.println("除数不能为0!");
		}else {
			System.out.println(num1+"/"+ num2 +"="+ num1/ num2);
		}
	}else {
		System.out.println("对不起!除数必须为整数!");
	}
}else {
	System.out.println("对不起!被除数必须为整数!");
}
System.out.println("感谢使用本程序!");
	}

异常:程序中出现了不正常的情况,会导致程序的中断

二、理解Java异常处理 机制
1.认识一下异常中的常用关键字
try:尝试,试图
catch:捕捉。抓住
finally:最终的,最后的
throw:扔。扔出
throws:抛出,扔(Java编程网络的意:声明异常)
2.会捕捉异常
try–catch

		//可能有的代码段
		try{
			//可能出现异常的代码段
		}catch(异常的类型 形参名){
			//出现了异常  解决异常的代码段
		}		
		//可能有的代码段
	
3.加上try--catch后的三种效果
	①正常情况:和没有加是一样的效果
	②出现了异常后(声明了可以捕获的异常):当try块中的某一行代码出现了异常之后,那么try块中的代码就不会再执行下去了。直接跳转到catch块中进行异常的处理了。处理完之后就继续向下执行了
	③出现了异常之后,(异常类型和声明的异常类型不匹配):当try块中的某一行代码出现了异常,那么try块中的代码就不会再去执行了。进入catch块中,但是catch块中声明的异常类型和实际发生的异常类型不匹配,那么异常将不会被处理,会采用默认的处理方式。(它就好像你没有加过try--catch块一样)

4.多重catch块
	①try--catch--catch--catch....
	多重catch块可以联想到我们之前学习到多重if
	②多重catch块的特点:当异常出现之后,会自上而下的进行判断,判断是否有符合catch块中的异常,如果有符合出现类型的异常,就直接执行catch块。后面的catch块就不会再去执行了。
Scanner in = new Scanner(System.in);
try {
	// 可能会出现问题的代码
	System.out.print("请输入被除数:");
	int num1 = in.nextInt();
	System.out.print("请输入除数:");
	int num2 = in.nextInt();
	System.out.println(num1+"/"+ num2 +"="+ num1/ num2);
}catch(InputMismatchException e) {
	// 出现了问题之后 如何解决
	System.out.println("输入不匹配!必须输入整数!");
	e.printStackTrace();
}catch(ArithmeticException e) {
	System.out.println("除数不能为0!");
	System.err.println(e.getMessage());
}catch(Exception e) {
	System.out.println("有异常出现:"+e.getMessage());
}
System.out.println("感谢使用本程序!");
5.try-catch-finally
	特点:无论try块中的代码是否有异常,都会执行finally中的代码片段
	①出现了退出虚拟机的语句;Ssystem.exit(0);退出虚拟机
	②return关键字:结束当前的方法。返回到方法的调用者处。当try-catch中同时出现了return和finally块时。它会先执行finally中的代码块,然后才会执行return
Scanner in = new Scanner(System.in);
try {
	System.out.print("请输入被除数:");
	int num1 = in.nextInt();
	System.out.print("请输入除数:");
	int num2 = in.nextInt();
	System.out.println(num1+"/"+ num2 +"="+ num1/ num2);
}catch(InputMismatchException e) {
	System.out.println("输入不匹配!");
	return;
}finally { // 无论是否出现异常  都会执行!
	System.out.println("感谢使用本程序!");
}
	注意事项:try  catch   finally 可以随意组合,但是他们不会单独出现


	6.异常出现之后,究竟JVM做了什么事情?
		当异常出现之后,JVM中会帮助你创建对应的异常类的对象,(例如:new InputMismatchExceptioj(异常信息)),如果没有能够处理try-catch块。采用默认的处理方法,将异常信息进行封装然后进行控制台的打印

7.异常的堆栈跟踪信息:(我们也可以通过异常对象的方法 printStack()来进行输出异常的堆栈跟踪信息。)”
Exception in thread "main"(异常出现在哪个线程里面了)、
java.lang.AtithmeticException(出现了什么类型的异常,)/by  zero(异常的缘由信息)
	at  cn.kgc.demo2.Demo1.main(Demo1.java;21)(异常出现的位置具体到某个包下,某个类下的某个方法,类中的第几行)
Exception in thread "main" java.util.InputMismatchException
	at java.util.Scanner.throwFor(Scanner.java:864) // 异常出现的根本位置
	at java.util.Scanner.next(Scanner.java:1485)
	at java.util.Scanner.nextInt(Scanner.java:2117)
	at java.util.Scanner.nextInt(Scanner.java:2076)
	at cn.kgc.demo2.Demo2.main(Demo2.java:10) // 异常出现的直接位置

如果有能够处理的try- catch块,那么JVM会将这个异常类的对象传给catch(异常类型 形参名)块,然后你就可以通过形参去查看异常相关信息或者去做对应的而处理了

三、会抛出异常 throw和throws,(javaWeb部分会再次提到用法)
1.之所以出现了throw和throws的目的就是当某个位置出现了异常之后,如果他不想处理就可以将此异常上抛,上抛给调用者
2.后期的常用形式:为了借助finally块的特点,处理完最终执行的内容之后,再将异常上抛
3.throws:后面接的是此方法可能出现的异常类型,可以同时指定多个,中间用逗号隔开
4.throw:用来抛出异常对象
5.我们可以联想到子类重写父类的方法:子类重写父类的方法的时候,子类的这个方法不能抛出比父类更多的异常,也不能抛出更大的异常

四、了解Java异常体系结构(类的家族树)
①最大的是:Throwable
②Throwable又分为:Exception 和Error
③Error:程序无法通过代码来修复,必须人工干预解决,常见的错误有:OutOfMenmoryError内存溢出
还有一个是:StackOverflowError堆栈溢出,编译错误,(语法错误等)
④Exception :程序在执行过程中,可能会出现一些问题,可以提前做好处理工作

	⑤RuntimeException:运行时异常,例如:InputMismatchException输入不匹配异常
	ArrayIndexOutOfBoundExceotion数组下标越界
	NullPointerException空指针异常
	ClassCastException类型转换异常 
	⑥checked异常:受检异常/检查异常  例如:
	FileNotFoundException文件找不到异常
	ClassNotFoundException类找不到异常
	java程序中人家认为这种异常很有可能出现,所以必须要提前解决!增强程序的健壮性

自定义异常:

/**
 * 自定义异常(异常种类更加丰富   更加具体)
 * @author xiaobu
 * 2019年2月18日 上午11:51:42
 */
public class IllegalAgeException extends RuntimeException{
	
	public IllegalAgeException(String message) {
		super(message);
	}

	public IllegalAgeException() {
		
	}
}

五、了解异常记录(目前作为了解)–日志(log4j)

1.日志:(记录东西)在程序运行期间,记录程序的运行状态,用户的操作行为。异常情况的一种日志。
2.记录日志通常用*.log
3.日志是为了以后我们分析程序运行情况和解决问题的根据!重要!
4.日志记录工具/框架:log(log  for java )logback
	①下载jar包(人家编写好的代码的字节码压缩包)
	②将jar包引入到你的工程内(先建立一个lib文件夹,将jar包放进去,右键jar包进行build path--然后进行add--)
	③像使用JRE的类库一样去使用它就行

5. 日志的集中记录方法、
	①info();记录普通的信息
	②error();记录错误的信息
	③debug();记录一下特别的普通的信息
标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值