异常_java

1:什么是异常

简单来说:

异常情况是指程序在运行时,可能由与外部系统的条件变更(与我们一厢情愿所设想的不一设)而导致程序可能会出错的情况

import java.util.Scanner;

/**
 * 演示除数为0的情况
 * @author pactera
 *
 */
public class TestException {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入被除数:");
		int num1 = input.nextInt();
		System.out.println("请输入除数:");
		int num2 = input.nextInt();
		System.out.println("计算结果如下:");
		System.out.println(num1+"/"+num2+"="+(num1/num2));
	}
}

//对于除数为0是 程序就会报错

2. 异常的体系结构

 1:Error为错误,是程序无法处理的,如OutOfMemoryError、ThreadDeath等,出现这种情况你唯一能做的就是听之任之,交由JVM来处理,不过JVM在大多数情况下会选择终止线程。

2:Throwable:代表程序运行过程中所有的异常 异常根类

理解:

Error 错误:一般是计算机的问题,计算机硬件坏死

Exception开发中常见遇到的异常:

运行时异常:一个异常类继承RuntimeException或者其子类

编译时异常:不是继承RuntimeException或其子类,但继承自Exception的异常

重点:语法错误不在异常体系中,无论try中的代码是否异常finally中的代码都会被执行一次

3:异常的处理

3.1 try-catch

try{
可能抛出异常的代码. . .
//如果没有问题出理,执行如下面的代码
(A)其它计算代码…
}catch(Exception ef){
  //如果出现异常后执行的代码:
(B)出了异常情况的计算代码. . .
e.printStackTrace();//可以在控制台打印详细的异常信息,在开发阶段使用,便于调试代码
//异常的处理,我们简单输出一句话,但是在真实的项目中,不能只是输出一句话,而是要做相应的处理
}
//未异常就继续执行,出现异常就执行B

异常分为强制检测和非强制检测二种

强制检测:代码检查到了就能够出现异常的汇报

非强制检测:数组越界,程序员编码是出现的逻辑错误

int[] ia=new int[10];
 ia[10]=100;
String s="123abc";
 int sa=Integer.parseInt(s);//转为int型
 //
  运行时会抛出:

 `java.lang.NumberFormatException: For input string: "123abc"`

 因为要将s解析为int时,s中的字符必须是0~9之间的。

catch多个异常时:范围小的写在最前面

3.2 try-catch-finally

不管是否异常都会执行finally

注意:

1.try 代码段包含的是可能产生异常的代码

2.try 代码段后跟一个或多个catch代码段。(或跟一个finally代码段)

3.当异常发生时,程序会中止当前的流程去执行相应的catch代码段。

4.写catch代码时,先捕获的异常的范围不能大于后捕获的异常的范围。

5.finally段的代码无论是否发生异常都执行。

3.3 throw 与throws

throw表示抛出异常,语法是:

 throw new 异常类型([异常信息]);

比如说: throw new Exception(“抛个异常玩玩”);

throws表示用来声明方法可能会抛出那些异常: 语法是:

throws 异常类型1,异常类型2…

代码演示:

//定义一个除法的方法,并声明异常
	public int division(int num1 ,int num2) throws ArithmeticException{
		if(num2 == 0){
			//抛出异常,如果抛出异常,则抛出异常后面的代码不会执行
			throw new ArithmeticException("除数不能为0");
		}
		return num1/num2;
	}

面试题:throw和throws的区别

throw 在方法体中 抛出一个异常对象

new throw Exception();

可使用自定义的异常-

throws 出现在方法的申明上,表示调用者来调用这个方法的时候

告诉调用者,该方法可能出现异常

4:自定义异常

4.1:创建异常类

创建自定义异常,需要继承Exception 或其子类。习惯上包装一下父类的构造方法。

public class MyException extends Exception {
    public MyException() {
        super();
    }
    public MyException(String msg) {
        super(msg);
    }
    public MyException(Throwable cause) {
        super(cause);
    }
    public MyException(String msg, Throwable cause) {
        super(msg, cause);
    }
}

4.2:使用自定义异常类

public String[] createArray(int length) throws MyException {
    if (length < 0) {
        throw new MyException("数组长度小于0,不合法");
    }
    return new String[length];
}

5:总结

1:面试题:throw和throws的区别:一个是调用 一个是声明中

2:常用的异常:自定义异常,首选需要继承父类,再进行方法的重写,在利用自定义方法的对象进行调用自定义的异常方法

3: try-catch-finally和try-catch的区别在于finally不管是否抛出异常都会执行

4:catch多个异常时:范围小的写在最前面 或者说只使用一个异常抛出(最大的异常类eg.Exception

6:建议采纳

如有建议或者错误请私信我进行修改,感谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值