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)
  • 相关阅读:
    arc路径例子-磊哥
    使用路径arc-奥运五环
    arc路径-磊哥
    使用路径arc-七彩
    html5- 摘自网友dudu
    使用路径arc
    textBaseline
    html5-磊哥
    【洛谷1345】 [USACO5.4]奶牛的电信(最小割)
    【洛谷1231】 教辅的组成(网络流)
  • 原文地址:https://www.cnblogs.com/Demrystv/p/13091787.html
Copyright © 2011-2022 走看看