異常:是對問題的描述,將問題進行對象封裝,
異常的體系:
Throwable:
1.Error
2.Exception
1.RuntimeException
異常體系的特點:
異常體系中的所有類以及建立的對象都具備可拋性。可以被throw和throws關鍵字所操作,只有異常體系具備這個特點。
throw和throws的用法區別:
throw定義在函數內,用于拋出異常對象。
throws定義在函數上,用于拋出異常類,可以拋出多個并用逗號隔開。
當函數內容有throw拋出異常對象,并未進行trycatch處理時,必須要在函數上throws聲明,否則會編譯失敗。RuntimeException除外,當函數內如果拋出的是RuntimeExcpetion異常,函數上可以不用聲明。
異常處理語句:try{ 需要被檢測的代碼;}catch (){ 處理異常的代碼;}finally{ 一定會執行的代碼;}
finally:一定會被執行的代碼,通常定義的是用于關閉資源的代碼.
特殊情況:當在finally語句之前執行了System.exit(0); 語句時,finally語句不會被執行.
自定義異常:
定義類繼承Exception或者RuntimeException
1.為了讓自定義類具備可拋性。
2.讓該類具備操作異常的共性方法。
當要定義自定義異常的信息時,可以使用父類已經定義好的功能.將異常信息傳遞給父類的構造函數。
class xxxException extends Exception
{
xxxException(String message)
{
super(message);
}
}
自定義異常:根據Java中的面向對象思想,將程序中出現的特有問題進行封裝。
在子父類覆蓋時:1.子類拋出的異常必須是父類的異常的子類或者子集。2.如果父類或者接口沒有異常拋出時,子類覆蓋出現異常,只能trycatch處理而不能用throw/throws拋出。
1 /* 2 求圓,和長方形的面積 3 */ 4 class NoValueException extends RuntimeException //Exception 5 { 6 //PRivate String message; 7 NoValueException(String message) 8 { 9 super(message); 10 } 11 } 12 13 /* 14 abstract class Shape 15 { 16 abstract void getArea(); 17 } 18 19 class rec extends Shape 20 */ 21 //接口也是一種抽象方法 22 interface Shape 23 { 24 void getArea(); 25 } 26 class Rec implements Shape 27 { 28 private int len,wid; 29 Rec(int len,int wid) //throws NoValueException 30 { 31 if(len<=0 ||wid<=0) 32 throw new NoValueException("len,wid的值非法"); 33 /* 34 { 35 System.out.println("len,wid值非法"); 36 } 37 */ 38 39 this.len = len; 40 this.wid = wid; 41 42 } 43 public void getArea() 44 { 45 System.out.println("長方形的面積是:"+len*wid); 46 } 47 } 48 class Circle implements Shape 49 { 50 private double radius; 51 public static final double PI = 3.14; 52 Circle(double radius) throws NoValueException 53 { 54 if(radius<=0) 55 throw new NoValueException("出現了非法值的情況"); 56 57 this.radius = radius; 58 } 59 public void getArea() 60 { 61 System.out.println("圓的面積是:"+radius*radius*PI); 62 } 63 64 } 65 66 class ExceptionTest2 67 { 68 public static void main(String args[]) 69 { 70 /* 71 //繼承的是Exception時. 72 try 73 { 74 Rec r = new Rec(-3,4); 75 r.getArea(); 76 } 77 catch(NoValueException e) 78 { 79 System.out.println(e.toString()); 80 } 81 */ 82 //繼承的是RuntimeException時,可以不需要進行try操作.出現異常程序會停止. 83 Rec r = new Rec(3,4); 84 r.getArea(); 85 86 87 try 88 { 89 Circle c = new Circle(-3); 90 c.getArea(); 91 } 92 catch(NoValueException e) 93 { 94 System.out.println(e.toString()); 95 } 96 97 98 99 100 }101 102 }包:package
作用:讓源文件與類文件相分離.
格式:
package 包名; //該定義語句要定義在代碼的第一行.(最上方)
有了包名以后,類名的全稱就是: 包名.類名 (該類要在包上)
當包中的類相互繼承以后,可以訪問被protected修飾的屬性和方法.包與包之間可以使用的權限有兩種:public和protected
四種權限之間能否能訪問如下所示:
public protected default(默認權限) private
同一個類中 Ok Ok Ok Ok
同一個包中 Ok Ok Ok No
子類 Ok Ok No No
不同包中 Ok No No No
注意: 在一個java文件中,不能有兩個或者兩個以上的公有類或者接口.
導入:import關鍵字.
作用,用于簡化類名的書寫.當import以后, 類名可以直接簡寫,不在需要 包名.類名 的形式書寫了.
面向對象好像終于學完了,好多還是不是很懂,不過時間不等人,只能邊自學后面的邊繼續看面向對象的有關知識了.
新聞熱點
疑難解答