一、异常

  异常是指程序在运行过程产生的不正常情况。语法错误不算异常。

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基础(八)异常处理的更多相关文章

  1. Java基础八--构造函数

    Java基础八--构造函数 一.子父类中构造函数的特点 1.1 为什么在子类构造对象时,发现,访问子类构造函数时,父类也运行了呢? 原因是:在子类的构造函数中第一行有一个默认的隐式语句. super( ...

  2. 【Java基础】异常处理

    异常处理 异常概述 在 Java 语言中,将程序执行中发生的不正常情况称为"异常",但是开发过程中的语法错误和逻辑错误不是异常. 在执行过程中所发生的异常事件可分为两类: Erro ...

  3. 黑马程序员——JAVA基础之异常处理机制

    ------- android培训.java培训.期待与您交流! ---------- 异常:就是程序在运行时出现不正常情况. 异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式 ...

  4. 一天一个Java基础——通过异常处理错误

    <Thinking in Java>上对这章的讲解不少,可见重要性,学习和总结一些主要的记录下来. 一.创建自定义异常 package Exception; class SimpleExc ...

  5. Java基础总结--异常处理机制

    ----异常的概述-----1.异常,就是不正常的现象,可能发生在编译期间也可能发生在运行期间2.可能会出现不同的异常,进而在Java中对其描述封装为类--在这些异常类中抽取其共性的东西(异常发生的位 ...

  6. Java基础(四)-异常处理机制及其设计

    本篇主要是记录自己所理解的Java异常处理机制(基于jdk1.7)以及怎么去处理和设计异常.还记得当初学习Java异常这块的时候都没怎么注意它的用途,以为就是简单的处理下异常,我避免程序出现这样错误就 ...

  7. java基础篇---异常处理

    认识异常 异常时导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以在程序的设计中必须考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序 ...

  8. Java基础之异常处理机制

    在Java中,异常分为编译时异常和运行时异常. 编译时异常又叫编译时被监测的异常:在程序编译过程中监测到非运行时异常的异常,出现该异常要么向上抛出,要么捕获处理.运行时异常(runtimeExcept ...

  9. Java基础(八)--String(源码)、StringBuffer、StringBuilder

    String源码:基于jdk1.8 public final class String implements Serializable, Comparable<String>, CharS ...

  10. Java基础教程——异常处理详解

    异常处理 好程序的特性 可重用性 可维护性 可扩展性 鲁棒性 |--|--Robust的音译 |--|--健壮.强壮之意 |--|--指在异常和危险情况下系统依然能运行,不崩溃 Java中,写下如下代 ...

随机推荐

  1. OCP考试最新052题库分析整理-28

    28.Which two are true about external tables? A. They support the ORACLE_DATAPUMP access driver. B. T ...

  2. “全栈2019”Java第五十三章:向上转型和向下转型详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. 重置root密码

    一. ubuntu忘记密码解决方法 1. 开机按shift 2. 选择高级选项,进入后选择恢复模式(不要按回车),按e进入编辑模式 3. 修改linux命令中的recovery nomodest 为 ...

  4. JSR133规范学习

    最近在看多线程相关的东西,通过阅读JSR133的faq来加深自己对多线程的理解,里面大部分的内容比较简单(越到后面越难),但是有的部分比较难以理解还没有完全弄懂,所以这里只记录了一下比较简单的阅读笔记 ...

  5. <转>jmeter JDBC Request之Query Type

    本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...

  6. Run Faster-JAVA

    又好久没有写点啥了,平时都忙于工作,忙于应付工作中的问题,各种吸收却并没有好好的消化,该是"反刍"一下的时候了. 本篇名叫"Run Faster,JAVA",其 ...

  7. iOS开发之像素Compositing

    假如Layer S·在Layer D上面,则最终的屏幕的颜色值如下: \[R = S + D \cdot (1- S_\alpha)\] \(R\): 最终的RGB \(S\): source col ...

  8. 海思hi35xx 开发学习(1):海思媒体处理平台架构

    处理平台架构图: 主要分为: 视频输入(VI):VI 模块捕获视频图像,可对其做剪切.去噪等处理,并输出多路不同分辨率的图像数据. 视频处理(VPSS):VPSS 模块接收 VI 和解码模块发送过来的 ...

  9. 04day->python列表和元祖

    一.列表 1.索引.切片     索引:根据索引值获取,里表里的值     切片:和字符串相似 2.增     1)append(object),在列表的末端添加     2)insert(index ...

  10. 高阶篇:4.1.2.3)产品零件级别的QFDII

    本章目的:介绍产品零件级别的QFDII编写方法. 1.前言 这章接前面部件级别的QFDII. 产品零件级别的QFDII,其实就是将零件QFDII所得到的设计要求,进一步分配零件的特征(Part Cha ...