
异常:
在程序运行过程中出现的不正常的情况
注意:
1.相同的代码在运行的时候,根据输入参数或者 *** 作的不同,有可能会发生异常,有可能不会
————应该在写代码的过程中尽可能保证代码的正确性
2.如果要解决代码中的异常,需要添加非常复杂的代码逻辑来进行判断,会使代码变得非常臃肿,不利于维护
————推荐使用异常机制来处理程序中的异常问题
3.程序在执行过程中如果出现了问题会导致后面的代码无法执行
而使用异常机制之后,对异常情况进行处理,同时后续的代码会继续执行,不会中断整个程序
4.在异常处理的过程中,不要只是简单的输出错误,要尽可能地将异常的详细信息进行输出
e.printStackTrace():打印异常的堆栈信息【可以从异常信息的最后一行进行追踪,寻找自己所编写的java类】
System.out.println(e.getMessage()); 输出异常的错误信息(用的很少)
try(代码逻辑)catch(Exception e){异常处理逻辑}
try(代码逻辑)catch(具体的异常Exception e){}(具体的异常Exception e){}catch…
好处:可以针对每一种具体的异常做更丰富的处理
注意:当使用多长catch的时候,一定要注意相关异常的顺序,将子类放在最前面的catch,父类放在后面的catch
执行过程中可能出现的情况:
1.正常执行,只执行try中的代码
2.遇到异常情况,会处理try中异常之前的代码的逻辑,后面的逻辑不会执行,最后会执行catch中的代码
3.使用多重catch的时候会遇到异常子类不匹配的情况,此时依然会报错,因此建议在catch最后将所有异常的父类写上
public class TestException {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
try{
System.out.println("请输入被除数:");
int num1 = in.nextInt();
System.out.println("请输入除数:");
int num2 = in.nextInt();
System.out.println(String.format("%d / %d = %d", num1,num2,num1/num2));
// }catch (Exception e){
// System.out.println("出现异常");
// e.printStackTrace();
//java.lang.ArithmeticException: / by zero
// at TestException.main(TestException.java:32)
// System.out.println("-------------");
// System.out.println(e.getMessage()); // /by zero
}
catch(ArithmeticException e){
System.out.println("数学异常,除数不能是0");
e.printStackTrace();
}catch (InputMismatchException e){
System.out.println("输入的参数值类型不匹配");
e.printStackTrace();
}catch (NullPointerException e){//异常类型不匹配
System.out.println("空指针异常");
e.printStackTrace();
}catch (Exception e){//建议在catch最后将所有异常的父类写上
System.out.println("出现异常");
}
System.out.println("感谢使用本程序");
}
}
关于finally
public class FinallyDemo {
public static void main(String[] args) {
try{
System.out.println(1/0);
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("我是finally处理块");
}
}
}
2.声明异常、抛出异常、用户自定义异常
public class GenderException extends Exception{
public GenderException(){
System.out.println("性别异常");
}
public GenderException(String message){
System.out.println("message");
}
}
public class Exception2 {
public static void main(String[] args) {
try{
show();
}catch (GenderException e){
e.printStackTrace();
}
System.out.println("hh");
}
public static void show() throws GenderException{
String gender = "1234";
if(gender.equals("man")){
System.out.println("man");
}else if(gender.equals("woman")) {
System.out.println("woman");
}else {
// throw new Exception("性别出现错误");
throw new GenderException();
}
}
}
常见的异常类型
1.Exception:异常层次结构的父类
2.ArithmeticException:算术错误情形,如以0作为除数
3.ArrayIndexOutOfBoundsException:数组下标越界
4.NullPointerException:尝试访问null对象成员
5.ClassNotFoundException:不能加载所需的类
6.IllegalArgumentException:方法接收到非法参数
7.ClassCastException:对象强制类型转换出错
8.NumberFormatException:数字格式转换异常,如把“abc”转换成数字
Throwable的两个子类:Exception和Error
Exception又分为Checked异常和运行时异常
Checked异常必须捕获或者声明抛出
运行时异常不要求
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)