讲一讲java异常及自定义异常
1.异常,说白了。两种,一种就是就是不能让代码通过编译的异常。另一种就是程序运行期间出现的异常。
异常就是错误,只要出现异常,程序就不会向下运行了。就不会执行后面的代码了。
这时候就可以通过显示statcktrace堆栈信息的瞬间信息,知道错误发生在什么地方,及报的什么错。
所以我们要在代码捕获异常的地方catch地方,用log打印记录下来stacktrace信息。
2.为什么对异常要进行try catch捕获?
try catch捕获异常的目的是,当异常发生时,能够继续向下执行我们的程序(即使是runtime异常),而不是程序挂掉(不捕获异常时,就会立即挂掉程序)。
将异常进行捕获的目的是,使程序不挂掉。可以向下执行。
在捕获的地方catch分句处,打印出try代码块出错的堆栈信息,然后程序代码继续向下执行。
try {
int i = 1 / 0;
} catch (Exception e) {
System.out.println("异常发生了,,不知道还能向下运行否。。。。");
e.printStackTrace();
}
logger.info("execute finished");
System.out.println("啦啦啦啦 ");
输出结果:
异常发生了,,不知道还能向下运行否。。。。
java.lang.ArithmeticException: / by zero
at APPMain.main(APPMain.java:111)
execute finished
啦啦啦
总结:所以程序继续向下运行了,这样就能达到,异常的产生并不会使程序挂掉。而使程序能继续执行。
3.输出那些异常具体信息,是通过e.printStackTrace();这个方法的,如果去掉这个方法,就不会再控制台中显示java.lang.ArithmeticException: / by zero
at APPMain.main(APPMain.java:111)这种错误提示了。
1)异常捕获的catch代码块中,直接调用e.printStackTrace(),会在控制台直接打印出来异常的信息。
2)若产生异常时,不进行e.printStackTrace(),而是在日志输出时打印e.printStackTrace()。就会将java.lang.ArithmeticException: / by zero
at APPMain.main(APPMain.java:111)这种错误提示输出到error.log文件中,就不会再控制台显示了,控制台就当做没有任何异常产生了,不会报任何错误信息,即使有异常产生。
3)e.printStackTrace()才是打印错误提示的关键。
3.hashmap是可以转换为string的,hmap可以进行日志打印。hashmap有hashmap.toString()方法。
二。自定义异常
1.自定义异常是要自己爆出来的,因为自定义异常是业务异常,只有程序员自己知道什么情况下才会发生自定义异常。所以就需要自己手动代码if判断,值不对的时候,就
throw抛出来。然后可以自己catch捕获或者在调用这段异常代码的地方捕获,catch捕获,打印具体的异常信息,也就是自定义异常的对象。
/*下面做了归纳总结,欢迎批评指正*/
/*自定义异常*/
class ChushulingException extends Exception
{
public ChushulingException(String msg)
{
super(msg);
}
}
class ChushufuException extends Exception
{
public ChushufuException(String msg)
{
super(msg);
}
}
/*自定义异常 End*/
class Numbertest
{
public int shang(int x,int y) throws ChushulingException,ChushufuException
{
if(y<0)
{
throw new ChushufuException("您输入的是"+y+",规定除数不能为负数!");//抛出异常
}
if(y==0)
{
throw new ChushulingException("您输入的是"+y+",除数不能为0!");
}
int m=x/y;
return m;
}
}
class Rt001
{
public static void main(String[]args)
{
Numbertest n=new Numbertest();
//捕获异常
try
{
System.out.println("商="+n.shang(1,-3));
}
catch(ChushulingException yc)
{
System.out.println(yc.getMessage());
yc.printStackTrace();
}
catch(ChushufuException yx)
{
System.out.println(yx.getMessage());
yx.printStackTrace();
}
catch(Exception y)
{
System.out.println(y.getMessage());
y.printStackTrace();
}
finally{ System.out.println("finally!");} ////finally不管发没发生异常都会被执行
}
}
/*
[总结]
1.自定义异常:
class 异常类名 extends Exception
{
public 异常类名(String msg)
{
super(msg);
}
}
2.标识可能抛出的异常:
throws 异常类名1,异常类名2
3.捕获异常:
try{}
catch(异常类名 y){}
catch(异常类名 y){}
4.方法解释
getMessage() //输出异常的信息
printStackTrace() //输出导致异常更为详细的信息
本文“自定义异常”部分的内容转自http://blog.csdn.net/stellaah/article/details/6738424 感谢作者
讲一讲java异常及自定义异常的更多相关文章
- Java异常之自定义异常
哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...
- Java异常02——自定义异常
Error与Exception与自定义异常 Error与Exception Error Exception 自定义异常 快捷键: ctrl + alt + t package exception.d ...
- Java异常机制,自定义异常以及spring boot异常设计方案
异常机制: 异常概念 异常分类 异常的处理方法 自定义异常 springboot 的异常解决方案
- JAVA经典面试题:讲一讲JVM的组成
JVM(Java 虚拟机)算是面试必问的问题的了,而但凡问 JVM 一定会问的第一个问题就是:讲一讲 JVM 的组成?那本文就注重讲一下 JVM 的组成. 首先来说 JVM 的组成分为,整体组成部分和 ...
- 异常处理第一讲(SEH),筛选器异常,以及__asm的扩展,寄存器注入简介
异常处理第一讲(SSH),筛选器异常,以及__asm的扩展 博客园IBinary原创 博客连接:http://www.cnblogs.com/iBinary/ 转载请注明出处,谢谢 一丶__Asm的 ...
- “全栈2019”Java异常第二十章:自定义异常详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- java——异常类、异常捕获、finally、异常抛出、自定义异常
编译错误:由于编写程序不符合程序的语法规定而导致的语法问题. 运行错误:能够顺利的编译通过,但是在程序运行过程中产生的错误. java异常类都是由Throwable类派生而来的,派生出来的两个分支分别 ...
- 牛客网Java刷题知识点之什么是异常、异常处理的原理是什么、为什么要使用异常、异常体系、运行时异常、普通异常、自定义异常、异常链
不多说,直接上干货! 在这个世界不可能存在完美的东西,不管完美的思维有多么缜密,细心,我们都不可能考虑所有的因素,这就是所谓的智者千虑必有一失.同样的道理,计算机的世界也是不完美的,异常情况随时都会发 ...
- 全面理解Java异常的运行机制
1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...
随机推荐
- BA-siemens-apogee-ppcl
adapts函数的使用 常规控制风机及阀门的程序是使用PID来调节,但是自适应算法能更好的调节. 西门子的自适应调节函数adapts用法如下: 以下文章为网络转载,原文链接地址http://news. ...
- cogs 1143. [石门中学2009] 切割树
1143. [石门中学2009] 切割树 ★ 输入文件:treecut.in 输出文件:treecut.out 简单对比时间限制:1 s 内存限制:128 MB treecut 题目描 ...
- Android之怎样给ListView加入过滤器
给ListView加入文字过滤器: //this.getListView().setTextFilterEnabled(true);//可能报错用以下的 listView.setTextFilterE ...
- 假设让我又一次设计一款Android App
转载请注明出处: 本文来自aspook的博客:http://blog.csdn.net/ahence/article/details/47154419 开发工具的选择 开发工具我将选用Android ...
- NYOJ 145 聪明的小珂
/* 题目大意:求解和输入数的互质的数 解题思路:求解和 n 互质的最大数.从n/2開始找 关键点:GCD函数的使用 解题人:lingnichong 解题时间:2014-10-04 16:11:55 ...
- js面向对象编程:怎样实现方法重载
js中怎样实现方法重载?这涉及到三个问题 1同名函数的调用问题 2函数中特殊的參数arguments 3怎样利用arguments实现方法重载 1同名函数的调用问题 都知道在js中假设存在多个名称同样 ...
- QT 随笔
1. 设置窗体属性,无边框 | 置顶 setWindowFlags(Qt::FramelessWindowHint); setWindowFlags(Qt::FramelessWindowHin ...
- awesome-free-software
Free software is distributed under terms that allow users to run the program for any purpose, study ...
- lightoj--1294--Positive Negative Sign(水题,规律)
Positive Negative Sign Time Limit: 2000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu ...
- Oracle RAC 全局等待事件 gc current block busy 和 gc cr multi block request 说明--转载(http://blog.csdn.net/tianlesoftware/article/details/7777511)
一.RAC 全局等待事件说明 在RAC环境中,和全局调整缓存相关的最常见的等待事件是global cache cr request,global cache busy和equeue. 当一个进程访问需 ...