您好,登錄后才能下訂單哦!
------- android培訓、java培訓、期待與您交流! ----------
異常:
是什么?是對問題的描述。將問題進行對象的封裝。
-----------------------------------------------------
異常體現:
Throwable
|--Error
|--Exception
|--RuntimeException
異常體系的特點:異常體系中的所有類以及建立的對象都具備可拋性。也就是說可以被throw和throws關鍵字所操作。只有異常體系具備這個特點。
-------------------------------------------------------
throw和throws的用法:
throw定義在函數內,用于拋出異對象。
throws定義在函數上,用于拋出異常類,可以拋出多個,用逗號隔開。
當函數內容有throw拋出異常對象,并未進行try處理。必須要在函數上聲明,都在編譯失敗。
注意,RuntimeException除外。也就是說函數內如果拋出RuntimeException異常,函數上可以不用聲明。
------------------------------------------------------
異常有兩種:
編譯時被檢測異常:
該異常在編譯時,如果沒有處理(沒有throw也沒有try),編譯失敗。
運行時異常(編譯時不檢測):
在編譯時,不需要處理,編譯器不檢查。該異常的發生,建議不處理,讓程序停止。需要對代碼進行修正。
如果函數聲明了異常,調用者需要進行處理。處理方法可以throws,可以try。
--------------------------------------------------
異常處理語句:
try
{
需要被檢測的代碼;
}
catch ()
{
處理異常的代碼;
}
finally
{
一定會執行的代碼;
}
有三個結合格式:
1.try
{
}
catch ()
{
}
2.try
{
}
catch ()
{
}
finally
{
}
3.try
{
}
finally
{
}
注意:
1,finally中定義的通常是 關閉資源代碼。因為資源必須釋放。
2,finally只要一種情況不會執行。當執行到System.exit(0);finally不會執行。
--------------------------------------------
自定義異常:
定義類繼承Exception或者RuntimeException
1,為了讓該自定義類具備可拋性。
2,讓該類具備操作異常的共性方法。
當要定義自定義異常的信息時,可以使用父類已經定義好的功能。
將信息傳遞給父類構造函數。
class MyException extends Exception
{
MyException(String message)
{
super(message);
}
}
自定義異常:安卓java面向對象的思想,將程序中出現的特有問題進行封裝。
-------------------------------------------
異常的好處:
1,將問題進行封裝。
2,將正常流程代碼和問題處理代碼相分離,方便于閱讀。
-------------------------------------------
異常的處理原則:
1,處理方式有兩種:try或者throws。
2,調用到拋出異常的功能時,拋出幾個就處理幾個。
一個try對應多個catch。
3,多個catch,父類的catch放到最下面。
4,catch內,需要定義針對性的處理方式。不要簡單的定義printStackTrace,輸出語句。也不要不寫。
5,當捕獲到的異常,本功能處理不了時,可以繼續在catch中拋出。
try
{
throw newAException();
}
catch (AException e)
{
throw e;
}
如果該異常處理不了,但并不屬于該功能出現的異常。可以將異常轉換后,在拋出和該功能相關的異常。
或者異常可以處理,當需要將異常產生的和本功能相關的問題提供出去。當調用者知道,并處理。也可以將捕獲異常處理后,轉換新的異常。
try
{
throw new AException();
}
catch (AException e)
{
//對AException處理。
throw new BException();
}
比如:匯款的例子。
-------------------------------------------
異常的注意事項:
在子父類覆蓋時:
1,子類拋出的異常必須是父類的異常的子類或者子集。
2,如果父類或者接口沒有異常拋出時,子類覆蓋出現異常只能try不能throw。
示例:ExceptionTest.java 老師用電腦上課。
/* 畢老師用電腦上課。 開始思考上課中出現的問題:電腦藍屏,電腦冒煙。 當冒煙發生后,老師不能繼續講課。出現了講師的問題,課時計劃無法完成。 思路: 定義兩個類,老師和電腦。 老師有姓名,上課方法(使用電腦上課), 電腦冒煙時,講師有無法完成課時計劃的問題。 電腦有運行方法、重啟方法。 考慮電腦可能出現的問題:電腦藍屏,電腦冒煙,定義兩個異常類。 */ 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();//調用拋出異常的run方法 } catch (LanPingException e) { cmpt.reset(); } catch (MaoYanException e) { test(); throw new NoPlanException("課時無法繼續"+e.getMessage());//處理不了,拋出異常,方法上拋出。 } System.out.println("講課"); } public void test() { System.out.println("練習"); } } class Computer { private int state = 3;//代表電腦的狀態。 public void run()throws LanPingException,MaoYanException { if (state == 2) throw new LanPingException("藍屏了"); if (state == 3) throw new MaoYanException("冒煙了"); System.out.println("電腦運行"); } public void reset() { state = 1;//電腦恢復到正常狀態。 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 圖形面積。
/* 有一個圓形和長方形。 都可以獲取面積。對于面積如果出現非法數值,視為是獲取面積出現問題。 問題通過一次來表示。 先要對這個程序進行基礎設計。 思路: 1,定義抽象圖形類(或接口),獲取面積方法。 2,圓形,長方形類繼承圖形類。 3,對問題進行描述。 */ 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關鍵字。
1:對類文件進行分類管理。
2:給類文件提供多層名稱空間。
如果生成的包不在當前目錄下,需要最好執行classpath,將包所在父目錄定義到classpath變量中即可。
一般在定義包名時,因為包的出現是為了區分重名的類。所以包名要盡量唯一。怎么保證唯一性呢?可以使用url域名來進行包名稱的定義。
package pack;//定義了一個包,名稱為pack。 注意:包名的寫法規范:所有字母都小寫。
//package cn.itcast.pack.demo;
類的全名稱是 包名.類名
編譯命令:javac –d 位置(.當前路徑) java源文件 (就可以自動生成包)
包是一種封裝形式,用于封裝類,想要被包以外的程序訪問,該類必須public;類中的成員,如果被包以外訪問,也必須public;
包與包之間訪問可以使用的權限有兩種:
1:public
2:protected:只能是不同包中的子類可以使用的權限。
java中的四種權限:
范圍 public protected default private
同一個類中 ok ok ok ok
同一包中 ok ok ok
子類 ok
不同包中 ok
----------------------------------------------------
Import - 導入:類名稱變長,寫起來很麻煩。為了簡化,使用了一個關鍵字:import,可以使用這個關鍵字導入指定包中的類。記住:實際開發時,到的哪個類就導入哪個類,不建議使用*.
import packa.*;//這個僅僅是導入了packa當前目錄下的所有的類。不包含子包。
import packa.abc.*;//導入了packa包中的子包abc下的當前的所有類。
如果導入的兩個包中存在著相同名稱的類。這時如果用到該類,必須在代碼中指定包名。
常見的軟件包:
java.lang : language java的核心包,Object System String Throwable jdk1.2版本后,該包中的類自動被導入。
java.awt : 定義的都是用于java圖形界面開發的對象。
javax.swing:提供所有的windows桌面應用程序包括的控件,比如:Frame , Dialog, Table, List 等等,就是java的圖形界面庫。
java.net : 用于java網絡編程方面的對象都在該包中。
java.io : input output 用于操作設備上數據的對象都在該包中。比如:讀取硬盤數據,往硬盤寫入數據。
java.util : java的工具包,時間對象,集合框架。
java.applet: application+let 客戶端java小程序。server+let --> servlet 服務端java小程序。
jar :java的壓縮包,主要用于存儲類文件,或者配置文件等。
命令格式:jar –cf 包名.jar 包目錄
解壓縮:jar –xvf 包名.jar
將jar包目錄列表重定向到一個文件中:jar –tf 包名.jar >c:\1.txt
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。