zoukankan      html  css  js  c++  java
  • JAVA总结之异常

    问题描述:

      异常,是Java必须懂的知识点,今天总结了一下。异常可以分为:

        1.捕获异常try{可能出现异常的代码}:当try出现异常时,try语句块异常行之后代码将不执行,直接跳转到catch

        2.处理异常catch{根据try语句块中出现异常,JVM将查找相应的第一个匹配catch语句}

        3.抛出异常throw new Exception(String str):之后的代码将全部不执行,直接跳出方法。

        4.finally不管是return,break,throw new Excetion都会执行。

      异常几个属性和常用对应的方法:

        1.String message;出现异常的信息,getMessage();

        2.StackTraceElement[] StackTrace;异常栈跟踪,引发异常的所有方法调用记录。常用printStackTrace()

        3.Throwable cause;产生异常的原因,getCause();

      异常注意点:

        1.由于try语句需要JVM一直监控,会非常消耗资源,降低系统的效率,所以尽量减少try语句块的代码量;

        2.如果某个方法抛出异常,则调用这个方法的方法需要捕获异常

    测试代码:

     1 package com.test;
     2 
     3 public class ExceptionTest {
     4 
     5     /**
     6      * 异常总结
     7      */
     8     public static void main(String[] args) {
     9         // TODO Auto-generated method stub
    10         try {
    11             testThrowException();
    12         } catch (Exception e) {
    13             // TODO Auto-generated catch block
    14             e.printStackTrace();
    15         }
    16     }
    17     
    18     public static void testThrowException() throws Exception{
    19         //由于抛出异常,所以调用这个方法的方法要抛异常
    20         int flag = 1;
    21         try{
    22             flag = 2;
    23             flag = 3/0;
    24             System.out.println("testThrowException.try.flag = " + flag);
    25         }catch(Exception e){
    26             System.out.println("testThrowException.catch.flag = " + flag);
    27             System.out.println("e.getMessage() : " + e.getMessage());
    28             System.out.println("e.getCause() : " + e.getCause());
    29             e.printStackTrace();
    30             throw new Exception("testThrowException()异常," + e.getMessage());
    31         }finally{
    32             System.out.println("这个是不管怎样都执行的finally;");
    33         }
    34         System.out.println("testThrowException.flag = " + flag);
    35     }
    36 }

    控制台输出:

    testThrowException.catch.flag = 2
    e.getMessage() : / by zero
    e.getCause() : null
    java.lang.ArithmeticException: / by zero
        at com.test.ExceptionTest.testThrowException(ExceptionTest.java:23)
        at com.test.ExceptionTest.main(ExceptionTest.java:11)
    这个是不管怎样都执行的finally;
    java.lang.Exception: testThrowException()异常,/ by zero
        at com.test.ExceptionTest.testThrowException(ExceptionTest.java:30)
        at com.test.ExceptionTest.main(ExceptionTest.java:11)
  • 相关阅读:
    http协议介绍
    使用Bind提供域名解析服务
    .bash_profile和.bashrc的区别
    SNAT和DNAT
    9.Iptables与Firewalld防火墙
    ubuntu18.04.3新装系统安装QT5.14.1和环境配置
    【Navicat】如何激活成永久版本
    windows 安装配置mysql 8,以及远程连接访问
    fork子进程父进程死掉之后,getppid()不为1的解决办法
    ubuntu64运行32位程序安装过程
  • 原文地址:https://www.cnblogs.com/atp-sir/p/6397538.html
Copyright © 2011-2022 走看看