真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

黑馬程序員——異常篇

------- android培訓(xùn)、java培訓(xùn)、期待與您交流! ----------

創(chuàng)新互聯(lián)長期為上1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為云城企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站制作,云城網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

異常:

   是什么?是對問題的描述。將問題進(jìn)行對象的封裝。

-----------------------------------------------------

   異常體現(xiàn):

Throwable

|--Error

|--Exception

|--RuntimeException

       異常體系的特點(diǎn):異常體系中的所有類以及建立的對象都具備可拋性。也就是說可以被throw和throws關(guān)鍵字所操作。只有異常體系具備這個(gè)特點(diǎn)。

-------------------------------------------------------

   throw和throws的用法:

       throw定義在函數(shù)內(nèi),用于拋出異對象。

       throws定義在函數(shù)上,用于拋出異常類,可以拋出多個(gè),用逗號隔開。

       當(dāng)函數(shù)內(nèi)容有throw拋出異常對象,并未進(jìn)行try處理。必須要在函數(shù)上聲明,都在編譯失敗。

       注意,RuntimeException除外。也就是說函數(shù)內(nèi)如果拋出RuntimeException異常,函數(shù)上可以不用聲明。

------------------------------------------------------

   異常有兩種:

編譯時(shí)被檢測異常:

該異常在編譯時(shí),如果沒有處理(沒有throw也沒有try),編譯失敗。

運(yùn)行時(shí)異常(編譯時(shí)不檢測):

在編譯時(shí),不需要處理,編譯器不檢查。該異常的發(fā)生,建議不處理,讓程序停止。需要對代碼進(jìn)行修正。

       如果函數(shù)聲明了異常,調(diào)用者需要進(jìn)行處理。處理方法可以throws,可以try。

--------------------------------------------------

   異常處理語句:

       try

       {

需要被檢測的代碼;

       }

       catch ()

       {

處理異常的代碼;

       }

       finally

       {

一定會執(zhí)行的代碼;

       }

       有三個(gè)結(jié)合格式:

           1.try

{

}

catch ()

{

}

           2.try

{

}

catch ()

{

}

finally

{

}

           3.try

{

}

finally

{

}

   注意:

   1,finally中定義的通常是 關(guān)閉資源代碼。因?yàn)橘Y源必須釋放。

   2,finally只要一種情況不會執(zhí)行。當(dāng)執(zhí)行到System.exit(0);finally不會執(zhí)行。

--------------------------------------------

   自定義異常:

定義類繼承Exception或者RuntimeException

1,為了讓該自定義類具備可拋性。

2,讓該類具備操作異常的共性方法。

當(dāng)要定義自定義異常的信息時(shí),可以使用父類已經(jīng)定義好的功能。

將信息傳遞給父類構(gòu)造函數(shù)。

class MyException extends Exception

{

MyException(String message)

{

super(message);

}

}

   自定義異常:安卓java面向?qū)ο蟮乃枷?,將程序中出現(xiàn)的特有問題進(jìn)行封裝。

-------------------------------------------

   異常的好處:

1,將問題進(jìn)行封裝。

2,將正常流程代碼和問題處理代碼相分離,方便于閱讀。

-------------------------------------------        

異常的處理原則:

1,處理方式有兩種:try或者throws。

2,調(diào)用到拋出異常的功能時(shí),拋出幾個(gè)就處理幾個(gè)。

一個(gè)try對應(yīng)多個(gè)catch。

3,多個(gè)catch,父類的catch放到最下面。

4,catch內(nèi),需要定義針對性的處理方式。不要簡單的定義printStackTrace,輸出語句。也不要不寫。

       5,當(dāng)捕獲到的異常,本功能處理不了時(shí),可以繼續(xù)在catch中拋出。

try

{

throw newAException();

}

catch (AException e)

{

throw e;

}

如果該異常處理不了,但并不屬于該功能出現(xiàn)的異常。可以將異常轉(zhuǎn)換后,在拋出和該功能相關(guān)的異常。

       或者異??梢蕴幚恚?dāng)需要將異常產(chǎn)生的和本功能相關(guān)的問題提供出去。當(dāng)調(diào)用者知道,并處理。也可以將捕獲異常處理后,轉(zhuǎn)換新的異常。

try

{

throw new AException();

}

catch (AException e)

{

//對AException處理。

throw new BException();

           }

           比如:匯款的例子。

-------------------------------------------  

   異常的注意事項(xiàng):

       在子父類覆蓋時(shí):

1,子類拋出的異常必須是父類的異常的子類或者子集。

2,如果父類或者接口沒有異常拋出時(shí),子類覆蓋出現(xiàn)異常只能try不能throw。

示例:ExceptionTest.java 老師用電腦上課。

/*
畢老師用電腦上課。
開始思考上課中出現(xiàn)的問題:電腦藍(lán)屏,電腦冒煙。
當(dāng)冒煙發(fā)生后,老師不能繼續(xù)講課。出現(xiàn)了講師的問題,課時(shí)計(jì)劃無法完成。
思路:
定義兩個(gè)類,老師和電腦。
老師有姓名,上課方法(使用電腦上課),
電腦冒煙時(shí),講師有無法完成課時(shí)計(jì)劃的問題。
電腦有運(yùn)行方法、重啟方法。
考慮電腦可能出現(xiàn)的問題:電腦藍(lán)屏,電腦冒煙,定義兩個(gè)異常類。
*/
class LanPingException extends Exception
{
    LanPingException(String message)
    {
        super(message);
    }
}
class MaoYanException extends Exception
{
    MaoYanException(String message)
    {
        super(message);
    }
}
class NoPlanException extends Exception
{
    NoPlanException(String message)
    {
        super(message);
    }
}
class Teacher
{
    private String name;
    private Computer cmpt;
    Teacher(String name)
    {
        this.name = name;
        cmpt = new Computer();
    }
    public void prelect()throws NoPlanException
    {
        try
        {
            cmpt.run();//調(diào)用拋出異常的run方法
        }
        catch (LanPingException e)
        {
            cmpt.reset();
        }
        catch (MaoYanException e)
        {
            test();
            throw new NoPlanException("課時(shí)無法繼續(xù)"+e.getMessage());//處理不了,拋出異常,方法上拋出。
        }
        System.out.println("講課");
                                                                                                                       
    }
    public void test()
    {
        System.out.println("練習(xí)");
    }
}
class Computer
{
    private int state = 3;//代表電腦的狀態(tài)。
    public void run()throws LanPingException,MaoYanException
    {
        if (state == 2)
            throw new LanPingException("藍(lán)屏了");
        if (state  == 3)
            throw new MaoYanException("冒煙了");
        System.out.println("電腦運(yùn)行");
    }
    public void reset()
    {
        state = 1;//電腦恢復(fù)到正常狀態(tài)。
        System.out.println("電腦重啟");
                                                                                                                       
    }
}
class ExceptionTest
{
    public static void main(String[] args)
    {
        Teacher t = new Teacher("畢老師");
        try
        {
            t.prelect();
        }
        catch (NoPlanException e)
        {
            System.out.println(e.toString());
            System.out.println("換老師或者放假");
        }
                                                                                                                       
    }
}

示例:ExceptionTest1.java 圖形面積。

/*
有一個(gè)圓形和長方形。
都可以獲取面積。對于面積如果出現(xiàn)非法數(shù)值,視為是獲取面積出現(xiàn)問題。
問題通過一次來表示。
先要對這個(gè)程序進(jìn)行基礎(chǔ)設(shè)計(jì)。
思路:
1,定義抽象圖形類(或接口),獲取面積方法。
2,圓形,長方形類繼承圖形類。
3,對問題進(jìn)行描述。
*/
class NoValueException extends RuntimeException
{
    NoValueException(String message)
    {
        super(message);
    }
}
interface Shape
{
    void getArea();
}
class Rec implements Shape
{
    private int len,wid;
    Rec(int len,int wid)//throws NoValueException
    {
        if (len<=0 || wid <= 0)
            throw new NoValueException("非法值");
        this.len = len;
        this.wid = wid;
    }
    public void getArea()
    {
        System.out.println(len*wid);
    }
}
class Circle implements Shape
{
    public static final double PI = 3.14;
    private int radius;
    Circle(int radius)
    {
        if (radius <=0)
            throw new NoValueException("非法半徑");
        this.radius = radius;
    }
    public void getArea()
    {
        System.out.println(radius*radius*PI);
    }
}
class ExceptionTest1
{
    public static void main(String[] args)
    {
        /*
        try
        {
            Rec r = new Rec(-3,4);
            r.getArea();
        }
        catch (NoValueException e)
        {
            System.out.println(e.toString());
        }
        */
        //Rec r = new Rec(-3,4);
        //r.getArea();
        Circle c = new Circle(-3);
        c.getArea();
    }
}

   定義包用package關(guān)鍵字。

   1:對類文件進(jìn)行分類管理。

   2:給類文件提供多層名稱空間。

   如果生成的包不在當(dāng)前目錄下,需要最好執(zhí)行classpath,將包所在父目錄定義到classpath變量中即可。

   一般在定義包名時(shí),因?yàn)榘某霈F(xiàn)是為了區(qū)分重名的類。所以包名要盡量唯一。怎么保證唯一性呢?可以使用url域名來進(jìn)行包名稱的定義。

   package pack;//定義了一個(gè)包,名稱為pack。 注意:包名的寫法規(guī)范:所有字母都小寫。

   //package cn.itcast.pack.demo;

   類的全名稱是 包名.類名

   編譯命令:javac –d 位置(.當(dāng)前路徑) java源文件 (就可以自動生成包)

   包是一種封裝形式,用于封裝類,想要被包以外的程序訪問,該類必須public;類中的成員,如果被包以外訪問,也必須public;

   包與包之間訪問可以使用的權(quán)限有兩種:

       1:public

       2:protected:只能是不同包中的子類可以使用的權(quán)限。

java中的四種權(quán)限:

      范圍        public        protected       default      private

   同一個(gè)類中       ok             ok              ok          ok

   同一包中         ok             ok              ok      

   子類             ok          

   不同包中         ok

----------------------------------------------------

  Import- 導(dǎo)入:類名稱變長,寫起來很麻煩。為了簡化,使用了一個(gè)關(guān)鍵字:import,可以使用這個(gè)關(guān)鍵字導(dǎo)入指定包中的類。記住:實(shí)際開發(fā)時(shí),到的哪個(gè)類就導(dǎo)入哪個(gè)類,不建議使用*.

       import packa.*;//這個(gè)僅僅是導(dǎo)入了packa當(dāng)前目錄下的所有的類。不包含子包。

       import packa.abc.*;//導(dǎo)入了packa包中的子包abc下的當(dāng)前的所有類。

       如果導(dǎo)入的兩個(gè)包中存在著相同名稱的類。這時(shí)如果用到該類,必須在代碼中指定包名。

常見的軟件包:

       java.lang : language java的核心包,Object System  String Throwable jdk1.2版本后,該包中的類自動被導(dǎo)入。

       java.awt : 定義的都是用于java圖形界面開發(fā)的對象。

       javax.swing:提供所有的windows桌面應(yīng)用程序包括的控件,比如:Frame , Dialog, Table, List 等等,就是java的圖形界面庫。

       java.net : 用于java網(wǎng)絡(luò)編程方面的對象都在該包中。

       java.io : input  output 用于操作設(shè)備上數(shù)據(jù)的對象都在該包中。比如:讀取硬盤數(shù)據(jù),往硬盤寫入數(shù)據(jù)。

       java.util : java的工具包,時(shí)間對象,集合框架。

       java.applet: application+let 客戶端java小程序。server+let  --> servlet 服務(wù)端java小程序。

       

   jar :java的壓縮包,主要用于存儲類文件,或者配置文件等。

   命令格式:jar –cf 包名.jar 包目錄

   解壓縮:jar –xvf 包名.jar

   將jar包目錄列表重定向到一個(gè)文件中:jar –tf 包名.jar >c:\1.txt


當(dāng)前文章:黑馬程序員——異常篇
當(dāng)前鏈接:http://weahome.cn/article/jdjoei.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部