在我们编写java程序时,我们经常遇到的问题就是:程序老出现问题。这里出现的问题可分为两种:一、程序出现错误(Error);二、程序出现异常(Exception)。程序出现错误,那就是用户的问题,即出现了语法错误,只能自己不断的调试更正。而当一个程序在编译时没有问题,但在运行时可能出现各种各样的错误导致程序退出,这就是异常。本节主要对异常来做个小小的分析。
异常是导致程序中断运行的一种指令流。如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以要在程序的设计中必要的考虑各种各样异常的发生,并正确的做好相应的处理,以确保程序的正常执行。我们分以下几步来说明问题。
一、在程序中使用异常处理
在写程序的时候,如果出现异常,我们必须做相关的处理,在Java中异常处理语句的格式为:
try{
//有可能出现的异常语句
}catch(异常类 异常对象){
//编写异常的处理语句
}[catch(异常类 异常对象){
//编写异常的处理语句
}……]
[finally{
//一定会运行到的程序代码
}]
例如:如下一个简单的程序(除数为0出现的异常)
public class Test {
public static void main(String[] args) {
int i=10;
int j=0;//我们知道当除数为0的时候会出现ArithmeticException异常
try{
int temp=i/j;
System.out.println("两个数字相除的结果为:"+temp);
System.out.println("*****************");
}catch(ArithmeticException e){
System.out.println("出现了异常"+e);
}
}
}
这个时候因为对异常进行了处理,程序就能正确的运行。程序一般会出现多种异常,如果不想进行处理,我们可以在catch语句中写如下代码,调用Exception中的方法,打印异常:
catch(ArithmeticException e){
e.printStackTrace();
}
二、throws和throw关键字
在定义方法时可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,交给方法的调用处进行处理,其使用格式如下:
public 返回值类型 方法名(参数列表……)throws 异常类(){}
为了说明问题,我们看以下代码:
class Math{
public int div(int i,int j)throws Exception{
int temp=i/j;
return temp;
}
}
public class Test {
public static void main(String[] args) {
Math m=new Math();
try{
System.out.println("两个数字相除的结果为:"+m.div(10, 2));
}catch(Exception e){
e.printStackTrace();
}
}
}
在主函数中,不管是否有问题,当调用了div方法时,都要进行异常处理,用try……catch块进行异常的捕获和处理。其实throws是在方法div处定义的,那么我们也可以在主函数中使用throws关键字来处理异常,这样主函数就向上抛出异常,将异常抛给Java虚拟机进行处理。这就好比一个学校,学生有什么事情处理不了,向上报给老师,老师处理不了上报给校长,到校长了也就到头了,那么Java的“头”就是JVM。
与throws不同的是,也可以直接使用throw抛出一个异常,抛出时直接诶抛出异常类的一个实例化对象即可。
public class Test {
public static void main(String[] args) {
try{
throw new Exception("自己抛出的异常!!");
}catch(Exception e){
e.printStackTrace();
}
}
}
上述并不难理解,就是手工抛出异常类得实例化对象。
虽然Java中已经提供了大量的异常类,但是有时这些异常类也很难满足开发者的需求,所以用户可以根据自己的需要定义自己的异常类。只要注意在定义异常类时要继承Exception类。
<!--EndFragment-->
分享到:
相关推荐
通过【NSSetUncaughtExceptionHandler】机制捕获处理app的异常
异常的捕获与处理.关于java技术方面参考。
解决dubbo接口自定义异常的捕捉问题,dubbo消费者可以捕捉到提供者所抛出的自定义异常。
与在Java中一样的,Python中的异常也是一个对象,当程序发生异常时,程序会抛出响应的异常对象,我们需要去捕获这个异常并解决他,防止异常导致程序停止。 这里是一段防爬虫文本,读者请忽略。本文最先由Baldwin_...
在Java中,通过try、catch和finally语句来实现异常捕获与处理: 1. **基础异常捕获**: - 当代码执行过程中出现如除数为零的`ArithmeticException`等错误时,Java会立即转至相应的catch块进行异常处理,如输出错误...
WinForm捕获未处理的异常
ExceptionRecordManager用来将发生且未被捕获的异常保存本地以方便在设备未接入时追踪BUG,也可稍作修改上传服务器。 PermissionManager为单例类,一般在继承Application的自定义类重写onCreate(),调用如下代码: ...
mldn中李新华老师关于Java异常的捕获及处理的课堂记录
在程序开发过程中,主要是捕获Release版异常,并打印出异常的地址,出错行,出错代码,等,哦,好像少不错了个其它异常了,如果需要再给我留言吧
13.1 Python中异常的捕获与处理.mp4
Spring中,使用切面全局捕获异常的同时,进行自定义异常抛出捕获,方便代码书写。
详细介绍了android程序中的全局异常处理,示例代码。
java异常的捕获及处理
Spring Cloud Gateway中的全局异常处理不能直接用@ControllerAdvice来处理,通过跟踪异常信息的抛出,找到对应的源码,自定义一些处理逻辑来符合业务的需求。 网关都是给接口做代理转发的,后端对应的都是REST API,...
本程序主要是演示vb.net全局错误异常消息的捕获处理,程序运行后故意引发错误,并弹出消息处理框,类似于在VB.NET调试器中显示的错误消息,指出错误原因、错误位置和具体代码,方便程序员对错误及时纠正处理,程序...
Android捕获全局异常并写日志保存到sd卡,捕获异常消息后输出这个消息,可避免APP强制退出,抛出NullPointException玩玩哈,捕获全局异常是因为有的异常我们捕获不到,捕获时我们采用同步方法,以免单例多线程环境下...
vb.net全局错误全局异常处理捕获,调用非常简单,再也不用担心意外错误!
android开发,异常处理,捕获异常上传到bugly,捕获异常库module化了。
我们在捕获到异常并对异常进行处理时可能会遇到如下一些问题: 1.不确定应如何处理这些异常 2.需要记录异常日志时没有记录,或者异常在不同的地方重复记录,使得排错调试不方便 3.处理日志时,需要在每一个try-catch...
安卓全局异常处理