Java 知識總結(jié) (1)

1.面向?qū)ο蟮娜齻€基本特征是:封裝波势、繼承、多態(tài)

封裝

封裝瘾英,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對象操作孝凌,對不可信的進行信息隱藏方咆。

簡單的說,一個類就是一個封裝了數(shù)據(jù)以及操作這些數(shù)據(jù)的代碼的邏輯實體蟀架。在一個對象內(nèi)部瓣赂,某些代碼或某些數(shù)據(jù)可以是私有的,不能被外界訪問片拍。通過這種方式煌集,對象對內(nèi)部數(shù)據(jù)提供了不同級別的保護,以防止程序中無關(guān)的部分意外的改變或錯誤的使用了對象的私有部分捌省。

在Java中類中成員的屬性有:public苫纤, protected, <default>纲缓, private卷拘,這四個屬性的訪問權(quán)限依次降低。

封裝主要在于實現(xiàn)了我們能修改自己實現(xiàn)的代碼祝高,而不用調(diào)用修改程序的片段
封裝的優(yōu)點:良好的封裝能夠減少耦合栗弟,類內(nèi)部結(jié)構(gòu)可以自由修改,可以對成員變量進行準確控制工闺,隱藏信息實現(xiàn)細節(jié)乍赫。

為了實現(xiàn)良好的封裝,將類的成員聲明為priviate,通過public方法對變量進行訪問陆蟆,對一個變量的操作雷厂,一般有讀取和賦值的2個操作,為了實現(xiàn)這兩個操作叠殷,一個是getXX(XX表示成員要訪問變量的名字)用來讀取成員變量改鲫,另一個是setXX()用來對變量賦值

多態(tài)
多態(tài)是同一個行為具有不同表現(xiàn)形式或形態(tài)能力
多態(tài)是同一個接口,使用不同實例而執(zhí)行不同操作
多態(tài)是面向?qū)ο笳Z言重要特性,類似指針或引用派生類的對象钩杰,在具體訪問時實現(xiàn)方法的動態(tài)綁定

多態(tài)存在三個必要條件
繼承纫塌,重寫,父類引用指向子類對象

2.重寫和重載的區(qū)別

重寫:
重寫(Override)是父類與子類之間多態(tài)性的一種表現(xiàn)讲弄。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Override)依痊。子類的對象使用這個方法時避除,將調(diào)用子類中的定義,對它而言胸嘁,父類中的定義如同被“屏蔽”了瓶摆。

重載:
重載(Overload)是一個類中多態(tài)性的一種表現(xiàn)。如果在一個類中定義了多個同名的方法性宏,它們參數(shù)列表不同群井,則稱為方法的重載(Overload)

區(qū)別:重載實現(xiàn)于一個類中;重寫實現(xiàn)于子類中。

重載(Overload):是一個類中多態(tài)性的一種表現(xiàn)毫胜,指同一個類中不同的函數(shù)使用相同的函數(shù)名书斜,但是函數(shù)的參數(shù)個數(shù)或類型不同〗褪梗可以有不同的返回類型;可以有不同的訪問修飾符;可以拋出不同的異常荐吉。調(diào)用的時候根據(jù)函數(shù)的參數(shù)來區(qū)別不同的函數(shù)。

重寫(Override): 是父類與子類之間的多態(tài)性口渔,是子類對父類函數(shù)的重新實現(xiàn)样屠。函數(shù)名和參數(shù)與父類一樣,子類與父類函數(shù)體內(nèi)容不一樣缺脉。子類返回的類型必須與父類保持一致痪欲;子類方法訪問修飾符的限制一定要大于父類方法的訪問修飾(public>protected>default>private);子類重寫方法一定不能拋出新的檢查異彻ダ瘢或者比被父類方法申明更加寬泛的檢查型異常业踢。

重載

package com.etime09;

public class Goods {  //創(chuàng)建一個商品類 
private String ID;
private int price;
private String name;
private String manufactureDate;
//實現(xiàn)構(gòu)造函數(shù)的重載 參數(shù)個數(shù)或類型不同
public Goods() {
    super();
    // TODO Auto-generated constructor stub
}
public Goods(String iD) {
    super();
    ID = iD;
}
public Goods(String iD, int price) {
    super();
    ID = iD;
    this.price = price;
}
public Goods(String iD, int price, String name) {
    super();
    ID = iD;
    this.price = price;
    this.name = name;
}
public Goods(String iD, int price, String name, String manufactureDate) {
    super();
    ID = iD;
    this.price = price;
    this.name = name;
    this.manufactureDate = manufactureDate;
}

}

重寫

package com.etime09;

public class Person {  //創(chuàng)建一個父類Person
private String name;
private int age;
//父類中寫一個eat()方法
    public void eat() {
        System.out.println("人都要吃飯");
        }
}
---------------------------------------------
package com.etime09;

public class Student extends Person {  //Student子類繼承Person父類
@Override
//重寫eat()方法   方法名,參數(shù)秘蛔,返回類型相同陨亡;方法體內(nèi)容不同
public void eat() {
    System.out.println("學生喜歡吃肉");
            }
}
image.png

多態(tài)
多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。
多態(tài)就是同一個接口深员,使用不同的實例而執(zhí)行不同操作负蠕。
多態(tài)存在的三個必要條件:繼承,重寫倦畅,父類引用指向子類對象

當使用多態(tài)方式調(diào)用方法時遮糖,首先檢查父類中是否有該方法,如果沒有叠赐,則編譯錯誤欲账;如果有屡江,再去調(diào)用子類的同名方法。
多態(tài)的好處:可以使程序有良好的擴展赛不,并可以對所有類的對象進行通用處理惩嘉。

是否可以繼承string類? 不可以

3.JAVA 類支持多繼承嘛? 可以實現(xiàn)多接口嘛踢故? JAVA不支持多繼承文黎,但類可以實現(xiàn)多個接口,間接實現(xiàn)多繼承殿较,也可以通過內(nèi)部類

抽象類
抽象類必須用 abstract 修飾耸峭,子類必須實現(xiàn)抽象類中的抽象方法,如果有未實現(xiàn)的淋纲,那么子類也必須用 abstract 修飾劳闹。抽象類默認的權(quán)限修飾符為 public,可以定義為 public 或 procted洽瞬,如果定義為 private本涕,那么子類則無法繼承。抽象類不能創(chuàng)建對象

抽象類和普通類的區(qū)別
抽象類必須用public片任、procted 修飾(如果為private修飾偏友,那么子類則無法繼承,也就無法實現(xiàn)其抽象方法)对供。默認缺省為 public

抽象類無法創(chuàng)建對象
如果一個子類繼承抽象類位他,那么必須實現(xiàn)其所有的抽象方法。如果有未實現(xiàn)的抽象方法产场,那么必須定義為 abstract

接口
接口中的變量隱式的使用 public static final 修飾鹅髓,并且需要給出初始值。方法隱式的使用 public abstract 修飾(并且只能是 public 京景,如果是 private窿冯,procted,那么就編譯報錯)确徙。接口中的方法默認不能有具體的實現(xiàn)(JDK1.8開始可以有默認的實現(xiàn))

4.接口和抽象類的區(qū)別

1.抽象類只能繼承一次醒串,但是可以實現(xiàn)多個接口
接口和抽象類必須實現(xiàn)其中所有的方法,抽象類中如果有未實現(xiàn)的抽象方法鄙皇,那么子類也需要定義為抽象類芜赌。抽象類中可以有非抽象的方法

2.接口中的變量必須用 public static final 修飾,并且需要給出初始值伴逸。所以實現(xiàn)類不能重新定義缠沈,也不能改變其值。

3.接口中的方法默認是 public abstract,也只能是這個類型洲愤。不能是 static颓芭,接口中的方法也不允許子類覆寫,抽象類中允許有static 的方法柬赐。

接口和抽象都是繼承樹的上層亡问,共同點如下:
1.都是上層的抽象層
2.都不能實現(xiàn)實例化
3.都能包含抽象的方法,這些抽象的方法肛宋,用于描述類具備的功能

區(qū)別如下:
1.在抽象類中可以寫非抽象的方法玛界,從而避免在子類中重復書寫他們,這樣可以代碼的復用性悼吱,這是抽象類的優(yōu)勢,接口中只能有抽象方法
2.抽象級別(從高到低)良狈,接口》抽象類》實現(xiàn)類
3.接口的設(shè)計目的后添,是對類的行為進行約束,側(cè)重與動作薪丁,而抽象類的設(shè)計目的是代碼復用遇西,
4.抽象類是 is a 關(guān)系,而接口是 has a 關(guān)系(實現(xiàn)多接口)

5.簡要敘述下Java中修飾符的作用域及可見性严嗜?

public:修飾的成員可以在任何范圍內(nèi)直接訪問粱檀,只是一種最寬松的訪問控制等級。需要注意的漫玄,所謂的直接訪問仍需要先創(chuàng)建或獲得一個相應類的對象然后才可以使用”對象名.成員“的方式訪問其屬性或調(diào)用其方法茄蚯,但是出于信息封裝和隱藏的需要一般不提倡把成員聲明為public的,而構(gòu)造方法和需要外界直接調(diào)用的普通方法則適合聲明為public.

protected:修飾的成員可以在其所在類中睦优、同一包中及子類中(無論子類在不在同一個包)被直接訪問渗常,但不能在位于不同包中的非子類中被直接訪問,這里需要特別聲明:在位于不同包的子類中必須是子類的對象才能直接訪問其父類的protected成員汗盘,而父類自身的對象反而不能訪問其所在類中聲明的protected成員皱碘。

default:缺省訪問修飾符的成員只能在其所在類中或包中直接訪問,在不同包中即使是不同包的子類也不能直接訪問隐孽。

private:成員只能在所在類中被直接訪問癌椿,是4種訪問等級最高的一個。

image.png

equals() 和 “==” 操作用于對象的比較菱阵,檢查對象的相等性踢俄,前者是方法,后者是操作符送粱。

總結(jié):
1.一般使用==比較原生類型如:boolean,int,char等等褪贵,使用equals()比較對象
2.如果兩個引用指向相同的對象==返回true,equals()的返回依賴于具體業(yè)務(wù)實現(xiàn),一般重寫equals方法,同樣重寫hashcode方法脆丁,默認的equals實現(xiàn)是與“==”一樣的
3.字符串的使用對比使用equals()代替==操作符

6.一個static 方法內(nèi)可以調(diào)用非static方法嘛世舰?

不可以,因為非static要與關(guān)聯(lián)對象關(guān)聯(lián)在一起槽卫,必須創(chuàng)建一個對象后跟压,才能在對象上進行方法調(diào)用,當一個static方法被調(diào)用時歼培,可能還沒有創(chuàng)建任何實例對象震蒋,如果從一個static方法中,發(fā)出對非static方法的調(diào)用,static方法是靜態(tài)方法躲庄,是屬于類的方法查剖,非static方法是屬于對象的方法,所以在static方法中想要調(diào)用非static方法噪窘,要先創(chuàng)建一個對象笋庄,再有這個對象來調(diào)用非static方法。

7.Java靜態(tài)變量與實例變量的區(qū)別

(1) 在語法定義上區(qū)別:靜態(tài)變量前要加static關(guān)鍵字倔监,而實例變量前則不加
(2) 程序運行時的區(qū)別:實例變量屬于某個對象屬性直砂,必須創(chuàng)建了實例對象,其中實例變量才會被分配空間浩习,才能使用這個實例變量静暂。靜態(tài)變量不屬于某個實例對象,而屬于類谱秽,所以稱為類變量洽蛀,只要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實例對象弯院,靜態(tài)變量就會被分配空間辱士,只分配一次,靜態(tài)變量就可以被使用听绳∷痰猓總之,實例變量必須創(chuàng)建對象后才能通過這個對象使用椅挣,靜態(tài)變量可以直接使用類來引用头岔。

8.int和Integer的區(qū)別

1、Integer是int的包裝類鼠证,int則是java的一種基本數(shù)據(jù)類型
2峡竣、Integer變量必須實例化后才能使用,而int變量不需要
3量九、Integer實際是對象的引用适掰,當new一個Integer時颂碧,實際上是生成一個指針指向此對象;而int則是直接存儲數(shù)據(jù)值
4类浪、Integer的默認值是null载城,int的默認值是0

9. StringBuilder,StringBuffer和String區(qū)別

1.三者在執(zhí)行速度方面的比較:StringBuilder > StringBuffer > String
(為啥字符串是最低的工作效率呢?String類型是不可改變的對象了费就,由于這種機制诉瓦,每當用String操作字符串時,實際上是在不斷的創(chuàng)建新的對象力细,而原來的對象就會變?yōu)槔唬牵没厥盏舨窃瑁上攵@樣執(zhí)行效率會有多底。)

  1. StringBuilder:線程非安全的
      StringBuffer:線程安全的

(當我們在字符串緩沖去被多個線程使用時候眠蚂,JVM不能保證StringBuilder的操作是安全的煞聪,雖然他的速度最快,但是可以保證StringBuffer是可以正確操作的逝慧。當然大多數(shù)情況下就是我們是在單線程下進行的操作米绕,所以大多數(shù)情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因馋艺。)

對于三者使用的總結(jié):
1.如果要操作少量的數(shù)據(jù)用 = String
2.單線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuilder
3.多線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuffer

StringBuffer和StringBuilder的相同點就是,他們都是可變長度 的字符串迈套,他們兩者之間的方法使用幾乎可以互通捐祠。而且相比于字符串來說,StringBuffer和StringBuilder的執(zhí)行效率要高出很多桑李。

StringBuffer和StringBuilder的不同點我們可以從以下幾個方面來談

首先踱蛀,兩者的英文名稱就不一樣,StringBuffer是字符串緩沖贵白,StringBuilder是字符創(chuàng)生成器

其次率拒,StringBuffer是線程安全的,StringBuilder是非線程安全禁荒。正因為他們有這樣的線程不同點猬膨,所以導致StringBuilder的執(zhí)行效率遠比StringBuffer要強悍很多。StringBuffer起始于jdk 1.0呛伴、StringBuilder起始于jdk 1.5

當然了勃痴,這也需要分場景和業(yè)務(wù)需求,若果單線程下面操作字符串緩沖的話热康,我建議使用StringBuilder沛申。若果是多線程下字符串緩沖操作,我建議使用StringBuffer姐军。因為StringBuffer使用了線程同步铁材,他會對當前的線程進行一個小小的檢查尖淘,保證其安全運行。雖然執(zhí)行速度不高著觉,但是換回來了安全也是值得的村生,畢竟我們都知道,Java語言把安全看的比什么都要重要固惯。

image.png

10. JAVA 初始化原則

使用場景
在java程序中梆造,當實例化對象時,對象的所在類的所有成員變量首先要進行初始化葬毫,只有當所有類成員完成初始化后镇辉,才會調(diào)用對象所在類的構(gòu)造函數(shù)創(chuàng)建對象。

原則
變量優(yōu)先于塊贴捡、靜態(tài)優(yōu)先于非靜態(tài)忽肛。
父類優(yōu)先于派生類初始化。
按照成員變量定義的順序來進行初始化烂斋,即使變量定義散布于方法定義之中屹逛,它們?nèi)匀辉谌魏畏椒ǎò?gòu)造器)被調(diào)用前初始化。

初始化順序
父類靜態(tài)變量
父類靜態(tài)代碼塊
子類靜態(tài)變量
子類靜態(tài)代碼塊
父類非靜態(tài)變量
父類非靜態(tài)代碼塊
父類構(gòu)造函數(shù)
子類非靜態(tài)變量
子類非靜態(tài)代碼塊
子類構(gòu)造函數(shù)

11. 當try,catch中有return返回時汛骂,finally中代碼會執(zhí)行嘛

一罕模、無論有沒有異常,finally中的代碼都會執(zhí)行
二帘瞭、當try淑掌、catch中有return時,finally中的代碼依然會繼續(xù)執(zhí)行
三蝶念、finally是在return后面的表達式運算以后執(zhí)行的抛腕,此時并無返回運算以后的值,而是把值保存起來媒殉,無論finally對該值作任何的改變担敌,返回的值都不會改變,依然返回保存起來的值廷蓉。也就是說方法的返回值是在finally運算以前就肯定了的全封。
四、若是return的數(shù)據(jù)是引用數(shù)據(jù)類型桃犬,而在finally中對該引用數(shù)據(jù)類型的屬性值的改變起做用售貌,try中的return語句返回的就是在finally中改變后的該屬性的值。
五疫萤、finally代碼中最好不要包含return颂跨,程序會提早退出,也就是說返回的值不是try或catch中的值測試

先執(zhí)行try中的語句扯饶,包括return后面的表達式恒削,
有異常時,先執(zhí)行catch中的語句池颈,包括return后面的表達式,
而后執(zhí)行finally中的語句,若是finally里面有return語句,會提早退出钓丰,
最后執(zhí)行try中的return躯砰,有異常時執(zhí)行catch中的return。指針

在執(zhí)行try携丁、catch中的return以前必定會執(zhí)行finally中的代碼(若是finally存在)琢歇,若是finally中有return語句,就會直接執(zhí)行finally中的return方法梦鉴,因此finally中的return語句必定會被執(zhí)行的李茫。編譯器把finally中的return語句標識為一個warning.

11. final,finally和finalizie的區(qū)別

1.簡單區(qū)別:
final用于聲明屬性,方法和類肥橙,分別表示屬性不可交變魄宏,方法不可覆蓋,類不可繼承存筏。
finally是異常處理語句結(jié)構(gòu)的一部分宠互,表示總是執(zhí)行。
finalize是Object類的一個方法椭坚,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法予跌,供垃圾收集時的其他資源回收,例如關(guān)閉文件等善茎。

2.中等區(qū)別:
雖然這個單詞在Java中都存在匕得,但是并沒太多關(guān)聯(lián):
final:java中的關(guān)鍵字,修飾符巾表。
A).如果一個類被聲明為final,就意味著它不能再派生出新的子類略吨,不能作為父類被繼承集币。因此,一個類不能同時被聲明為abstract抽象類的和final的類翠忠。
B).如果將變量或者方法聲明為final鞠苟,可以保證它們在使用中不被改變.
1)被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取秽之,不可修改当娱。
2)被聲明final的方法只能使用,不能重載考榨。

finally:java的一種異常處理機制跨细。
  finally是對Java異常處理模型的最佳補充。finally結(jié)構(gòu)使代碼總會執(zhí)行河质,而不管無異常發(fā)生冀惭。使用finally可以維護對象的內(nèi)部狀態(tài)震叙,并可以清理非內(nèi)存資源。特別是在關(guān)閉數(shù)據(jù)庫連接這方面散休,如果程序員把數(shù)據(jù)庫連接的close()方法放到finally中媒楼,就會大大降低程序出錯的幾率。

finalize:Java中的一個方法名戚丸。
Java技術(shù)使用finalize()方法在垃圾收集器將對象從內(nèi)存中清除出去前划址,做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒被引用時對這個對象調(diào)用的限府。它是在Object類中定義的夺颤,因此所的類都繼承了它。子類覆蓋finalize()方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作谣殊。finalize()方法是在垃圾收集器刪除對象之前對這個對象調(diào)用的拂共。

12. JAVA遇到的異常錯誤

Java.lang.NullPointerException
  這個異常大家肯定都經(jīng)常碰到,異常的解釋是"程序遇上了空指針"姻几,簡單地說就是調(diào)用了未經(jīng)初始化的對象或者是不存在的對象宜狐,這個錯誤經(jīng)常出現(xiàn)在創(chuàng)建圖片,調(diào)用數(shù)組這些操作中蛇捌,比如圖片未經(jīng)初始化抚恒,或者圖片創(chuàng)建時的路徑錯誤等等。對數(shù)組操作中出現(xiàn)空指針络拌,很多情況下是一些剛開始學習編程的朋友常犯的錯誤俭驮,即把數(shù)組的初始化和數(shù)組元素的初始化混淆起來了。數(shù)組的初始化是對數(shù)組分配需要的空間春贸,而初始化后的數(shù)組混萝,其中的元素并沒有實例化,依然是空的萍恕,所以還需要對每個元素都進行初始化(假如要調(diào)用的話)

2. java.lang.ClassNotFoundException
  這個異常是很多原本在JB等開發(fā)環(huán)境中開發(fā)的程序員逸嘀,把JB下的程序包放在WTk下編譯經(jīng)常出現(xiàn)的問題,異常的解釋是"指定的類不存在"允粤,這里主要考慮一下類的名稱和路徑是否正確即可崭倘,假如是在JB下做的程序包,一般都是默認加上Package的类垫,所以轉(zhuǎn)到WTK下后要注重把Package的路徑加上司光。

3. java.lang.ArithmeticException
  這個異常的解釋是"數(shù)學運算異常",比如程序中出現(xiàn)了除以零這樣的運算就會出這樣的異常悉患,對這種異常残家,大家就要好好檢查一下自己程序中涉及到數(shù)學運算的地方,公式是不是有不妥了售躁。

4. java.lang.ArrayIndexOutOfBoundsException
  這個異常相信很多朋友也經(jīng)常碰到過跪削,異常的解釋是"數(shù)組下標越界"谴仙,現(xiàn)在程序中大多都有對數(shù)組的操作,因此在調(diào)用數(shù)組的時候一定要認真檢查碾盐,看自己調(diào)用的下標是不是超出了數(shù)組的范圍晃跺,一般來說,顯示(即直接用常數(shù)當下標)調(diào)用不太輕易出這樣的錯毫玖,但隱式(即用變量表示下標)調(diào)用就經(jīng)常出錯了掀虎,還有一種情況,是程序中定義的數(shù)組的長度是通過某些特定方法決定的付枫,不是事先聲明的烹玉,這個時候,最好先查看一下數(shù)組的length阐滩,以免出現(xiàn)這個異常二打。

5. java.lang.IllegalArgumentException
  這個異常的解釋是"方法的參數(shù)錯誤",很多J2ME的類庫中的方法在一些情況下都會引發(fā)這樣的錯誤掂榔,比如音量調(diào)節(jié)方法中的音量參數(shù)假如寫成負數(shù)就會出現(xiàn)這個異常继效,再比如g.setColor(int red,int green,int blue)這個方法中的三個值,假如有超過255的也會出現(xiàn)這個異常装获,因此一旦發(fā)現(xiàn)這個異常瑞信,我們要做的,就是趕緊去檢查一下方法調(diào)用中的參數(shù)傳遞是不是出現(xiàn)了錯誤穴豫。

6. java.lang.IllegalAccessException
  這個異常的解釋是"沒有訪問權(quán)限"凡简,當應用程序要調(diào)用一個類,但當前的方法即沒有對該類的訪問權(quán)限便會出現(xiàn)這個異常精肃。對程序中用了Package的情況下要注重這個異常秤涩。

13. JAVA中的異常框架

image.png

Throwable
  Throwable是 Java 語言中所有錯誤或異常的超類司抱。
  Throwable包含兩個子類: Error 和 Exception筐眷。它們通常用于指示發(fā)生了異常情況。
  Throwable包含了其線程創(chuàng)建時線程執(zhí)行堆棧的快照状植,它提供了printStackTrace()等接口用于獲取堆棧跟蹤數(shù)據(jù)等信息。

Exception
Exception及其子類是 Throwable 的一種形式怨喘,它指出了合理的應用程序想要捕獲的條件津畸。

RuntimeException
RuntimeException是那些可能在 Java 虛擬機正常運行期間拋出的異常的超類。
  編譯器不會檢查RuntimeException異常必怜。例如肉拓,除數(shù)為零時,拋出ArithmeticException異常梳庆。RuntimeException是ArithmeticException的超類暖途。當代碼發(fā)生除數(shù)為零的情況時卑惜,倘若既"沒有通過throws聲明拋出ArithmeticException異常",也"沒有通過try…catch…處理該異常"驻售,也能通過編譯露久。這就是我們所說的"編譯器不會檢查RuntimeException異常"!
  如果代碼會產(chǎn)生RuntimeException異常欺栗,則需要通過修改代碼進行避免毫痕。例如,若會發(fā)生除數(shù)為零的情況迟几,則需要通過代碼避免該情況的發(fā)生消请!

Error
和Exception一樣,Error也是Throwable的子類类腮。它用于指示合理的應用程序不應該試圖捕獲的嚴重問題臊泰,大多數(shù)這樣的錯誤都是異常條件。
和RuntimeException一樣蚜枢,編譯器也不會檢查Error缸逃。比如說內(nèi)存溢出

Java異常分類:
1 被檢查的異常(Checked Exception),
2 運行時異常(RuntimeException)祟偷,
3 錯誤(Error)察滑。

(01) 運行時異常
定義: RuntimeException及其子類都被稱為運行時異常。
特點: Java編譯器不會檢查它修肠。也就是說贺辰,當程序中可能出現(xiàn)這類異常時,倘若既"沒有通過throws聲明拋出它"嵌施,也"沒有用try-catch語句捕獲它"饲化,還是會編譯通過。例如吗伤,除數(shù)為零時產(chǎn)生的ArithmeticException異常吃靠,數(shù)組越界時產(chǎn)生的IndexOutOfBoundsException異常,fail-fail機制產(chǎn)生的ConcurrentModificationException異常等足淆,都屬于運行時異常巢块。
  雖然Java編譯器不會檢查運行時異常,但是我們也可以通過throws進行聲明拋出巧号,也可以通過try-catch對它進行捕獲處理族奢。
  如果產(chǎn)生運行時異常,則需要通過修改代碼來進行避免丹鸿。例如越走,若會發(fā)生除數(shù)為零的情況,則需要通過代碼避免該情況的發(fā)生!

(02) 被檢查的異常
定義: Exception類本身廊敌,以及Exception的子類中除了"運行時異常"之外的其它子類都屬于被檢查異常铜跑。
特點: Java編譯器會檢查它。此類異常骡澈,要么通過throws進行聲明拋出锅纺,要么通過try-catch進行捕獲處理,否則不能通過編譯秧廉。例如伞广,CloneNotSupportedException就屬于被檢查異常。當通過clone()接口去克隆一個對象疼电,而該對象對應的類沒有實現(xiàn)Cloneable接口嚼锄,就會拋出CloneNotSupportedException異常。
  被檢查異常通常都是可以恢復的蔽豺。

(03) 錯誤
定義: Error類及其子類区丑。
特點: 和運行時異常一樣,編譯器也不會對錯誤進行檢查修陡。
  當資源不足沧侥、約束失敗、或是其它程序無法繼續(xù)運行的條件發(fā)生時魄鸦,就產(chǎn)生錯誤宴杀。程序本身無法修復這些錯誤的。例如拾因,VirtualMachineError就屬于錯誤旺罢。
  按照Java慣例,我們是不應該是實現(xiàn)任何新的Error子類的绢记!

14. JAVA中的異潮獯铮框架

Java GC(Garbage Collection,垃圾收集蠢熄,垃圾回收)機制跪解,是Java與C++/C的主要區(qū)別之一,在使用JAVA的時候签孔,一般不需要專門編寫內(nèi)存回收和垃圾清理代 碼叉讥。這是因為在Java虛擬機中,存在自動內(nèi)存管理和垃圾清掃機制饥追。

電腦的內(nèi)存大小的不變的图仓,當我們使用對象的時候,如使用New關(guān)鍵字的時候判耕,就會在內(nèi)存中生產(chǎn)一個對象透绩,但是我們在使用JAVA開發(fā)的時候翘骂,當一個對象使用完畢之后我們并沒有手動的釋放那個對象所占用的內(nèi)存壁熄,就這樣在使用程序的過程中帚豪,對象越來越多,當內(nèi)存存放不了這么多對象的時候草丧,電腦就會崩潰了狸臣,JAVA為了解決這個問題就推出了這個自動清除無用對象的功能典予,或者叫機制亥揖,這就是GC,有個好聽是名字叫垃圾回收唧垦,其實就在用來幫你擦屁股的懂拾,好讓你安心寫代碼煤禽,不用管內(nèi)存釋放,對象清理的事情了岖赋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末檬果,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子唐断,更是在濱河造成了極大的恐慌选脊,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脸甘,死亡現(xiàn)場離奇詭異恳啥,居然都是意外死亡,警方通過查閱死者的電腦和手機丹诀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門钝的,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忿墅,你說我怎么就攤上這事扁藕。” “怎么了疚脐?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵亿柑,是天一觀的道長。 經(jīng)常有香客問我棍弄,道長望薄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任呼畸,我火速辦了婚禮痕支,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛮原。我一直安慰自己卧须,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著花嘶,像睡著了一般笋籽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椭员,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天车海,我揣著相機與錄音,去河邊找鬼隘击。 笑死侍芝,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的埋同。 我是一名探鬼主播州叠,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凶赁!你這毒婦竟也來了留量?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤哟冬,失蹤者是張志新(化名)和其女友劉穎楼熄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浩峡,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡可岂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了翰灾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缕粹。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纸淮,靈堂內(nèi)的尸體忽然破棺而出平斩,到底是詐尸還是另有隱情,我是刑警寧澤咽块,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布绘面,位于F島的核電站,受9級特大地震影響侈沪,放射性物質(zhì)發(fā)生泄漏揭璃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一亭罪、第九天 我趴在偏房一處隱蔽的房頂上張望瘦馍。 院中可真熱鬧,春花似錦应役、人聲如沸情组。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽院崇。三九已至荆责,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間亚脆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工盲泛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留濒持,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓寺滚,卻偏偏與公主長得像柑营,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子村视,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 基礎(chǔ)知識入門 Java面向?qū)ο筇匦?三種基本特征:繼承官套、封裝和多態(tài)。封裝:將對象的實現(xiàn)細節(jié)隱藏起來蚁孔,然后通過一些公...
    lxtyp閱讀 367評論 0 1
  • 在一個方法內(nèi)部定義的變量都存儲在棧中奶赔,當這個函數(shù)運行結(jié)束后,其對應的棧就會被回收杠氢,此時站刑,在其方法體中定義的變量將不...
    Y了個J閱讀 4,413評論 1 14
  • 面向?qū)ο驤ava中的數(shù)據(jù)類型分為:原始數(shù)據(jù)類型和引用數(shù)據(jù)類型在數(shù)據(jù)類型轉(zhuǎn)換中,由低類型轉(zhuǎn)至高類型鼻百,將會自動(隱式)...
    pure_joy閱讀 224評論 0 0
  • 針對JAVA基礎(chǔ)以及常問知識點的總結(jié) 以下為問題目錄 java中==和equals和hashCode的區(qū)別Stri...
    冷都男閱讀 546評論 0 0
  • 前言 轉(zhuǎn)眼間2020年過去已經(jīng)有一段時間了温艇,相信大家在2020年年末的秋招已經(jīng)拿到了自己滿意的offer因悲。有沒有拿...
    前程有光閱讀 650評論 0 5