zoukankan      html  css  js  c++  java
  • java 异常处理机制及说明。

    又抄袭了一篇文章,其实就是想保存到自己的博客中而已,文章出处:http://www.cnblogs.com/LilianChen/p/4639471.html

    1. 如何捕获异常

    try 

    {

    可能会出现异常的代码段;

    }

    catch(异常类型名 处理该异常对象)

    {

    异常处理代码段;

    }

    复制代码
     1 import java.io.*;
     2 
     3 public class TryCatchTest {
     4 
     5     public static void main(String[] args) {
     6         File file = new File("abc.txt");
     7         int a[] = {1, 2};
     8         
     9         try
    10         {
    11             System.out.println(3/0);
    12         }
    13         catch(ArithmeticException e1)
    14         {
    15             System.out.println("3/0: ");
    16             System.out.println("This is ArithmeticException");
    17         }
    18         
    19         try
    20         {
    21             System.out.println(a[2]);
    22         }
    23         catch(ArrayIndexOutOfBoundsException e2)
    24         {
    25             System.out.println("a[2] is out of Array: ");
    26             System.out.println("This is ArrayIndexOutOfBoundsException");
    27         }
    28         
    29         try
    30         {
    31             BufferedReader input = new BufferedReader(new FileReader(file));
    32         }
    33         catch (FileNotFoundException e3)
    34         {
    35             System.out.println("abc.txt is not found: ");
    36             System.out.println("This is FileNotFoundException");
    37         }
    38         catch(IOException e)
    39         {
    40             System.out.println("This is IOException");
    41         }
    42 
    43     }
    44 
    45 }
    复制代码

    3/0: 
    This is ArithmeticException
    a[2] is out of Array: 
    This is ArrayIndexOutOfBoundsException
    abc.txt is not found: 
    This is FileNotFoundException

    2. 如何抛出异常

    编写代码过程中,如果不想在这段代码中捕捉和处理一个可能出现的异常,那么就需要将这个异常传递出去,传递给调用它的方法去处理该异常。这个时候就需要使用throw 和throws

    • throws语句在方法声明中使用,抛出异常
    • throw语句在方法体内部使用,抛出异常

    注意: 方法体中若使用了throw语句抛出异常,则必须在该方法声明中,采用throws语句来声明该方法体中抛出的异常,同时,throws语句声明抛出的异常,必须是方法体中throw语句抛出的异常或该异常的父类。

    复制代码
     1 import java.io.*;
     2 
     3 public class ThrowTest {
     4     
     5     public void throwTest1() throws ArithmeticException
     6     {
     7         System.out.println(3/0);
     8     }
     9     
    10     public void throwTest2() throws ArrayIndexOutOfBoundsException
    11     {
    12         int a[] ={1,2};
    13         System.out.println(a[2]);
    14     }
    15     
    16     public void throwTest3() throws FileNotFoundException
    17     {
    18         File file=new File("abc.txt");
    19         new BufferedReader(new FileReader(file));
    20     }
    21     
    22     public void throwTest4() throws FileNotFoundException
    23     {
    24         throw new FileNotFoundException("abc.txt");
    25     }
    26 
    27     public static void main(String[] args) {
    28         ThrowTest throwTest=new ThrowTest();
    29         
    30         try
    31         {
    32             throwTest.throwTest1();
    33         }
    34         catch (ArithmeticException e1)
    35         {
    36             System.out.println("3/0: ");
    37             System.out.println("This is ArithmeticException");
    38         }
    39         
    40         try 
    41         {
    42             throwTest.throwTest2();
    43         }
    44         catch(ArrayIndexOutOfBoundsException e2)
    45         {
    46             System.out.println("a[2] is out of Array: ");
    47             System.out.println("This is ArrayIndexOutOfBoundsException");
    48         }
    49         
    50         try
    51         {
    52             throwTest.throwTest3();
    53         }
    54         catch (FileNotFoundException e3)
    55         {
    56             System.out.println("abc.txt is not found: ");
    57             System.out.println("This is FileNotFoundException");
    58         }
    59         
    60         try
    61         {
    62             throwTest.throwTest4();
    63         }
    64         catch (FileNotFoundException e3)
    65         {
    66             System.out.println("abc.txt is not found: ");
    67             System.out.println("This is FileNotFoundException");
    68         }
    69 
    70     }
    71 
    72 }
    复制代码

    3/0: 
    This is ArithmeticException
    a[2] is out of Array: 
    This is ArrayIndexOutOfBoundsException
    abc.txt is not found: 
    This is FileNotFoundException
    abc.txt is not found: 
    This is FileNotFoundException

    3. 自定义异常

    建立自己的异常类,要做的只是根据需要,从Exception类或者从Exception类的子类中继承出需要的类。习惯上,会经常为每一个异常类,提供一个默认的和一个包含详细信息的构造器。需要注意的是,自定义异常类,必须由程序员使用throw语句抛出。

    复制代码
     1 public class MyException {
     2 
     3     public static void main(String[] args) {
     4         String str="2abcde";
     5         
     6         try
     7         {
     8             char c=str.charAt(0);
     9             if(c<'a'||c>'z'||c<'A'||c>'Z')
    10                 throw new FirstLetterException();
    11         }
    12         catch (FirstLetterException e)
    13         {
    14             System.out.println("This is FirstLetterException");
    15         }
    16 
    17     }
    18 
    19 }
    20 
    21 class FirstLetterException extends Exception{
    22     public FirstLetterException()
    23     {
    24         super("The first char is not a letter");
    25     }
    26     
    27     public FirstLetterException(String str)
    28     {
    29         super(str);
    30     }
    31 }
    复制代码

    This is FirstLetterException

    复制代码
     1 public class MyException {
     2 
     3     public static void main(String[] args) throws FirstLetterException{
     4         throw new FirstLetterException();
     5     }
     6 }
     7 
     8 class FirstLetterException extends Exception{
     9     public FirstLetterException()
    10     {
    11         super("The first char is not a letter");
    12     }
    13     
    14     public FirstLetterException(String str)
    15     {
    16         super(str);
    17     }
    18 }
    复制代码

    Exception in thread "main" FirstLetterException: The first char is not a letter
    at MyException.main(MyException.java:5)

    4. 使用finally语句

    在使用try...catch语句是,若try语句中的某一句出现异常情况,那么这部分try语句段中,从出现异常的语句开始,之后的所有语句都不会被执行,直到这部分try语句段结束。

    但是在很多情况下,希望无论是否出现异常,某些语句都需要被执行。那么就可以把这部分代码放在finally语句段中,即使try或catch语句段中含有return语句,程序都会在异常抛出后先执行finally语句段,除非try或catch语句段中执行System.exit()方法,或者是出现Error错误,finally语句才不会被执行而退出程序。

    复制代码
     1 import java.io.*;
     2 
     3 public class FinallyTest {
     4 
     5     public static void main(String[] args) {
     6         File file=null;
     7         BufferedReader input=null;
     8         file=new File("abc.txt");
     9         
    10         try
    11         {
    12             input=new BufferedReader(new FileReader(file));
    13         }
    14         catch(FileNotFoundException e)
    15         {
    16             System.out.print("abc.txt is not found: ");
    17             System.out.println("This is FileNotFoundException");
    18         }
    19         finally
    20         {
    21             System.out.println("This is finally code part.");
    22         }
    23 
    24     }
    25 
    26 }
    复制代码

    abc.txt is not found: This is FileNotFoundException
    This is finally code part.

  • 相关阅读:
    DRUPAL-PSA-CORE-2014-005 && CVE-2014-3704 Drupal 7.31 SQL Injection Vulnerability /includes/database/database.inc Analysis
    WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss
    Penetration Testing、Security Testing、Automation Testing
    Tomcat Server Configuration Automation Reinforcement
    Xcon2014 && Geekpwn2014
    phpMyadmin /scripts/setup.php Remote Code Injection && Execution CVE-2009-1151
    Linux System Log Collection、Log Integration、Log Analysis System Building Learning
    The Linux Process Principle,NameSpace, PID、TID、PGID、PPID、SID、TID、TTY
    Windows Management Instrumentation WMI Security Technology Learning
    IIS FTP Server Anonymous Writeable Reinforcement, WEBDAV Anonymous Writeable Reinforcement(undone)
  • 原文地址:https://www.cnblogs.com/nomengfei/p/4644700.html
Copyright © 2011-2022 走看看