zoukankan      html  css  js  c++  java
  • e1087. try/catch语句

    The try/catch statement encloses some code and is used to handle errors and exceptions that might occur in that code. Here is the general syntax of the try/catch statement:

        try {
            body-code
        } catch (exception-classname variable-name) {
            handler-code
        }
    

    The try/catch statement has four parts. The body-code contains code that might throw the exception that we want to handle. The exception-classname is the class name of the exception we want to handle. The variable-name specifies a name for a variable that will hold the exception object if the exception occurs. Finally, the handler-code contains the code to execute if the exception occurs. After the handler-code executes, execution of the thread continues after the try/catch statement. Here is an example of code that tries to create a file in a non-existent directory which results in an IOException.

        String filename = "/nosuchdir/myfilename";
        try {
            // Create the file
            new File(filename).createNewFile();
        } catch (IOException e) {
            // Print out the exception that occurred
            System.out.println("Unable to create "+filename+": "+e.getMessage());
        }
        // Execution continues here after the IOException handler is executed
    

    Here's the output:

        Unable to create /nosuchdir/myfilename: The system cannot find the path specified
    

    It is possible to specify more than one exception handler in a try/catch statement. When an exception occurs, each handler is checked in order (i.e. top-down) and the handler that first matches is executed. The following example registers a name at a website. The example code can throw two kinds of exceptions -- one if the URL is invalid and one if the web page is not accessible. This example uses an invalid URL which results in a MalformedURLException.

        // This URL string is deliberately missing the http: protocol to cause an exception
        String urlStr = "xeo.com:90/register.jsp?name=joe";
        try {
            // Get the image
            URL url = new URL(urlStr);
            InputStream is = url.openStream();
            is.close();
        } catch (MalformedURLException e) {
            // Print out the exception that occurred
            System.out.println("Invalid URL "+urlStr+": "+e.getMessage());
        } catch (IOException e) {
            // Print out the exception that occurred
            System.out.println("Unable to execute "+urlStr+": "+e.getMessage());
        }
    

    Here's the output:

        Invalid URL xeo.com:90/register.jsp?name=joe: no protocol: xeo.com:90/register.jsp?name=joe
    

    Here is the same example with a valid URL. The URL refers to a non-existant web page which results in a IOException.

        urlStr = "http://xeo.com:90/register.jsp?name=joe";
        try {
            URL url = new URL(urlStr);
            InputStream is = url.openStream();
            is.close();
        } catch (MalformedURLException e) {
            // Print out the exception that occurred
            System.out.println("Invalid URL "+urlStr+": "+e.getMessage());
        } catch (IOException e) {
            // Print out the exception that occurred
            System.out.println("Unable to execute "+urlStr+": "+e.getMessage());
        }
    

    Here's the output:

        Unable to execute http://xeo.com:90/register.jsp?name=joe: Connection refused: connect
    

    When an exception occurs, the exception is compared with the specified exception class name using the instanceof comparator. This means that if the handler specifies a class name E, then any exception whose class either equals E or is a subclass of E, matches the handler. The following example catches either MalformedURLException or IOException using Exception since both exceptions are subclasses of Exception.

        urlStr = "http://xeo.com:90/register.jsp?name=joe";
        try {
            URL url = new URL(urlStr);
            InputStream is = url.openStream();
            is.close();
        } catch (Exception e) {
            // Print out the exception that occurred
            System.out.println(urlStr+": "+e.getMessage());
        }
    

    Here's the output:

        http://xeo.com:90/register.jsp?name=joe: Connection refused: connect
    

    If an exception occurs and does not match any of the handlers, the exception is passed to any enclosing try/catch statements and up the call chain until it is caught by some handler. If the exception is not handled by any handler, it becomes an uncaught exception and the thread is immediately terminated. In the following example, a NullPointerException is thrown, which is not caught by MalformedURLException and so becomes an uncaught exception.

        // This string is deliberately set to null to cause an exception
        urlStr = null;
        try {
            int len = urlStr.length(); // Causes a NullPointerException
            URL url = new URL(urlStr);
        } catch (MalformedURLException e) {
            // Print out the exception that occurred
            System.out.println("Invalid URL "+urlStr+": "+e.getMessage());
        }
    

    The result of an uncaught exception is a stack trace that identifies the line of code that threw the exception. The output looks something like:

        Exception in thread "main" java.lang.NullPointerException
                at MyClass.mymethod(MyClass.java:162)
    
    Related Examples
  • 相关阅读:
    TelephonyManager对黑名单的管理
    1125: 零起点学算法32——输出四位完全平方数
    1124: 零起点学算法31——开始新的起程
    1123: 零起点学算法30——参加程序设计竞赛
    1122: 零起点学算法29——等级分制度
    1121: 零起点学算法28——判断是否闰年
    1120: 零起点学算法27——判断是否直角三角形
    1119: 零起点学算法26——判断奇偶数
    1118: 零起点学算法25——求两点之间的距离
    1117: 零起点学算法24——求正弦和余弦
  • 原文地址:https://www.cnblogs.com/borter/p/9575299.html
Copyright © 2011-2022 走看看