java开发常见问题答疑_Java开发知识之Java的异常处理

Java开发知识之Java的异常处理

一丶异常概述

在讲解异常之前,我们要搞清楚.什么是异常. 通俗理解就是我们编写的程序出问题了.进行处理的一种手段.

比如我们的QQ.有的时候就崩溃了.比如出现xxx错误.让你上报错误信息什么的. 意思就是 QQ的代码不能运行了.

但是,直接崩溃又不好看.对用户不好. 所以就用异常处理接受. 我弹出一个错误框.告诉你已经错误了.代码不能运行了.让你上传或者重新启动. 异常做的事情就是这样.只能这样做最后的一点事情.但是了解一下还是必须的.

1.异常说明

异常主要作用: 代码超出了程序员可控范围. 如用户的数据出错.导致程序出错. 或者打开文件的时候.也会出错.在程序中可能出现的这种错误.我们都称之为异常.在C++ 中一样有异常处理. 如果是底层.那么会更复杂.在汇编的角度来说.

2.Java中的异常.

在程序编程中. 我们不能 除0. 除0就会有异常,在C++中内存访问异常就是C0005; 我们可以编写代码,告诉大家什么是异常.

public classJavaMain {public static voidmain(String[] args) {int Number = 10;int NumberCount = 10 / 0;

}

}

运行结果

2ff168b9a56de64849556e811179b520.png

这一串英文可以翻译为:

异常 在线程 main中. java.lang.ArithemeticExeception 接受的 / 除 0 错误. 在 man函数的第16行位置.

可以准确的输出.这个就是异常.异常一旦处理.代表了其程序已经不能执行了.不过你可以接受异常对其进行处理.比如我输出一段话.

二丶异常的捕获与处理

1.异常处理 try catch

我们上边说过. 当异常产生的时候.我们可以进行处理.

语法:

try{

会出现的异常代码.

}catch(Exception e){

异常出现后我们进行捕获.

进行你自己的操作.比如输出一段话.

}catch(Exception a){

.....

}

代码如下:

public static voidmain(String[] args) {try{int Number = 10;int NumberCount = 10 / 0;

}catch(Exception e) {

String Error=e.getMessage();

e.printStackTrace();

}

}

我们捕获了异常. 任何异常都可以使用 Exception这个对象的引用来接受. 这个类就相当于异常的全局父类. 任何异常处理类都继承它.所以可以用它接受一下.并且调用方法.输出错误.

输出结果:

25ace61be00eca88f9c63aaf7230c64c.png

注意: 如果我们使用的try语句中.有代码出现了异常.那么会去寻找对应的Catch语句进行处理.但是如果我们catch语句不输出结果.或者不加代码.那么可能程序就与你的预期不对.因为以前不使用的时候.出了异常我们知道哪里错误了.

但是现在你自己处理catch不输出错误.这样就会造成一种假象就是我的程序没有出错.但是为什么运行结果不对. 因为已经除了异常了.但是你没有进行处理而已.

2.异常处理语句 try catch finally

在C++中,标准的异常处理就是try catch .java中也可以这样做.

但是此时可能遇到一个问题.如果我们已经知道出现异常了.但是想要释放资源怎么办.所以使用另一种 java的处理语句

语法;

try{

}catch(Exception e){

}

finally{

}

finally的作用就是,不过try catch语句怎么执行.最终都会执行finally语句的.

执行流程:

try捕获异常. 交给 catch处理. catch处理完了. 指向finally语句.

三丶Java中的常见处理类.

ea721b3a27edc1a9573105a75ff9fe37.png

cffa689462f078e5fbf74c27640f84e1.png

例如上面的我们 除0异常.就是算数异常.我们可以使用此类进行接收.

四丶自定义异常与异常抛出

用户可以自定义异常.并且出现了异常.可以抛出这个异常.

1.继承父类 Exception 类.

2.使用throw语句. 方法上使用throws语句.

1.继承父类.

public class MyException extendsException {publicMyException() {//TODO 自动生成的构造函数存根

}publicMyException(String message) {super(message);//TODO 自动生成的构造函数存根

}publicMyException(Throwable cause) {super(cause);//TODO 自动生成的构造函数存根

}publicMyException(String message, Throwable cause) {super(message, cause);//TODO 自动生成的构造函数存根

}public MyException(String message, Throwable cause, boolean enableSuppression, booleanwritableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);//TODO 自动生成的构造函数存根

}

}

我们可以只实现一个构造. 不过我使用的Exception进行继承的.它会自动重写父类的信息.

此时我们就有了一个异常类. 叫做MyException类.

2.创建方法.抛出自定义异常.

我们创建一个类.这个类中创建一个方法.方法里面是处0错误.我们自定义处理.

public classMyTest {publicMyTest() {//TODO 自动生成的构造函数存根

}public static void ExceptionRun()throwsMyException{try{int a = 10;int b = 11;if ((a + b) >= 21) {throw new MyException("数字大了");

}

}catch(MyException a) {

System.out.println(a.toString());

}

}

}

1.我们方法中写了程序. 如果 数字 > 21.我们就抛出异常.如果我们有catch语句接受.则进行输出了. catch语句的类就是我们的异常类. 也可以是它的父类.

2.方法上加了 throws.意思就是说. 如果这个方法出了异常.且catch语句中并没有捕获到.那么就会上层进行异常捕获.也就是说上层需要加上try catch 来使用这个方法.

如果上层不使用. 那么上层函数继续使用throws进行抛出. 如果都没有处理.则Java自动进行处理.直到程序出错.

如下:

71ad817d98bfc7ceb1d5e9d465b530d4.png

我们的上层函数调用位置.并没有使用try catch进行捕获.继续抛出了.

throw: 这个主要用于抛出异常对象.一旦程序遇到throw则代码不会继续执行了.

throws: 用在方法中. 主要是当前方法没有捕获异常.就会抛出.让上一层进行接收.

五丶异常跟错误的区别.

Java中有运行时异常. 我们上面所说的Exception 是所有异常的"父类" 针对的是异常.其实它也是一个子类. 而它的父类派生出了错误类 Error 跟 异常类 (Exception)而已.

流程图:

77efc1e9a2643765f8f71f8356c5938d.png

异常跟错误:

异常指的就是程序出问题了.不过还可以补救.错误就是你代码都写错了.程序都不能运行. 或者这类错误很严重.会直接消耗进系统资源.造成无法挽回的损失.

六丶总结

1.异常的所有父类 Exception接受.

2.异常语法 : try catch(异常类. 引用)  try catch(异常类,异常引用) finally

3.自定义异常继承 Exception即可. 使用throw抛出.

4.throw语句抛出异常引用对象.catch中接受我们的异常. throws用于方法.代表当前方法并没有捕获到异常.传递给上一层进行处理.上一层调用trycatch如果不调用继续throws. thrwos可以抛出多个异常.

5.异常跟错误.

1.异常 exception 非严重性的.

2.错误:: error  严重性的.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值