成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

java編程思想代碼分析(一)12.4.1:異常

MingjunYang / 1283人閱讀

摘要:結(jié)果如下十一月上午嚴(yán)重靜態(tài)的方法創(chuàng)建了一個(gè)參數(shù)的對(duì)象,這個(gè)對(duì)象會(huì)將輸出發(fā)送到也就是發(fā)送到對(duì)象初始化的字符串到緩沖區(qū)中,執(zhí)行到構(gòu)造器新建對(duì)象的時(shí)候,就已經(jīng)拿到了這個(gè)對(duì)象輸出到流緩沖區(qū)的字符,但是由于我們只是獲得了字符,所以我們調(diào)用獲取到了其中

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.logging.Logger;

/**
 * Created by 2017 on 2017/11/10.
 */
class LoggingException extends Exception{
    private static Logger logger = Logger.getLogger("LoggingException");

    public LoggingException() {
        StringWriter trace = new StringWriter();
        printStackTrace(new PrintWriter(trace));
        logger.severe(trace.toString());
    }
}
public class LoggingExceptions {
    public static void main(String[] args) {
        try {
            throw new LoggingException();
        } catch (LoggingException e) {
            System.err.println("Caught"+e);
        }
    }
}

結(jié)果如下

十一月 10, 2017 9:34:31 上午 LoggingException 
嚴(yán)重: LoggingException
    at LoggingExceptions.main(LoggingExceptions.java:20)

CaughtLoggingException

靜態(tài)的Logger方法創(chuàng)建了一個(gè)string參數(shù)的logger對(duì)象,這個(gè)logger對(duì)象會(huì)將輸出發(fā)送到system.err(也就是發(fā)送到logger對(duì)象初始化的字符串到緩沖區(qū)中),執(zhí)行到構(gòu)造器新建對(duì)象trace的時(shí)候,trace就已經(jīng)拿到了這個(gè)logger對(duì)象輸出到流緩沖區(qū)的字符,但是由于我們只是獲得了字符,所以我們調(diào)用 printStackTrace(new PrintWriter(trace))獲取到了其中的異常信息,并通過(guò)trace獲取錯(cuò)誤信息到緩沖區(qū)中,然后我們要輸出緩沖區(qū)重的字符串,調(diào)用 logger.severe(trace.toString()); 方法對(duì)字符串進(jìn)行打印,并把結(jié)果寫(xiě)入到logger中,最后在main方法里執(zhí)行try語(yǔ)句的時(shí)候會(huì)加載LoggingException的構(gòu)造器,從而通過(guò)logger.severe(trace.toString());來(lái)打印出logger里的信息到控制臺(tái)

12.6.3異常鏈

/**
 * Created by 2017 on 2017/11/12.
 */
public class Test {

    public static void main(String[] args) {
        DynamicFields df = new DynamicFields(3);
        System.out.println(df);
        try {
            df.setField("d", "a value of d");
            df.setField("killer47", 47);
            df.setField("fatkiller48", 48);
            System.out.println(df);
            df.setField("d", "a new value of d");
            df.setField("thinkiller", 11);
            System.out.println("df:" + df);
            System.out.println("df.getField("d")" + df.getField("d"));
            Object field = df.setField("d", null);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (DynamicFieldException e) {
            e.printStackTrace();
        }
    }
}

class DynamicFieldException extends Exception {}
class DynamicFields {
    private Object[][] fields;
    public DynamicFields(int initialSize) {
        this.fields = new Object[initialSize][2];
//        這里的長(zhǎng)度是由用戶指定的,里面存儲(chǔ)的是initialsize個(gè)一唯數(shù)組,每一個(gè)一唯數(shù)組的長(zhǎng)度是2
        for (int i = 0; i < initialSize; i++) {
//            這里開(kāi)始遍歷1唯數(shù)組,然后給1唯數(shù)組里的每個(gè)元素進(jìn)行賦值
            fields[i] = new Object[]{null, null};
        }
    }

    public String toString() {
        StringBuilder result = new StringBuilder();
        for (Object[] object : fields) {
//            object遍歷的數(shù)組是1唯數(shù)組的個(gè)數(shù),1唯數(shù)組有幾個(gè)就遍歷幾次,
//            由于object取出的是每一個(gè)一唯數(shù)組,所以object[0]取出的是每一個(gè)一唯數(shù)組里每一個(gè)元素的值,由于上面指定1唯數(shù)組的長(zhǎng)度是2,所以取0,和1兩個(gè)下標(biāo)進(jìn)行遍歷,添加到緩沖區(qū)然后返回?cái)?shù)組里的所有內(nèi)容
//            object[0]取出的是每一個(gè)1唯數(shù)組,
            result.append(object[0] + ": " + object[1] + "
");
        }
        return result.toString();
    }

    private int hasField(String id) {
        for (int i = 0; i < fields.length; i++) {
            if (id.equals(fields[i][0]))
                return i;
        }
        return -1;
    }

    private int getFieldNumber(String id) throws NoSuchFieldException {
        int fieldNum = hasField(id);
        if (fieldNum == -1) {
            throw new NoSuchFieldException();
        }
        return fieldNum;
    }

    private int makeField(String id) {
        for (int i = 0; i < fields.length; i++) {
            if (fields[i][0] == null) {
                fields[i][0] = id;
                return i;
            }
        }
        // 如果空間滿了,那就在造一個(gè)空間
        Object[][] temp = new Object[fields.length + 1][2];
        for (int i = 0; i < fields.length; i++) {
            temp[i] = fields[i];
        }
        temp[fields.length] = new Object[]{null, null};
        fields = temp;
        return makeField(id);
    }

    public Object getField(String id) throws NoSuchFieldException {
        return fields[getFieldNumber(id)][1];
    }

    public Object setField(String id, Object value)
            throws DynamicFieldException {
        if (value == null) {
            DynamicFieldException dfe = new DynamicFieldException();
            dfe.initCause(new NullPointerException());
            throw dfe;
        }
        int fieldNumber = hasField(id);
        if (fieldNumber == -1) {
            fieldNumber = makeField(id);
        }
        Object result = null;
        try {
            result = getField(id);
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
//            e.printStackTrace();
        }
        fields[fieldNumber][1] = value;
        return result;
    }
}

底層類似于一個(gè)MAP的容器,我們通過(guò)調(diào)用DynamicFieldException的initcause方法來(lái)把其他的異常鏈接起來(lái),也可以通過(guò)exception的構(gòu)造器來(lái)傳入一個(gè)異常,這樣我們可以追蹤到異常最初發(fā)生的位置,不過(guò)需要注意的是,在調(diào)用setfiled的時(shí)候,如果跑出文件找不到異常(屬于查找才有的異常類型,而不是設(shè)置字段應(yīng)該拋出的異常類型),所以我們需要用接受cause參數(shù)的構(gòu)造器把文件找不到異常轉(zhuǎn)換成運(yùn)行時(shí)異常

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/67996.html

相關(guān)文章

  • Java編程思想》筆記12.通過(guò)異常處理錯(cuò)誤

    摘要:一旦異常被拋出,就表明錯(cuò)誤已無(wú)法挽回,也不能回來(lái)繼續(xù)執(zhí)行。這種在編譯時(shí)被強(qiáng)制檢查的異常稱為被檢查的異常。通過(guò)獲取原始異常。構(gòu)造器對(duì)于在構(gòu)造階段可能會(huì)拋出異常,并要求清理的類,最安全的做法是使用嵌套的子句。 點(diǎn)擊進(jìn)入我的博客 Java異常處理的目的在于通過(guò)使用少于目前數(shù)量的代碼來(lái)簡(jiǎn)化大型、可靠的程序的生成,并且通過(guò)這種方式可以使你更自信:你的應(yīng)用中沒(méi)有未處理的錯(cuò)誤。 12.1 概念 異...

    Vultr 評(píng)論0 收藏0
  • Java編程思想》讀后總結(jié)(

    摘要:前言編程思想這本書(shū),陸陸續(xù)續(xù)讀了年,終于基本都瀏覽了一遍。每個(gè)對(duì)象對(duì)外暴露接口,程序通過(guò)對(duì)象暴露的接口向?qū)ο蟀l(fā)送消息,獲取該對(duì)象的服務(wù)能力。異常處理異常處理,為編寫(xiě)程序階段提供了一種預(yù)見(jiàn)性的防止程序崩潰的出路。 前言 《Java編程思想》這本書(shū),陸陸續(xù)續(xù)讀了1年,終于基本都瀏覽了一遍。通過(guò)這本書(shū),試圖理解作者的想法,才真的體會(huì)到Java思想。感謝本書(shū)的作者,不僅講述了java的語(yǔ)法,更...

    hufeng 評(píng)論0 收藏0
  • Java編程思想》 -- 異常總結(jié)

    摘要:總結(jié)異常總的來(lái)說(shuō)還是很重要的,也是保障程序健壯性很重要的一欄,并且可以達(dá)到立竿見(jiàn)影的效果,這里只是基本總結(jié)了異常的一些常見(jiàn)問(wèn)題,很多還得在自己運(yùn)用的過(guò)程中去探索。 概述 說(shuō)起異常,我就想起了Bug,也就是常說(shuō)的信春哥,無(wú)Bug,什么是Bug呢?我理解的Bug就是沒(méi)有按照自己原先假想的邏輯去執(zhí)行,這其中包括了兩個(gè)方面,一方面是代碼語(yǔ)法問(wèn)題,一方面是邏輯問(wèn)題,就比如正常邏輯買了東西要付款,...

    Pocher 評(píng)論0 收藏0
  • Java編程思想學(xué)習(xí)錄(連載之:異常

    摘要:系列博文目錄編程思想學(xué)習(xí)錄連載之一切都是對(duì)象編程思想學(xué)習(xí)錄連載之初始化與清理編程思想學(xué)習(xí)錄連載之內(nèi)部類編程思想學(xué)習(xí)錄連載之異常本篇文章將講述關(guān)于異常的相關(guān)知識(shí)注本文首發(fā)于公眾號(hào),可長(zhǎng)按或掃描下面的小心心來(lái)訂閱基本概念使用異常來(lái)提供一致性的錯(cuò) showImg(https://segmentfault.com/img/remote/1460000013228854); Thinking ...

    pkhope 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<