Java基础(八)异常处理
一、异常
异常是指程序在运行过程产生的不正常情况。语法错误不算异常。
1、异常体系
Throwable:Java语言中所有错误或异常的超类;Throwable 类的子类有两个:1、Error;2、Exception。
1、所有的异常类都是 java.lang.Exception 的子类,Exception相对来说,可以控制,可以处理。
2、Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。例如:JVM 内存溢出。
3、Error 用来指示运行时环境发生的错误。
4、通过看子类是Exception结尾还是Error结尾,来判断是Exception体系还是Error体系。

异常分类
运行时异常:RuntimeException 以及它子类的类型。
如果没有处理(抛出或者try-catch),编译不会报错。
非运行时异常:Exception 以及它的子类,但是除去RuntimeException和它的子类。
如果没有处理(抛出或者try-catch),编译的时候报错。
2、异常处理
异常处理有两种方式:
1、自己处理try -catch
写在可能发生异常代码的地方,如果出现异常,产生异常,就会被捕捉到,捕捉的异常信息放到异常类型的变量里面去;这样就可以进行处理这个异常。
如果没有异常出现,就不捕捉,就往下面继续执行走。
语法结构:
try{
//可能出现异常
}catch(异常类型 变量名){
//处理异常代码
}
处理异常代码:
1、把错误提示给用户。直接调用 printStackTract方法就打印异常信息。
2、把异常信息,保存到日志文件,便于查看。
2、自己不处理,向外抛出
抛出到JVM,还可能在实际开发过程,遇到方法调用方法,调用很多层,那种抛出,就像上一层调用者进行抛出。
throws 和 throw的区别:
throws 表示向外抛出异常,位置:方法的(){}之间,特点:后面跟多个异常。
throw 产生一个异常对象,位置:方法里面。特点: 后面跟一个异常对象,相等于return的效果。
public class ThrowsDemo {
/**
* 计算两个整数相除
* @param a
* @param b
* @throws Exception
*/
public void div(int a, int b) throws Exception { // 抛出异常
System.out.println(a / b);
}
/**
* 测试div
*/
@Test
public void testDiv() throws Exception {
div(1, 0); //打印异常:java.lang.ArithmeticException: / by zero
}
}
3、多异常处理
语句结构:
try{
//可能出现异常的代码。。。
}catch(异常类型 变量名){
// 处理异常的代码
}catch(异常类型 变量名){
// 处理异常的代码
}catch(异常类型 变量名){
// 处理异常的代码
}
3、异常finally语句
除了上面两种扑捉异常结构以外,还有其他的结构,可以在最后面添加一个finally
语法结构:
try{
//可能出现异常的代码
}catch(异常类型 e){
//处理异常:
//1 打印到控制台
//2 保存到文件
//3 还可能向外抛出新的异常
}finally{
}
finally单词什么含义,表示最终的意思。
1、关闭流资源或者释放锁--线程。
2、如果在finally前面没有执行系统退出(system.exit(0))的语句,此处的代码始终都会执行。
3、不要在此处放return语句来返回一个数据。
public class ExceptionTest {
/**
* 测试出现异常时,程序的执行顺序
*/
@Test
public void test1(){
try {
System.out.println("------执行1------");
System.out.println("------执行2------");
System.out.println("------num------" + (1/0)); //出现异常之后,不执行后面代码,即不打印------执行3------
System.out.println("------执行3------");
} catch ( ArithmeticException e) {
System.out.println("------catch1------");
System.out.println("------catch2------");
e.printStackTrace(); //打印异常信息 java.lang.ArithmeticException: / by zero
System.out.println("------catch3------");
} finally { //不管是否有异常都要执行
System.out.println("------finally1------");
System.out.println("------finally2------");
System.out.println("------finally3------");
}
}
}
4、自定义异常
创建了一个异常类,需要模拟产生自定义异常的场景:
1、自定义一个异常类型,需要创建一个类继承Exception或者RuntimeException,覆写里面的两个构造方法。
2、模拟一种场景,创建一种自定义异常的对象,通过throw创建异常对象。
3、使用上面场景,抛出或者处理
1、自定义一个异常类型。
/**
* 自己定义异常对象
*/
public class LoginUserException extends RuntimeException{
public LoginUserException() { //覆写构造方法
super();
} public LoginUserException(String message) { //覆写构造方法
super(message);
}
}
2、使用throw产生异常对象LoginUserException。
public class LoginUserTest {
public String checkLogin(String username, String password){
if (!(Objects.equals(username, "user"))){
System.out.println("------执行1------");
System.out.println("------执行2------");
System.out.println("------执行3------");
throw new LoginUserException("name is wrong"); //自定义异常信息,throw的用法,产生一个异常对象LoginUserException
}
return "返回结果";
}
}
3、测试异常:
public class ExceptionTest {
/**
* 测试自定义异常
*/
@Test
public void testCheckLogin(){
LoginUserTest loginUserTest = new LoginUserTest();
String s = loginUserTest.checkLogin("user1", "");
System.out.println("----s:" + s); //打印异常:exception.LoginUserException: name is wrong
}
}
Java基础(八)异常处理的更多相关文章
- Java基础八--构造函数
Java基础八--构造函数 一.子父类中构造函数的特点 1.1 为什么在子类构造对象时,发现,访问子类构造函数时,父类也运行了呢? 原因是:在子类的构造函数中第一行有一个默认的隐式语句. super( ...
- 【Java基础】异常处理
异常处理 异常概述 在 Java 语言中,将程序执行中发生的不正常情况称为"异常",但是开发过程中的语法错误和逻辑错误不是异常. 在执行过程中所发生的异常事件可分为两类: Erro ...
- 黑马程序员——JAVA基础之异常处理机制
------- android培训.java培训.期待与您交流! ---------- 异常:就是程序在运行时出现不正常情况. 异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式 ...
- 一天一个Java基础——通过异常处理错误
<Thinking in Java>上对这章的讲解不少,可见重要性,学习和总结一些主要的记录下来. 一.创建自定义异常 package Exception; class SimpleExc ...
- Java基础总结--异常处理机制
----异常的概述-----1.异常,就是不正常的现象,可能发生在编译期间也可能发生在运行期间2.可能会出现不同的异常,进而在Java中对其描述封装为类--在这些异常类中抽取其共性的东西(异常发生的位 ...
- Java基础(四)-异常处理机制及其设计
本篇主要是记录自己所理解的Java异常处理机制(基于jdk1.7)以及怎么去处理和设计异常.还记得当初学习Java异常这块的时候都没怎么注意它的用途,以为就是简单的处理下异常,我避免程序出现这样错误就 ...
- java基础篇---异常处理
认识异常 异常时导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以在程序的设计中必须考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序 ...
- Java基础之异常处理机制
在Java中,异常分为编译时异常和运行时异常. 编译时异常又叫编译时被监测的异常:在程序编译过程中监测到非运行时异常的异常,出现该异常要么向上抛出,要么捕获处理.运行时异常(runtimeExcept ...
- Java基础(八)--String(源码)、StringBuffer、StringBuilder
String源码:基于jdk1.8 public final class String implements Serializable, Comparable<String>, CharS ...
- Java基础教程——异常处理详解
异常处理 好程序的特性 可重用性 可维护性 可扩展性 鲁棒性 |--|--Robust的音译 |--|--健壮.强壮之意 |--|--指在异常和危险情况下系统依然能运行,不崩溃 Java中,写下如下代 ...
随机推荐
- kvm虚拟机静态迁移
1.静态迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移. (1)虚拟主机各自使用本地存储存放虚拟机磁盘文件 本文实现基于本地磁盘存储虚拟机磁盘文件的迁移方式, ...
- fdisk 磁盘分区
.[root@test4 ~]# fdisk /dev/sda //对sda磁盘进行分区 Device contains neither a valid DOS partition table, no ...
- zTree第五章,zTree的nodes数据例子
var nodes1 = [ { name: "小学", iconOpen: folderOpen, iconClose: folder, chkDisabled :true, c ...
- 搭建sftp并设置不同权限的多个用户
一, 设置相关用户,用户组,ssh配置文件 mkdir -pv /opt/ftpsite/{admin,user1,user2} groupadd sftpadmins groupadd sftpus ...
- 977 AlvinZH过生日(背包DP大作战S)
977 AlvinZH过生日 思路 难题.逆推DP. 要明确dp的状态只与是否有选择权有关,而与选择权在谁手里无关.因为不论选择权在谁手里,那个人都会尽可能的获得最大的蛋糕重量. dp[i]表示分配到 ...
- xcode - iPhone Debugging: How to resolve 'failed to get the task for process'? - Stack Overflow
The program being debugged is not being run. Everyone sees this once in a while during Xcode develop ...
- 微信小程序通过background-image设置背景图片
微信小程序通过background-image设置背景:只支持线上图片和base64图片,不支持本地图片:base64图片设置步骤如下:1.在网站http://imgbase64.duoshitong ...
- nginx如何设置禁止访问文件或文件夹
目标: 1. 根目录 webroot: 2. 设置目标文件 /webroot/proj/deny.txt 不能访问: 做法: 1. 设置 nginx.conf ,添加一个“location”段落: 2 ...
- 【Alpha】Scrum Meeting 0&1
前言 第0次会议和第1次会议分别在4月1日和4月2日21:00由PM在大运村一公寓3层召开. 第0次时长50min,主要明确了接下来的任务,对工作进行了分配. 第1次会议时长20min,调研了当日工作 ...
- 命令提示符下的WQL
WQL就是英文WMI Query Language的缩写,就是说wmic这个命令支持简单的一些SQL查询,我们以实例来讲解他的部分用法,这个命令过于强大,因此以下只是该命令的冰山一角. 列出本地连接的 ...