JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别
JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别
不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间过得很快,转眼一个月就这样过去了,我们不多说,继续我们的JAVA之旅
一.异常的概述
异常算是程序中一个比较重要的环节了,我们首先来看一下异常的体系,我们举一个小例子,定义一个除法方法
//公共的 类 类名
public class HelloJJAVA {
// 公共的 静态 无返回值 main方法 数组
public static void main(String[] str) {
Demo d = new Demo();
System.out.println(d.div(6, 2));
}
}
class Demo {
/**
* 定义一个除法
*
* @param a
* @param b
* @return
*/
int div(int a, int b) {
return a / b;
}
}
这段程序很好理解吧,就是除嘛,传6和2进去,的出来的结果肯定是3呀,但是,我现在传一个4和0,那输出的结果又会是什么呢?
OK,异常出现了
- 异常:就是程序在运行时出现的不正常情况
异常的由来
问题也是现实生活中一个具体的事物,也可以通过JAVA的类的形式进行描述,并封装成对象,其实就是JAVA对不正常情况进行描述后的对象体现
对于问题的划分,分为两种,一种是严重问题,一种是非严重问题,对于严重的问题JAVA通过ERROR类描述,非严重的,用Exception类来进行描述
对于ERROR,一般不编写针对性的代码进行描述
- 对于Exception可以通过正对性的处理方式进行处理
无论ERROR还是Exception,都具备一些共性的内容,比如:不正常情况的信息,引发原因等
- Throwable
- Error
- Exception
Error的错误很多,你基本上很多都可以根据名字追到是什么错误
但是我们今天不讲Error,我们看的是异常
二.Try-Catch
Try-Catch就是抛出异常,也就是异常的处理
try {
//需要被检测的代码
} catch (Exception e) {
// 处理异常的代码(处理方式)
}
既然知道了处理方式,那我们就可以针对上面的异常进行处理了
//公共的 类 类名
public class HelloJJAVA {
// 公共的 静态 无返回值 main方法 数组
public static void main(String[] str) {
Demo d = new Demo();
try {
System.out.println(d.div(4, 2));
} catch (Exception e) {
System.out.println("异常");
}
}
}
class Demo {
/**
* 定义一个除法
*
* @param a
* @param b
* @return
*/
int div(int a, int b) {
return a / b;
}
}
对捕获的异常对象进项常见的处理方法
- getMessage() 错误信息
- toString() 转换成string的异常信息
- printStackTrace 打印内存中的跟踪信息
三.异常声明Throws
我们不确定这段代码有没有问题,那我们就得去标识,怎么标识?Throws
/**
* 定义一个除法
*
* @param a
* @param b
* @return
*/
int div(int a, int b) throws Exception{
return a / b;
}
在功能上通过throws的关键字来声明了该功能有可能会出现问题,所以我们使用的时候就会有提示;
你不处理我就不让你用,提高了安全性
三.多异常处理
对多异常的处理方式是怎么样的呢?
- 1.声明异常时,建议声明更为具体的异常,这样处理的可以更加具体
- 2对方声明几个异常,就对应有几个catch块,如果多个catch块中的异常出现继承关系,父类异常catch放在最下面,不要定义多余的catch块
- 3.建议在进行catch处理时,catch钟一定要定义具体处理方式,不要简单的定义一句显示格式
标准格式
try {
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NullPointerException e) {
}
也就是多catch
四.自定义异常
我们知道,异常分很多种,我们也可以自定义异常,也就是自己定义一些规则,因为项目中会出现一些特有的异常,而这些问题并未被JAV封装成异常,针对这些问题,我们可以按照JAVA对问题封装的思想,将特有的问题进行自定义的异常封装
如何去自定义异常?
需求,在本程序中,对于出书是-1?也视为是错误的,是无法进行运算的,那么就需要对这个问题进行自定义的描述
当在函数内部出现throw抛出异常对象,那么必须要给对应的处理动作
要么在函数上声明让调用者处理
throw关键字自定义异常,一般情况下,函数内出现异常,却没有需要声明,发现打印的就黑锅只有异常的名称,却没有信息,因为自定义的异常并未定义的信息
如何定义异常信息
//公共的 类 类名
public class HelloJJAVA {
// 公共的 静态 无返回值 main方法 数组
public static void main(String[] str) {
Demo d = new Demo();
try {
d.dev(4, -1);
} catch (FushuException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 负数异常
*
* @author LGL
*
*/
class FushuException extends Exception {
private String msg;
public FushuException(String msg) {
this.msg = msg;
}
@Override
public String getMessage() {
// TODO Auto-generated method stub
return msg;
}
}
class Demo {
int dev(int a, int b) throws FushuException {
if (b < 0) {
// 手动通过throw关键字抛出自定义异常对象
throw new FushuException("出现了除数是负数的异常");
}
return a / b;
}
}
这段代码挺好玩的
但是其实我们有一点是不知道的,这个其实父类已经完成了,所以子类只要构造时,将构造信息传递给父类就行了,用super,那么就可以直接通过getMessage()方法来获取自定义的异常信息了
/**
* 负数异常
*
* @author LGL
*
*/
class FushuException extends Exception {
private String msg;
public FushuException(String msg) {
super(msg);
}
}
五.Throw和Throws的区别
我们来一个小插曲,就是异常的两个类的区别
Throw和Throws的区别
- 1.Throws使用在函数上,Throw使用在函数内
- 2.Throws后面跟异常类,可以跟多个,用逗号区别,Throw后面跟的是异常对象
OK,我们本篇幅就先到这里,异常的内容还是有很多的,不出意外我们下篇还是讲异常,大家感兴趣的话,可以加群:555974449
JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别的更多相关文章
- java异常处理的throw和throws的区别
1. 区别 throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理.而throw则是指抛出的一个具体的异常类型. 2.分别介绍 ...
- Java从零开始学十九(异常)
一.什么是异常 从字面上讲,就是不正常的现实就是异常. 程序中的异常也是要在程序运行中才会偶尔发生.如果程序还没有运行,编译就报错,这种不叫异常,这种叫编译错误,通常是语法上的错误 二.java中异常 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- Java throw与throws
以前虽然知道一些异常的处理,也用过一些,但是对throw和throws区别还是有不太清楚.今天用实例测试一下. 异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被卡死,处于一直等 ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
- JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤
JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...
- JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习
JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中 ...
- JAVA之旅(十一)——RuntimeException,异常的总结,Package,jar包,多线程概述
JAVA之旅(十一)--RuntimeException,异常的总结,Package,jar包,多程序概述 继续JAVA之旅 一.RuntimeException 在Exception种有一个特殊的子 ...
- JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!
JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...
随机推荐
- SpringMVC之简单的增删改查示例(SSM整合)
本篇文章主要介绍了SpringMVC之简单的增删改查示例(SSM整合),这个例子是基于SpringMVC+Spring+Mybatis实现的.有兴趣的可以了解一下. 虽然已经在做关于SpringMVC ...
- JAVA反射之Class类的练习
package zhang; /** * JAVA反射之CLass类的练习 * * 在面向对象的语言里,万事万物皆对象,那么类是谁的对象呢? * 类的类型是CLass * * */ class Tes ...
- RedHatEnterpriseLinuxServerRelease7.3上配置vsftp服务器
1.vsftpd 服务启停相关命令 systemctl start vsftpd systemctl stop vsftpd systemctl restart vsftpd 2.配置文件/etc/v ...
- [JCIP笔记](五)JDK并发包
这一节来讲一讲java.util.concurrent这个包里的一些重要的线程安全有关类. synchronized容器 synchronized容器就是把自己的内部状态封装起来,通过把每一个publ ...
- ACM Robot Motion
机器人已被编程为按照其指令中的路径进行操作.机器人要移动的下一个方向的指令放在网格中.可能的指令是 N north (up the page) S south (down the page) E ...
- 实例演示如何在spring4.2.2中集成hibernate5.0.2并创建sessionFactory
本文地址:http://blog.csdn.net/sushengmiyan/article/details/49388209 文章作者:苏生米沿 本文目的:使用spring4.2.2集成hibern ...
- 【伯乐在线】这些 Git 技能够你用一年了
原文出处: Pyper 欢迎分享原创到伯乐头条 用git有一年了,下面是我这一年来的git使用总结,覆盖了日常使用中绝大多数的场景.嗯,至少是够用一年了,整理出来分享给大家,不明白的地方可以回复交 ...
- Excel下拉框多列显示,如何只显示一列
小编最近接手一个项目,之于需要导数据,但是我们需要提前把表头什么的设置好,更方便其他小伙伴们帮助我们导入数据,小伙伴们都知道,在excel中设置下拉菜单很简单,直接用数据有效性-序列就可以实现,今天小 ...
- [OpenCV] GpuMat and Mat, compare cvtColor perforemence
Introduction I am going to measure the performence of my two GT650M and compare GPU with CPU version ...
- 让sublime总是在新选项卡打开新文件
sublime的一个默认设置让人很不爽,比如现在选项卡里面已经打开了一个文件A,当你从左边side bar里面点击一个新文件B时,如果你不是快速的双击,且A没有处于编辑未保存状态,那么B就会覆盖A的选 ...