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中,写下如下代 ...
随机推荐
- awk常用用法
一. 基本使用方法: awk '{pattern + action}' filenames #其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列 ...
- Oracle中对多行查询结果进行拼接
to_char(wmsys.wm_concat(to_char( st.col_name))) as new_name to_char: 将当前值转换成字符串类型; wmsys.wm_concat:拼 ...
- Eclipse MarketPlace 打不开,对话框闪退
原文地址: https://blog.csdn.net/wonder_boy869/article/details/81031222 Eclipse的版本更新到了4.8.0(photon版),点击he ...
- ModuleNotFoundError: No module named 'Crypto'
pycrypto已经舍弃了使用pycryptodome,pip uninstall pycrypto,然后安装pycryptodome,pip install pycryptodome 可能还需要改名 ...
- HihoCoder - 1513 bitset处理五维偏序
题意:给出\(n<3e4\)个有序组\((a,b,c,d,e)\),求对第\(i\)个有序组有多少个\(j\)满足\((a_j<a_i,b_j<b_i,c_j<c_i,d_j& ...
- 彻底成功配置Maven和Eclipse集成
这篇文章是分享给还在苦苦挣扎eclipse和Maven环境配置的同志,让其少走弯路,话不多说,直接开始吧 环境出问题一是配置没有配置好,二是各个部分可能出现兼容问题,导致错误,综上,我选择了一个切实可 ...
- EXTJS文档地址
文档地址:http://docs.sencha.com/extjs/4.2.3/#!/api/Ext.form.field.Field-event-change
- Celery ValueError: not enough values to unpack (expected 3, got 0)的解决方案
Celery ValueError: not enough values to unpack (expected 3, got 0)的解决方案 背景 最近因项目需要,学习任务队列Celery的用法,跟 ...
- tomcat各文件夹及作用
1.bin目录:这个文件夹包含的是启动/关闭tomcat的脚本 2.conf目录:主要是用来存放一些Tomcat的配置文件,都是一些.xml部署文件,其中重要的有: server.xml:是Tomca ...
- 小y的质数
题目链接:https://ac.nowcoder.com/acm/contest/634/C 链接:https://ac.nowcoder.com/acm/contest/634/C来源:牛客网 题目 ...