java基础之Object类和异常
Object類和異常
1. Object類是所有類的父類(超類, 基類,上帝類);
里面有兩個常用的方法:
1> public String toString();// 默認輸出對象的地址值的字符串表示形式
2> public boolean equals(Object obj);// 默認比較的是兩個對象的地址值.
Object中第一個比較常見的方法
public String toString();// 默認輸出對象的地址值的字符串表示形式
注意點:
一個對象在使用println進行輸出的時候默認就是調用了Object中的toString方法,從而顯示的是地址值
只不過JDK中很多的類都已經重寫(覆蓋)了Object中的toString所以顯示的不是地址值.
這樣的類目前: String, StringBuilder, ArrayList
如果自定義的類需要輸出對象里面的內容, 那么也需要重寫Object中的toString方法;
Object中第二個比較常見的方法
public boolean equals(Object obj);// 默認比較的是兩個對象的地址值.(eclipse中自動生成equals方法, alt + shift + s 在按h)
注意點:
對于基本數據類型來講, == 比較的是數值
對于引用數據類型來講, == 比較的是地址值
對于引用數據類型來講,直接比較兩個對象的地址值,沒有任何意義,所以JDK中的很多類已經覆蓋了Object中的
equals方法,比如String類
我們自定義的類如果要想比較對象的內容是否相等, 也需要重寫Object中的equals方法.
2. 異常:
在java中所有的錯誤或者是異常都可以使用一個類來表示: java.lang.Throwable;
里面有很常用的三個類來表示:
Error: 表示錯誤的信息,一旦出現程序立即停止
Exception: 表示異常(編譯時的異常)的信息,一旦出現處理完程序正常運行.
RuntimeException: 表示運行時候的信息,是Exception的子類.
3.如何自定義一個異常呢?
JDK中提供的異常都是一些常用的類的信息, 不能把實際業務場景當中的異常全部都考慮進去,那么這個時候就需要自定異常
比如: 現實生活中,比如分數不能為負數, 比如: 處理年齡為負數的情況,需要自定義異常了.
如何自定義一個異常呢?
需要入伙.
編譯時異常: 需要定義類繼承自Exception
格式: public class 類名 extends Exception{...}
運行時異常: 需要定義類繼承自RuntimeException
格式: public class 類名 extends RuntimeException{...}
?
4. 異常的解析流程:
1> 一旦程序出現異常,JVM自動創建異常類的對象(如果是自定義的異常需要手動創建)
2> 一旦檢測到異常產生,JVM就會馬上拋出異常,(如果是自定義的異常需要手動拋出)
3> 接下來需要處理拋出來的異常,有兩種方式:
方式一: 使用關鍵字throws 拋
格式: public static void method() throws 異常類名{...}
方式二: 使用try_catch的方式處理(真處理)
格式:
try{
// 用來編寫可能出現問題的代碼
}catch(異常類名 對象名){
// 處理異常的一種方式,預案
}finally{
// 一般不管怎么樣都會執行的,用來使用釋放資源
}
注意點:
1> 在使用throws聲明拋出異常的時候,如果異常之間存在繼承關系,只需要寫父類異常即可.
2> 如果有多個異常,不存在繼承關系,可以使用逗號隔開.
如果自定創建一個異常類對象,該如何拋出,需要使用到關鍵字throw
throw: 主動將產生的對象進行拋出
格式: throw 異常對象;
--福利:面試題:
public class Demo {
public static void main(String[] args) {
int number = getElemet();
System.out.println("number = " + number);// 30
System.out.println("程序結束了");
}
public static int getElemet(){
int num = 10;
try{
// 一旦產生異常,try中后面的代碼不運行了.
int a = 1/0;
System.out.println("try : num = " + num);
return num;
}catch(ArithmeticException e){
num = 20;
return num;// 做兩件事情,1. 將num的值保存一份到緩沖區, 2. 然后再去執行finally中的代碼
}finally{
num = 30;
System.out.println("finally中的代碼執行了 num " + num);
return num;// 1.將num的值保存一份到緩沖區,現在的值變成了30;
}
}
}
return做兩件事情:
1> 返回一個值給調用方
2> 結束當前方法, 如果碰到異常中有finally先執行finally中的代碼. 然后再結束方法.
5. 在使用try_catch處理異常的時候,根據實際情況還有幾種格式:
1> try_catch結構中,如果出現類多個異常,想要一種處理方式,異常之間不存在繼承關系,可以在catch中并列寫出多個異常
格式: try{}catch(異常類名 A | 異常類名B 變量名){}finally{...}
2> try_catch結構中,如果出現多個異常存在繼承關系,大的異常需要寫在后面,并且希望單獨去處理每一個異常,使用多個catch
格式: try{}catch(異常類名A 變量名A){...}catch(異常類名B 變量名B){...}....
3> try_catch結構中,可以省略catch,確認沒有什么異常要抓取,可以省略掉catch,配合finally
格式: try{}finally{}
4> try_catch結構中,可以沒有finally.一般對于沒有什么資源想要釋放的.
格式: try{}catch(異常類名 變量名){}
5> try_catch結構中,任何結構中不能省略try, 并且不能只有try
6. 在繼承結構體系中,如果子類重寫了父類的方法,異常該如何處理
1> 如果父類方法沒有異常, 那么子類中出現了異常不能拋(throws), 只能try.(父親不壞, 兒子不能壞)
2> 父類中如果方法有異常, 子類中的異常和父類中異常如果有繼承關系,那么不能大于父類異常.(父親壞, 而不能更壞)
(實際使用場景,父類什么異常子類什么異常就好了.)
?
轉載于:https://www.cnblogs.com/youyouxiaosheng-lh/p/8119781.html
總結
以上是生活随笔為你收集整理的java基础之Object类和异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是空安全
- 下一篇: Popup窗口在XP+SP2下面受到限制