有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java和安卓中的异常处理

我已经学会了java的基本知识。我想知道异常处理的相关知识

1)可以使用吗

try{............
}catch(Exception ex){
........
}

而不是像这样更具体的东西

try{............
}catch(FileNotFoundException ex){
........
}

这样,我不知道将抛出什么类型的异常

2)如何确定代码的哪一部分位于try块内。如果我把整个代码放在“try”里面,然后转过脸来,那会是件坏事吗

3)如果我必须具体说明catch块,那么我如何知道可以抛出什么类型的异常


共 (5) 个答案

  1. # 1 楼答案

    答案是这取决于

    如果希望应用程序针对不同的异常类型表现不同,那么try块应该很短,并且应该分别捕获异常

    但是,如果您决定以通用方式处理代码故障,则可以在一个catch块中捕获所有异常,例如,执行以下操作:

    try {
    
        // large block of code, throwing lots of exceptions
    
    } catch (Throwable t) {
    
        // This way you, and your admin will know what really happened.
        logger.log(Level.SEVERE, "Error in my awesome block of code", t);
    
    
        // This way you're hiding error details from your users
        someGUI.showErrorMessage("Unexpected error during processing. Contact your local IT");
    }
    

    在现实生活中,这通常比这更复杂,您应该决定单独处理哪些错误,以及以单一、通用的方式处理哪些错误

  2. # 2 楼答案

    这是一个糟糕的变体。例如:

    socket.send(data); // sending data via socket. This may cause IOException
    

    但是可以有另一个Exception,例如NullPointerException。如果您将捕获所有异常,则更难发现错误:

    Socket socket = null;
    socket.send(data); // sending data via socket. This will cause NullPointerException
    

    在本例中,您将看到一个NullPointerException,但您会认为这是一个IOException

    最好的变体是:

    try {
        Socket socket = null;
        socket.send(data);
    } catch(IOException ex) {
        ex.printStackTrace();
    } catch(NullPointerException ex) {
        ex.printStackTrace();
    }
    // or in java 7 you can write catch(IOException | NullPointerException ex)
    

    如果您想捕获一些异常,或者如果必须没有null,则不编写第二个catch块,您将发现所有错误,而这将是不必要的

    对不起,我的英语不好

  3. # 3 楼答案

    1. 如果可以的话,最好的选择是不做更具体的事情
    2. 如果你把整个代码都放在“try”里面,你就不能具体说明 异常,甚至您的处理(应如何处理 例外情况)将受到限制

    正如我所说的,如果可以的话,最好选择更具体的方法,但如果您不确定,那么可以使用这种方法

    try{............
    }catch(FileNotFoundException ex){
    ........
    }catch(Exception ex){
    ........
    }
    

    意味着一般的苛求应该排在最后

  4. # 4 楼答案

    Java有两种类型的异常

    1检查异常

    2未检查的异常

    所以你的问题是How to decide what part of code be inside try block.

    Java强制您在try块中编写代码块,这可能导致第一种类型的异常

    您可以编写e.printStackTrace();来了解导致异常的详细信息

  5. # 5 楼答案

    1)使用try{..}捕获(例外e){..}使您的代码更加紧凑,能够在单个位置管理异常。 您还可以连接catch块以管理几种类型的异常:

    try {
        ..
    } catch(FileNotFoundException fe) {
        //manage here this kind of exception
    } catch(NullPointerException ne) {
        //you missed a check on nulls! But the file has been found...
    } catch(Exception e) {
        //file has been found and no nulls are left...
    }
    

    请注意,块的顺序是相关的:在示例中,如果同时存在FileNotFoundException和NullPointerException,则会在FileNotFoundException捕获块中重定向

    2)try-catch块显然会影响代码的性能,因此我认为您只需要放置以下代码: -不在您的控制之下(例如,第三方库等) -使用不可靠的介质(例如套接字连接、文件IO等) -利用异常处理来表示特定行为(例如GoogleAppEngine超时异常等)