一、异常

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

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. code::blocks学习

    code::block不能调试问题 今天在codeblock不能进行调试,百度总结如下: 1 进行调试的必须是一个project而不能是一个单一的cpp文件. 2 project的路径不能包含中文,尽 ...

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

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

  3. SP16580 QTREE7 - Query on a tree VII(LCT)

    题意翻译 一棵树,每个点初始有个点权和颜色(输入会给你) 0 u:询问所有u,v路径上的最大点权,要满足u,v路径上所有点颜色相同 1 u:反转u的颜色 2 u w:把u的点权改成w 题解 Qtree ...

  4. rsync文件同步详解

    一.  环境和测试说明 rsync(remote sync)是unix及类unix平台下的数据镜像备份软件,它不像FTP那样需要全备份,rsync可以根据数据的变化进行差异备份,从而减少数据流量,提高 ...

  5. myeclipse部署项目到tomcat-custom_location 方式

    在想要部署的路径下:1.新建一个在tomcat--->server.xml文件夹下设置的文件名 2.在新建的文件夹下新建一个  ROOT文件夹, 3.在myeclipse里面吧项目部署到 ROO ...

  6. Git远程库

    要关联一个远程主机,使用命令 git remote add origin <url> : 删除远程主机,使用命令 git remote rm origin ; git push 的一般形式 ...

  7. 基于iTop4412的FM收音机系统设计(一)

    说明:第一版架构为:APP+JNI(NDK)+Driver(linux),优点是开发简单,周期短,也作为自己的毕业设计 现在更新第二版,FM服务完全植入Android系统中,成为系统服务,架构为:AP ...

  8. SQL多字段排序

    emm 其实也没什么 就是写sql查询的时候 要对多个字段排序比如  查询原本的数据是 年份 科目 批次 2014 理科 本二2015 理科 本二 2015 理科 本一2016 理科 本二 2016 ...

  9. dedicated bearer

    Session Initiation Protocol (SIP) Basic Call Flow ExamplesRFC3665 intuitive,   done. PDF] TS 123 401 ...

  10. 通过shell处理多行数据

    ### 源文件 cat > tmpb <<'EOF' dbname:db_a,start_time::: query_end_time:::,query_total_time:,da ...