java入門(二十三) | OOP(十)之異常

異常

1.1 概述

用來封裝錯誤信息的對象。
組成結構:類型,提示,行號。java

1.2 異常的繼承結構

Throwable - 頂級父類
        -- Error:系統錯誤,沒法修復
        -- Exception:可修復的錯誤
                 -- RunTimeException
                     -- ClassCastException
                     -- ClassNotFoundException

1.3 異常處理

程序中遇到了異常,一般有兩種處理方式:捕獲 或者 向上拋出。
當調用了一個拋出異常的方法時,調用位置能夠不作處理繼續向上拋出也能夠捕獲異常。測試

測試

package cn.qile.excetiondemo;

import java.util.InputMismatchException;
import java.util.Scanner;

//測試異常
public class Test1_Exception {
    public static void main(String[] args)
            throws Exception {
//     method();// 製造異常
//     method2();// 處理異常  -- 捕獲
//main()調用了method3()。可是method3()會拋出異常,這是main()就須要進行異常處理
        method3();// 處理異常 -- 拋出
    }

    // 處理異常 -- 拋出 -- throws 異常類型 --   寫在方法聲明上
    public static void method3()
            throws ArithmeticException,InputMismatchException,Exception{
        // 一、接收鍵盤輸入的整數a和b
        System.out.print("請輸入a的值:");
        int a = new Scanner(System.in).nextInt();
        System.out.print("請輸入b的值:");
        int b = new Scanner(System.in).nextInt();

        // 二、把ab作除法運算
        System.out.println("a / b = "+a / b);
    }

    // 捕獲異常
    /*
     * try{ code... code... code... code... code... }catch(異常類型 異常名){ 解決方案 }
     */
    private static void method2() {
        try {
            // 一、接收鍵盤輸入的整數a和b
            System.out.print("請輸入a的值:");
            int a = new Scanner(System.in).nextInt();
            System.out.print("請輸入b的值:");
            int b = new Scanner(System.in).nextInt();

            // 二、把ab作除法運算
            System.out.println("a / b = "+a / b);
        } catch (ArithmeticException e) {
            System.out.println("哥們,第二次輸入不能爲0 !");// 解決方案
            // 多態:會發生什麼樣子的異常,全部異常的類型,我不知道...這時候用多態最完美!!!
            // 多態根本不關心具體子類類型,把全部子類當作父類來看
            // 只須要catch 老大 Exception就可以把程序中的全部異常捕獲住作處理,
            // 寫出了通用代碼
        } catch (Exception e) {// 多態
            System.out.println("哥們,請檢查您輸入的數據類型!");
        }

    }

    public static void method() {
        // 一、接收鍵盤輸入的整數a和b
        System.out.print("請輸入a的值:");
        int a = new Scanner(System.in).nextInt();
        System.out.print("請輸入b的值:");
        int b = new Scanner(System.in).nextInt();

        // 二、把ab作除法運算
        System.out.println("a / b = "+a / b);
    }

}

擴展

1 權限修飾符

用來控制一個類,或者類中的成員的訪問範圍
code

2. 向上轉型和向下轉型

在JAVA中,繼承是一個重要的特徵,經過extends關鍵字,子類能夠複用父類的功能,若是父類不能知足當前子類的需求,則子類能夠重寫父類中的方法來加以擴展。
在應用中就存在着兩種轉型方式,分別是:向上轉型和向下轉型
好比:父類Parent,子類Child
向上轉型:父類的引用指向子類對象Parent p=new Child();
說明:向上轉型時,子類對象當成父類對象,只能調用父類的功能,若是子類重寫了父類的方法就根據這個引用指向調用子類重寫方法。對象

向下轉型(較少):子類的引用的指向子類對象,過程當中必需要採起到強制轉型。blog

Parent  p = new Child();//向上轉型,此時,p是Parent類型
Child c = (Child)p;//此時,把Parent類型的p轉成小類型Child
//其實,至關於建立了一個子類對象同樣,能夠用父類的,也能夠用本身的

說明:向下轉型時,是爲了方便使用子類的特殊方法,也就是說當子類方法作了功能拓展,就能夠直接使用子類功能。繼承

3. 靜態變量和實例變量的區別

在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前則不加。it

在程序運行時的區別: 實例變量屬於某個對象的屬性,必須建立了實例對象,其中的實例變量纔會被分配空間,才能使用這個實例變量。
靜態變量不屬於某個實例對象,而是屬於類,因此也稱爲類變量,只要程序加載了類的字節碼,不用建立任何實例對象,靜態變量就會被分配空間,靜態變量就能夠被使用了。
總之,實例變量必須建立對象後才能夠經過這個對象來使用,靜態變量則能夠直接使用類名來引用io

相關文章
相關標籤/搜索