一、异常
- 错误和异常的区别:
错误:需要去修改代码
异常:在程序运行期间可能出现的问题 - Throwable是他的父类
- Error :错误,只有改变代码才能解决
- Exception:异常的父类
运行时异常,该异常可以通过异常捕获机制进行异常的处理,而使程序不会因为异常产生而停止运行。
运行时异常会导致程序终止运行
在java自带的类的方法中,在定义的时候,如果怎么样就会抛出一个异常。
二、运行时异常 Exception
1、如何处理异常
因为参数导致程序发生异常,可以采用java提供异常处理机制来解决异常,避免程序因为异常而终止运行。
1、1向上抛出异常 throws
在方法上进行使用,向上抛出会导致异常的向上延续。在A方法中抛出一个异常,B方法调用了A方法,此时B方法也会产生异常。
package com.nebula.throwss;
/**
*
* @author langlang
*
* 2020年12月2日下午3:20:44
*/
public class ErrorClass {
public static void main(String[] args) throws ArithmeticException, ClassNotFoundException {
math();
}
public static void funm() throws ArithmeticException, ClassNotFoundException {
math ();
}
//该方法会向上抛出一个异常
public static void math () throws ArithmeticException,ClassNotFoundException {
// 编译没有问题 运行
int num=10;
System.out.println(1/num); // 产生异常 进行处理
System.out.println("13212312313");// 无法运行
}
}
1、2捕获处理异常
try catch
- 语法:
Try{
可能发生异常的代码
}catch( 异常对象01 )
{ ArithmeticException
对异常的处理
}catch( 异常对象2 )
{ ClassNotFoundException
对异常的处理
}catch( 异常对象03 )
{ Exception
对异常的处理
}… - Catch可以有多个,异常类型要从小到大。在捕获到异常时,从上到下进行对比
public static void main(String[] args) {
math(0);
}
public static void math(int num) {
try{
//该方法体中写可能发生异常的代码
System.out.println(1/num);
}catch (ArithmeticException a) {
//发生异常的时候,就会执行该代码
System.out.println("发生异常的");
//打印异常的具体描述
System.out.println(a.getMessage());
//使用标准打印输出流来进行异常信息的打印输出
a.printStackTrace();
}catch(Exception a) {
System.out.println("上面不知道异常是什么");
}
System.out.println("123123123123123");
}
2、自定义异常:自己定义方法,并什么情况抛出一个异常
为什么要自定义异常:因为java提供的异常不能满足我们的需要。
小例子:
性别只有男和女,当输入的不是男或者女的时候我要自己定义一个异常,并且告诉你具体的异常内容是什么。
第一步:创建一个类,继承一个java中现有的异常,该类是一个异常类;
package com.xingyun.throwss;
/**
* 自定义异常
* @author langlang
*
* 2020年12月2日上午11:30:26
*/
public class MyException extends Exception{
//如何写出具体的异常描述信息
String message;
//有参数构造方法
public MyException(String message) {
super(message);//将异常描述交给父类
this.message =message;
}
}
第二步:在使用中使用throw关键字,在指定的地方抛出一个异常
package com.xingyun.throwss;
import java.util.Scanner;
/**
*
* @author langlang
*
* 2020年12月2日下午3:03:19
*/
public class MyExDemo01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入性别");
String sex = sc.next();
setSex(sex);
}
//输入一个参数,给性别赋值
public static void setSex(String sex) {
Person p = new Person();
//输入的不是男或者不是女
if((!sex.equals("男")) && (!sex.equals("女"))) {
//抛出一个异常
try {
throw new MyException("输入性别类型不对,只能是男或者女");
}catch(MyException e) {
//输入类型不匹配时,可以进行异常的捕获和处理,当类型不匹配时给与默认值男
System.out.println(e.getMessage());
sex = "男";
}
}
p.sex = sex;
System.out.println(p);
}
}