讲一讲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恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...
随机推荐
- 机房-动环-江森ODS系统
优势: 标准的BACnet系统平台 开放的集成特性 支持Desktop and Server平台 支持多达100个NxE 支持无线应用,可以手机访问 DCIM---数据中心基础架构管理平台介绍 不同于 ...
- tableView计算动态行高的总结
研究tableView怎么计算动态行高研究了两天一直还不太会,今天最终做出来了想要的效果. 首先.我在网上搜集了非常多资料,各种大神的总结,然后開始看.研究.试验,基本思路都是一样的. 1.一定要将l ...
- leetcode dfs Palindrome Partitioning
Palindrome Partitioning Total Accepted: 21056 Total Submissions: 81036My Submissions Given a string ...
- 使用rsync同步数据(by quqi99)
作者:张华 发表于:2015-12-28版权声明:能够随意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 急需使 ...
- 怎样避免使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK之后的黑屏问题
在自己的项目中.我须要使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK来開始新的activity同一时候移除之前全部的 ...
- nginx报 File not found 错误
原因可能非常多,但对于刚開始学习的人.大部分应该是/etc/nginx/conf.d/default.conf里面的php解析部分配置不正确. 解决的话就是把root定义.在server下加上,这样r ...
- 数据格式与数据类型(Content-Type)
常见数据类型: 文本文件: 二进制文件: 编码后的图像文件: jpeg png 网络中爬取的数据: 1. Content-Type Media Types Type text text/css tex ...
- python之路——装饰器函数
阅读目录 楔子 装饰器的形成过程 开放封闭原则 谈装饰器主要功能和装饰器固定结构 带参数的装饰器 多个装饰器装饰一个函数 返回顶部 楔子 作为一个会写函数的python开发,我们从今天开始要去公司上班 ...
- Centos7 minimal 系列之rabbitmq的理解(九)
一.前言 传送门:rabbitmq安装 第一次接触消息队列,有很多不熟悉的地方,可能也有很多写的不对的,大家一起学习. RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统. 使用场景: ...
- windows中安装redis的phpredis扩展
1. 下载php的redis扩展 打开网址 http://pecl.php.net/ (php的扩展库官网),搜索redis,进入地址:http://pecl.php.net/package/redi ...