java編程中的異常分析及面向對象的思考總結[圖]

java編程中的異常分析及面向對象的思考總結[圖]
1.異常:
程序中出現的不正常現象。
2.異常的由來:
程序在運行的過程當中出現了不正常的狀況,程序把它當作對象提取了屬性行爲(名字,緣由,位置等信息)
造成了各類異常類
3.異常的分類:(throwable)
1.Error(錯誤):運行中出現的嚴重錯誤,不須要咱們進行更改。
2.Exception():運行中出現的不嚴重的錯誤,咱們能夠嘗試去更改.
4.Exception:分類:
第一種分類:系統異常:系統提早定義好的,咱們直接使用
自定義異常:須要咱們本身定義
第二種分類:編譯異常:在編譯階段拋出異常,處理異常
運行時異常:在運行階段拋出異常,處理異常
public class Demo8 {
public static void main(String[] args) {//4.這裏也沒有處理異常的能力,繼續向上拋,拋給JVM(java虛擬機)
//JVM的處理辦法:就是調用異常對象的打印方法,將異常的名字,位置,緣由打印到控制檯
Math math = new Math();
math.div(2, 0);//3.拋給了這裏,這裏也沒有處理異常的能力,繼續向上拋,拋給main
}
}
class Math{
public int div(int a,int b){//2.拋給了這裏,這裏也沒有處理異常的能力,繼續向上拋,拋給調用方法的位置
return a/b;//1.先建立除數爲零的異常對象(new ArithmeticException()),這裏沒有處理異常的能力
//將異常向上拋,拋給它所在的方法
}
}
5.異常的特色:
當程序出現多個異常的時候,程序會打印異常信息並中斷程序,因此當同時出現多個異常的時候,只能執行第一個.
6.常見的異常
public class Demo2 {
public static void main(String[] args) {
int[] arr = new int[]{4,5,6};
//數組下標越界異常  ArrayIndexOutOfBoundsException
//System.out.println(arr[7]);
arr = null;
//空指針異常  NullPointerException
System.out.println(arr[0]);
}
}html

java編程中的異常分析及面向對象的思考總結[圖]
7.對異常的處理
檢測異常,捕獲異常,讓異常不影響下面代碼的執行.
* try{
*         可能出現異常的代碼
* }catch(Exception e){//捕獲異常   e就是要捕獲的異常
*         對出現異常的代碼的處理過程
* }
*
* 繼續執行下面正常的代碼
public class Demo3 {
public static void main(String[] args) {
Math math = new Math();
try {
int value = math.div(4, 0);//3.拋到這裏  new ArithmeticException()
//只要try內部的代碼發生了異常,catch會馬上捕獲異常,因此這裏的代碼不會執行.
//只有try裏面的代碼沒有發生異常,這裏的代碼纔會執行.
System.out.println("value:"+value);
} catch (Exception e) {//4.捕獲異常: e =  new ArithmeticException()
//e.printStackTrace();//能夠打印異常的位置,緣由,名字等信息
System.out.println(e.getMessage());//異常的緣由
//System.out.println(e.toString());//異常的名字,緣由
System.out.println("處理異常的代碼");
}
System.out.println("go on");
}
}
class Math{
public int div(int a,int b)//2.拋到這裏  new ArithmeticException()
{
return a/b;//1.產生並拋出  new ArithmeticException()
}
}
8.多異常的處理
* try{
*         可能出現異常的代碼
* }catch(異常一 e){//捕獲異常 e就是要捕獲的異常
*         對出現異常的代碼的處理過程
* }catch(異常二 e){//捕獲異常 e就是要捕獲的異常
*         對出現異常的代碼的處理過程
* }catch(Exception e){//捕獲異常 e就是要捕獲的異常
*         對出現異常的代碼的處理過程
* }
*
* 繼續執行下面正常的代碼
public static void main(String[] args) {
Math1 math1 = new Math1();
try {
math1.div(3, 0);
} catch (ArithmeticException e) {
e.printStackTrace();
}catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}catch (Exception e) {//注意:必定要將包含Exception的異常捕獲放後面,否則後面的異常執行不到了父類異常全部異常都能接收
e.printStackTrace();
}
System.out.println("go on");
}
}
class Math1{
int[] arr = {3,5};
public int div(int a, int b){
System.out.println(arr[1]);
return a/b;
}
}
* try{
*         可能出現異常的代碼
* }catch(Exception e){//捕獲異常   e就是要捕獲的異常
*         對出現異常的代碼的處理過程
* }finally{
*         必須執行的代碼:做用:用於資源的釋放:好比:多線程中的鎖對象,流的關閉,數據庫的關閉等
* }
*
*
*
* 繼續執行下面正常的代碼
*
* try{
*         獲取資源
* }finally{
*         釋放資源.
*         必須執行的代碼:做用:用於資源的釋放:好比:多線程中的鎖對象,流的關閉,數據庫的關閉等
* }
public class Demo5 {
public static void main(String[] args) {
Math2 math2 = new Math2();
try {
math2.div(22, 0);
} catch (ArithmeticException e) {
e.printStackTrace();
//return;//讓當前的方法結束,finally裏面的代碼仍是能夠執行
System.exit(0);//退出程序,finally裏面的代碼不會再執行
} finally {
//必須執行的代碼
System.out.println("finally");
}
System.out.println("go on");
}
}
class Math2{
public int div(int a,int b)//2.拋到這裏  new ArithmeticException()
{
int[] arr = {3,4};
System.out.println(arr[1]);
return a/b;//1.產生並拋出  new ArithmeticException()
}
}
9.自定義異常
自定義異常:本身定義的異常類,因爲Exception裏面有異常的基本功能,通常咱們都寫Exception的子類
*
* 爲何要有自定義異常?
* 答:系統沒有定義的異常須要咱們本身定義,咱們解決的是系統沒有解決的問題.
*
* 好比:訂單異常     用戶信息異常    除數爲負數
*
* 異常的分類:
* 編譯異常:在編譯階段拋出,處理的異常---除RuntimeException之外的全部異常
*             全部相關的工做都要由咱們本身完成
* 運行時異常:在運行階段拋出,處理的異常--RuntimeException異常
*             全部的工做咱們均可以無論
*
* 異常處理的方式:
* 1.異常的聲明
* 異常聲明後,調用者去處理,調用者不處理,繼續聲明直到交給JVM
* 2.trycatch
* 實現的是真正的對異常的處理
*
*
* 讓誰去處理異常比較合適?
* 誰調用可能出現異常的方法,誰負責處理異常
*/
//自定義一個負數異常類:
class FuShuException extends Exception{
public FuShuException() {
}
public FuShuException(String message) {
super(message);
}
}
public class Demo6 {
public static void main(String[] args)
{
Math3 math3 = new Math3();
//1.trycatch  2.繼續聲明
try {
math3.div(3, -2);
} catch (FuShuException e) {
e.printStackTrace();
}
}
}
class Math3{
//聲明異常,告訴別人我有可能發生異常
public int div(int a,int b) throws FuShuException
{
/*
*throw是拋出的意思 
*throws是聲明異常的意思
*/
if (b<0) {
throw new FuShuException("除數爲負數了");//手動生成並拋出除數爲負數異常
}
return a/b;
}
}
JAVA面向對象:
1. 萬物皆對象
2. 面向對象和麪向過程的區別:
面向過程主要是描述一件事情或者是一個過程的執行
面向對象編程主要是用語言描述將現實世界中存在的事物,或者規律。無限接近機器識別的語言。
3.對象:
對象包括  屬性  和  特徵 
4.類:類是全部對象的抽象概念或者集合(物以類聚),對象稱爲類的具體實例。
類是抽象的,對象是具體
5.面向對象的三大特徵:
封裝 , 繼承 , 多態
6.封裝:隱藏內部實現細節,對外提供公共的訪問方法;
好處:代碼設計者角度,安全性,防止代碼被修改破壞; 
調用者角度,忽略實現細節,只關注功能怎麼用。
設計:成員變量儘可能私有化(private),對外提供公有方法
繼承:從當前類中派生出一個新類,這個新類能夠得到已有類的所有(非private)屬性和方                法,並能夠添加本身的屬性和方法。即子類繼承父類。
多態:對象的多種形態,以繼承爲基礎
對象的多態:向上轉型  和向下轉型
方法的多態:方法的重載方法的覆寫
7.package  包
對全部class進行分類,以便方便管理
命名規則:小寫字母,通常都是四級目錄:com.公司名.項目名.模塊名稱
8.構造方法:什麼是構造方法?構造方法是一個類在初始化的形態,類自己自帶特徵。
jvm在構建一個類的時候,會構建一個默認的構造方法。
構造方法的特色:
公有的、和類名相同、沒有返回值
構造方法的用處在哪裏?
初始化成員變量。
構造方法越多,表明在這個類初始化的時候,形態越多,功能約強大。
構造方法的重載概念(overload)
構造方法的重載,參數類型不一樣,參數個數不一樣,參數次序不一樣 都能構成重載。僅僅限於本類。
9.類的成員方法:
方法的概念:方法是一個類接收外部信息的其中的渠道。
方法在一個類中專門解決業務邏輯的。
public  返回值 方法名(參數列表){
// return 返回值;
}
10.方法參數的傳遞:傳值或者傳遞引用
方法的參數傳遞只能傳遞兩種類型:
若是要是傳值,就是一個具體的值
若是要傳遞引用,那麼傳遞的該對象的地址
11.static 用來修飾靜態的方法,代碼塊或者變量,能夠直接使用類名調用,不須要new對象調用
static 修飾的變量在內存中只有一個地址
使用場景:只有在工具類中才可使用,節省內存空間
12.static 用來修飾靜態的方法、靜態的代碼模塊、靜態變量
若是使用static所修飾的方法或者變量,可使用類名直接調用,
不須要new對象來調用.
static 修飾的變量在內存中只有惟一的一個地址,
使用場景:只有在工具類中才可使用,該方法被頻繁的調用,確實節省內存空間
13.類的繼承 extends
類與類的關係有哪些?
第一種是關聯(has-a)關係(聚合)、第二種是繼承(is-a)關係
若是是關聯關係,那麼就是類調用類的關係。
全部的對象都是繼承Object類,java是單根繼承的特色
單根繼承的好處是什麼?很差的地方?
子類能夠調用父類的方法,減小代碼的冗餘度。
在父類的角度考慮問題,繼承能夠延伸父類的功能(擴大功能)
若是子類繼承父類,子類能夠調用父類的公有方法,不能調用父類的私有方法
子類調用父類的時候,父類的構造方法會被調用
14.super關鍵字只能存在子類中,主要在子類的方法中調用父類的方法,包括構造方法,通常寫在程序的第一行
super能夠在子類的構造方法中調用父類的構造方法super();
重寫(override)子類覆蓋父類的同名方法,好處在於擴充子類的方法功能。
里氏替換原則,若是B類和C類有相同的屬性和方法,就應該把相同的屬性和方法提取到A類中,讓B類和C類繼承A類
15.final關鍵字
表示最終的。若是用final 所修飾的變量,稱爲常量(不能被改變或者賦值)。
若是final修飾一個方法,那麼該方法在子類中不能被重寫。
若是final 修飾一個類,那麼這個類不能被繼承。
16.抽象類 abstract 關鍵字
public abstract class 類名{
}
抽象類和普通類的區別是什麼?抽象類是不能被實例化的,也就是不能使用new 關鍵字,普通類是能夠實例化的
若是一個類有抽象方法,那麼這個類必然是抽象類,反之抽象類不必定有抽象方法。追風箏的人讀後(http://www.simayi.net/duhougan/5505.html)體會,定義一個抽象類的用途在哪裏?抽象的概念是不須要實際去作的,可是在實際應用中有兩種場景用途:
一、父類某一個功能或者方法,須要子類強行去重寫的,那麼該方法必須是抽象的,這個類必須是抽象類。
二、父類對於某一個方法,沒法預知子類會怎麼實現,那麼該方法必須是抽象的。
抽象類在繼承的關係圖中起到什麼做用?
承上啓下的做用。
17.接口 interface
接口的概念:
接口是一種標準,全部實現該接口的子類都要實現這個標準。
接口也是一種契約,全部實現該接口的子類都要實現該契約的條款。
接口也是一種身份特徵,全部的子類都具備該身份特徵。
接口裏面的全部方法都是抽象的、公有的。
接口裏全部的成員變量都是常量。
接口能夠繼承嗎?接口是能夠繼承接口的。
18.多態
什麼是多態?一個事物在不一樣的條件下,所表現的多種形態。
在開發中使用多態的場景,主要是使用在方法的參數傳遞上,能夠傳遞接口、也能夠傳遞抽象類
instanceof 來判斷兩個類之間是否有關係
對象的向上和向下轉型:
向上轉型:統一標準   A父類  cdef子類均可以按照父類的標準執行,向下轉型的意義:使用子類獨有的方法。java

相關文章
相關標籤/搜索