zoukankan      html  css  js  c++  java
  • Java Throwable相关知识

    package org.li.basic.throwable;
    
    /**
     * Created by lijy on 2017/8/5.
     *
     * 所有的异常都继承自类Throwable, Throwable下主要分两大类Error和Exception,
     * Exception下分RuntimeException和其他Exception,RuntimeException和Error
     * 都属于unchecked异常,通常不在应用程序里catch,而是有程序逻辑自身避免引发unchecked
     * 异常,Exception的非RuntimeException子类都属于checked异常,需要捕获处理或
     * 通过throws关键字显示标记。
     *
     * Throwable类主要实现了fillinStackTrace方法,用于记录当前Java栈调用位置,并
     * 在构造函数中默认调用fillinStackTrace方法,除非显示指定writableStackTrace=false
     * 不要把try-catch当做if-else来控制程序的逻辑,因为产生异常的开销比普通逻辑要大,
     * 其中fillinStackTrace就是开销较大的方法之一。因此不建议大量使用Throwable机制来
     * 做业务异常处理,重写fillinStackTrace可以提高异常效率,但是却获取不到调用栈追踪
     * 的相关信息。
     *
     * Throwable的子类Error和Exception等几乎没有个性化逻辑,主要是对Throwable做一个
     * 概念区分。
     *
     * 对于底层代码一般少用try-catch捕获异常以提高效率,对于顶层代码必须捕获所有异常,
     * 记录异常日志,把异常转换为错误码或友好提示信息输出给终端调用方。
     *
     * 与Jvm相关知识补充,OutOfMemoryError通常是堆内存占满,StackOverflowError
     * 一般是由于递归导致的栈内存占满。
     */
    
    import java.io.IOException;
    
    public class Client {
        public final static void main(String[] args){
    
            //1.对应checked异常,需要捕获并处理
            try{
                testCheckedException();
            }catch (IOException e){
                e.printStackTrace();
            }
    
            //2.对应unchecked一般不做捕获,应该修改程序逻辑避免
            testUncheckedException();
        }
    
        /**
         * 检查性异常必须显示捕获或通过throws标记
         * @throws IOException
         */
        private static void testCheckedException() throws IOException{
            throw new IOException();
        }
    
        /**
         * 非检查性异常不需要捕获或标记
         */
        private static void testUncheckedException(){
            String empty = null;
            empty.length();//引发NullPointerException
        }
    }
  • 相关阅读:
    [git] push.default is unset
    [daily][qemu][libvirt] 使用libvirt管理qemu
    [development] __attribute__((weak))是干嘛的
    [daily] 使用左右对比查看diff 格式的文件
    [daily] 主机间目录共享
    [daily][qemu][kvm] 使用virtfs在host与guest之间共享目录
    [development][thrift] RPC框架 thrift
    [daily] 像tcpdump一样监听unix domain socket
    [daily][cgroup] 使用cgroup限制进程的CPU占用
    [qemu] qemu旧的net参数已经不再可用了,新的这样用。
  • 原文地址:https://www.cnblogs.com/ArtofDesign/p/7290211.html
Copyright © 2011-2022 走看看