zoukankan      html  css  js  c++  java
  • Java中catch到的Exception的解析

    综述

      当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,也就是实例化Exception类型的对象。e是此对象异常名称。然后e(引用)会自动调用Exception类中指定的方法,就会e.printStackTrace()。printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。

    java抛出异常的常见的三种方法:

    1. System.out.println(e.toString): A  extends ---> B  extends ----> C  除了标准异常外,只打印at A 然后再向外层层输出。
    2.  e.printStackTrace()   除了标准异常外,打印  at C  at B at A .... 再向外层调查, 会打出详细异常,异常名称,出错位置,便于调试用.. 
    3.  e.getMessage(); 只会获得具体的异常名称. 比如说NullPoint 空指针,就告诉你说是空指针..

      举例说明下:

     1 示例代码1:
     2 public class TestInfo {
     3     private static String str =null;
     4     public static void main(String[] args) {
     5         System.out.println("test exception");
     6         try {
     7             if(str.equals("name")){
     8                 System.out.println("test exception");
     9             }
    10         } catch (Exception e) {
    11             System.out.println(e.toString());
    12             System.out.println(e.getMessage());
    13         }
    14     }
    15 }
    16 输出结果:
    17 java.lang.NullPointerException
    18 null
    19 
    20 示例代码2:
    21 public class TestInfo {
    22     private static int m = 0;
    23     public static void main(String[] args) {
    24         System.out.println("test exception");
    25         try {
    26             m = 899/0;
    27         } catch (Exception e) {
    28             System.out.println(e.toString());
    29             System.out.println(e.getMessage());
    30         }
    31     }
    32 }
    33 输出结果:
    34 java.lang.ArithmeticException: / by zero
    35 / by zero

      由此可得出结论:e.toString()获取的信息包括异常类型和异常详细消息;e.getMessage()只是获取了异常的详细消息字符串。

    问题

      e.printStackTrace() 可能会导致锁死!!!

    1. 短时间内大量请求访问此接口 -> 代码本身有问题,很多情况下抛异常  -> e.printStackTrace() 来打印异常到控制台 -> 产生错误堆栈字符串到字符串池内存空间 -> 此内存空间一下子被占满了 -> 开始在此内存空间产出字符串的线程还没完全生产完整,就没空间了 ->  大量线程产出字符串产出到一半,等在这儿(等有内存了继续搞啊)-> 相互等待,等内存,锁死了,整个应用挂掉了。
    2. 使用日志文件进行记录:logger.error(入参or返回结果 + "_" + e.getMessage(), e)
  • 相关阅读:
    HTML DOM 12 表格排序
    HTML DOM 10 常用场景
    HTML DOM 10 插入节点
    HTML DOM 09 替换节点
    HTML DOM 08 删除节点
    HTML DOM 07 创建节点
    022 注释
    024 数字类型
    005 基于面向对象设计一个简单的游戏
    021 花式赋值
  • 原文地址:https://www.cnblogs.com/Demrystv/p/13091787.html
Copyright © 2011-2022 走看看