潭州Java中级班(day_13)-Exception,tryCatch,throw,throws,GetMessage,Finally

一.Exception


自定义普通的异常:如果说输入的数字不符合我们的功能,然后就报异常。


* 1.创建一个类继承Exception类。Exception类是编译时异常。
* 2.写两个构造函数,一个有参数的,一个无参数的。

package Exception;

import java.util.Scanner;

/*
 * 自定义普通的异常:如果说输入的数字不符合我们的功能,然后就报异常。
 * 1.创建一个类继承Exception类。Exception类是编译时异常。
 * 2.写两个构造函数,一个有参数的,一个无参数的。
 * 
 */

public class demoException {
    public static void main(String[] args) {
        try {
            test1();
        } catch (NumException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    class NumException extends Exception{
        //String   message="输入数字有误!"
        public   NumException(String   message){
            super(message);  //把异常信息传给父类,那么父类就可以获取了。
        }
    }

    public static void test1 ()throws NumException {
        System.out.println("请选择功能:1.登录     2.注册      3.退出");
        Scanner scanner=new Scanner(System.in);//创建一个扫描器类对象
        int num=scanner.nextInt();//获取输入的整数
        switch (num) {
        case 1:
            System.out.println("开始登录!");
            break;
        case 2:
            System.out.println("开始注册");        
            break;
        case 3:
            System.out.println("退出!");
            break;

        default:
            break;

        }

    }
}

二.Throw


* 手动抛出异常:可以根据你的意思来抛出异常
*
* throw跟throws的区别:
* 1.throw是在方法体中,throws是在方法声明上。
* 2.throw是抛出异常对象。throws是抛出异常类名。
* 3.throw是可以根据你的标准来抛出异常。

package Exception;

/*
 * 手动抛出异常:可以根据你的意思来抛出异常
 * 
 * throw跟throws的区别:
 * 1.throw是在方法体中,throws是在方法声明上。
 * 2.throw是抛出异常对象。throws是抛出异常类名。
 * 3.throw是可以根据你的标准来抛出异常。
 */

public class demoThrow {
    public static void main(String[] args) {
//        try {
//            cun(1000);
//        } catch (Exception e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        }
        
//        cun3(-1000);
        System.out.println("存钱结束");
    }
    public static void cun(double money)throws Exception {
        if(money<0) {
            throw new Exception("钱不能是负数");//编译时抛出异常
        }
        System.out.println("存了"+money);
    }
    
    public    static   void   cun2(double  qian) throws Exception  {
         if(qian<0){
                    throw   new   Exception("存钱不能为负数");//抛的编译时异常
         }
         System.out.println("存了"+qian);
     }
    
    //它是运行时异常,所以不需要处理,可以运行,但是如果有异常,最后还是有异常。
    public    static   void   cun3(double  qian)   {
             if(qian<0){
                     throw   new   RuntimeException("存钱不能为负数");//抛的编译时异常
             }
             System.out.println("存了"+qian);
    }
}

三.Throws


* throws抛出异常的特点:
* 1.抛出异常要一直抛出,直到抛到最终点,抛给main函数。
* 2.如果有异常,结果还是有异常,只不过可以运行。
* 3.抛出异常可以让编译时异常可以运行。
* 4.抛出异常,不会执行后面的代码。

package Exception;

import java.io.FileNotFoundException;
import java.io.FileReader;

/*
 * throws抛出异常的特点:
 *    1.抛出异常要一直抛出,直到抛到最终点,抛给main函数。
 *    2.如果有异常,结果还是有异常,只不过可以运行。
 *    3.抛出异常可以让编译时异常可以运行。
 *    4.抛出异常,不会执行后面的代码。
 */

public class demoThrows {
    public static void main(String[] args) throws FileNotFoundException,ArithmeticException{
        //test1();
        test2();
    }
    
     public   static    void   test2()  throws   ArithmeticException{
           int   a=1/0;
}

    public static void test1() throws FileNotFoundException{
        /*
         * FileReader:字符输入流     读取文件   
         * 默认路径是在项目下面
         */
        FileReader    fileReader=new   FileReader("aa2.txt");
        System.out.println(2);
    }
}
//Exception in thread "main" java.io.FileNotFoundException: aa2.txt (系统找不到指定的文件。)
//at java.io.FileInputStream.open0(Native Method)
//at java.io.FileInputStream.open(Unknown Source)
//at java.io.FileInputStream.<init>(Unknown Source)
//at java.io.FileInputStream.<init>(Unknown Source)
//at java.io.FileReader.<init>(Unknown Source)
//at Exception.demoThrows.test1(demoThrows.java:24)
//at Exception.demoThrows.main(demoThrows.java:16)

四.tryCatch


* 抓异常的格式:
* try{
* 这里面放可能出现异常的代码;
* }catch(异常的类名 对象名){
* 有异常以后,处理异常的代码;
* 如果没有异常,就不会执行;
* }
*
*
*
* try catch的特点:
* 1.抓异常以后,不用再抛出
* 2.抓异常以后,后面的代码还可以执行,try里面紧跟的代码是不能执行的。
*
* printStackTrace():打印输出异常类名,异常信息和异常行号
*/

package Exception;

import java.io.FileNotFoundException;
import java.io.FileReader;

/*
 * 抓异常的格式:
 *      try{
 *            这里面放可能出现异常的代码;  
 *      }catch(异常的类名      对象名){
 *            有异常以后,处理异常的代码;
 *            如果没有异常,就不会执行;
 *      }
 *      
 * 
 * 
 * try  catch的特点:
 *    1.抓异常以后,不用再抛出
 *    2.抓异常以后,后面的代码还可以执行,try里面紧跟的代码是不能执行的。
 *    
 * printStackTrace():打印输出异常类名,异常信息和异常行号
 */
public class demoTryCatch {
    public static void main(String[] args) {
        //test1();
        test2();
    }
    
      public    static    void    test2(){
          try {
                int   a=1/0;
                System.out.println(1);
            } catch (ArithmeticException e) {
                  //从这开始两条路
                  e.printStackTrace();//打印输出异常类名,异常信息和异常行号
            }
          System.out.println(2);
           
    }
    
    public static void test1() {
        try {
            FileReader fileReader=new FileReader("a.txt");
            System.out.println("1111"); //上面有异常,22不会执行;如果没有异常,会执行。
        } catch (FileNotFoundException e) {
            e.printStackTrace();//打印输出异常类名,异常信息和异常行号
        }
        System.out.println("22222");
    }
//    java.io.FileNotFoundException: a.txt (系统找不到指定的文件。)
//    22222
//        at java.io.FileInputStream.open0(Native Method)
//        at java.io.FileInputStream.open(Unknown Source)
//        at java.io.FileInputStream.<init>(Unknown Source)
//        at java.io.FileInputStream.<init>(Unknown Source)
//        at java.io.FileReader.<init>(Unknown Source)
//        at Exception.demoTryCatch.test1(demoTryCatch.java:29)
//        at Exception.demoTryCatch.main(demoTryCatch.java:25)

}

五.TryCatchCatch


* 处理多个异常的格式:
* try{
* 可能出现异常的代码;
* 可能出现异常的代码;
* 可能出现异常的代码;
* }catch(){
* 处理一个异常信息
* }catch(){
* 处理另一个异常信息
* }.....
*

package Exception;

import java.io.FileNotFoundException;
import java.io.FileReader;

/*
 * 处理多个异常的格式:
 *      try{
 *          可能出现异常的代码;
 *          可能出现异常的代码;
 *          可能出现异常的代码;
 *      }catch(){
 *          处理一个异常信息
 *      }catch(){
 *           处理另一个异常信息
 *      }.....
 *      
 */

public class demoTryCatchCatchCatch {
    public static void main(String[] args) {
//        try {
//            FileReader fileReader=new FileReader("a.txt");
//            Thread.sleep(1000);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
        
        test1();
    }

    public   static void        test3() throws FileNotFoundException, InterruptedException{
        FileReader   fileReader=new   FileReader("aa.txt");
        Thread.sleep(100);
    }

    //这是新的
    public   static   void     test2(){
        try {
            FileReader   fileReader=new   FileReader("aa.txt");
            Thread.sleep(100);
        } catch (FileNotFoundException | InterruptedException e) {
            e.printStackTrace();
        } 
    }

    //这是以前大众的
    public static     void     test1(){
        try {
            FileReader   fileReader=new   FileReader("aa.txt");
            Thread.sleep(100);
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (InterruptedException e) {
            e.printStackTrace();
        }catch(Exception   e){
            e.printStackTrace();
        }
    }
}

六.Finally

* 格式:
* try{
*
* }catch(){
*
* }catch(){
*
* }.....{
*
*
* }finally{
* 不管有没有异常,都会执行! return都不能阻止它的脚步
* 除非System.exit(0);结束jvm
* }
*
* final跟finally的区别:
* final:
* 1.修饰类,类不可以被继承
* 2.修饰函数,函数不可以被重写,复写,覆盖。可以重载。
* 3.修饰变量,变量是常量。
*
* finally:
* 1.是跟try catch组合,不管有没有异常都会执行。
*/

package Exception;

import java.io.FileNotFoundException;
import java.io.FileReader;

/*
 * 格式:
 *      try{
 *      
 *      }catch(){
 *      
 *      }catch(){
 *      
 *      }.....{
 *      
 *      
 *      }finally{
 *             不管有没有异常,都会执行!   return都不能阻止它的脚步   
 *                                   除非System.exit(0);结束jvm
 *      }
 * 
 * final跟finally的区别:
 * final:
 *    1.修饰类,类不可以被继承
 *    2.修饰函数,函数不可以被重写,复写,覆盖。可以重载。
 *    3.修饰变量,变量是常量。
 *    
 * finally:
 *    1.是跟try catch组合,不管有没有异常都会执行。
 */

public class demoFinally {
    public static void main(String[] args) {
        try {
            FileReader   fileReader=new   FileReader("aa.txt");
              System.exit(0);  //结束jvm
//              return  ;   //结束函数
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            System.out.println("执行了finally!");
        }
        
        System.out.println("game over!");
    }

    //可以重载:函数名一致,参数类型或者参数个数不一致。
    public   final   void   test1(){
        try {
            //              FileReader   fileReader=new   FileReader("aa.txt");
            int     a=1/0;
        } finally {
            System.out.println("执行了finally");
        }
    }

    public    final    void   test1(int  a){
    }

}

七.getMessage


* 获取异常信息三种方式:
* 1.getMessage() : 获取异常信息
* 2.toString() : 获取异常类名和异常信息
* 3.printStackTrace():打印输出异常类名,异常信息和异常行号。是void型的函数

package Exception;

/*
 * 获取异常信息三种方式:
 * 1.getMessage()  :  获取异常信息
 * 2.toString()    :  获取异常类名和异常信息 
 * 3.printStackTrace():打印输出异常类名,异常信息和异常行号。是void型的函数
 */

public class demoGetMessage {
    public static void main(String[] args) {
        try {
            int i=1/0;
        } catch (ArithmeticException e) {
//            System.out.println("有异常,不能除以0");
//            String   message=e.getMessage();//获取异常信息
//            System.out.println("message="+message);
            
            //获取异常类名和异常信息 
               String string=e.toString();//对象变成字符串,返回对象的字符串表示形式
               System.out.println("string="+string);
               e.printStackTrace();
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/yuyiWang/p/9694001.html
今日推荐