Exception徙硅、抽象類和接口區(qū)別、深拷貝和淺拷貝

定義:一種識別及響應(yīng)錯誤的一致性搞疗,在使用異常的時候嗓蘑,出現(xiàn)異常我們能知道“什么異常”被拋出匿乃?異常在哪拋出桩皿?為什么會拋出這個異常?

異常的幾個關(guān)鍵字:
try:用于監(jiān)聽try語句里面的代碼幢炸,當發(fā)生異常時會調(diào)用catch去捕獲泄隔,發(fā)生異常代碼后的代碼將不會繼續(xù)執(zhí)行

catch:用于捕獲異常,即try里面的異常

finally:當try和catch里面的代碼執(zhí)行完還沒有返回時執(zhí)行這個方法宛徊,通常我們在這個方法中做數(shù)據(jù)庫的關(guān)閉梅尤、網(wǎng)絡(luò)連接關(guān)閉柜思、流關(guān)閉或回收一些資源等

throw:用于拋出異常

throws:用于聲明該方法可能拋出異常

finally與return 執(zhí)行順序

finally的執(zhí)行順序是在try和catch執(zhí)行完之后、return返回之前巷燥,如果finally里面已經(jīng)執(zhí)行了return或throw,則不會再去執(zhí)行try或catch中的return 或throw

Java異成呐蹋框架

截屏2020-08-19 上午9.00.11.png

1.Throwable:是java語言中所有錯誤或異常的父類,他有兩個子類缰揪,分別為Error和Exception,Throwable包含了其線程創(chuàng)建時線程執(zhí)行堆棧的快照陨享,提供了printStackTrace來獲取堆棧跟蹤數(shù)據(jù)等信息

2.Exception:它指出了合理的應(yīng)用程序想要捕獲的條件

3.RuntimeException:這個是運行期間可能拋出的異常的父類,編譯器不會檢查這一類的異常钝腺,可通過修改代碼進行修復(fù)

4.Error:直接使虛擬機崩潰的錯誤抛姑,編譯器不會進行檢查

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

  1. 抽象類和接口都不能直接實例化,如果要實例化艳狐,抽象類變量必須指向?qū)崿F(xiàn)所 有抽象方法的子類對象定硝,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類對象。
  2. 抽象類要被子類繼承毫目,接口要被類實現(xiàn)蔬啡。
  3. 接口里定義的變量只能是公共的靜態(tài)的常量,抽象類中的變量是普通變量镀虐。
  4. 抽象類里可以沒有抽象方法箱蟆。
  5. 接口可以被類多實現(xiàn)(被其他接口多繼承),抽象類只能被單繼承刮便。
  6. 接口中沒有 this 指針空猜,沒有構(gòu)造函數(shù),不能擁有實例字段(實例變量)或
    實例方法恨旱。
  7. 抽象類不能在Java 8 的 lambda 表達式中使用辈毯。

深拷貝和淺拷貝

對象拷貝:就是一個對象的屬性拷貝到另一個有著相同類型的對象中去
1.淺拷貝:值傳值、對象傳引用(地址)


代碼實現(xiàn):就是實現(xiàn)CloneAble接口并重寫其clone方法搜贤,其中clone方法調(diào)用中使用 super.clone();
對sourceobject的refObj做改變會影響到CopiedObject中的refObj,因為他們兩個對象都是使用同一個refObj,對field1改變不影響field2

public class Student implements Cloneable { // 對象引用
   private Subject subj;
   private String name;
   public Student(String s, String sub) {
      name = s;
      subj = new Subject(sub);
   }
   public Subject getSubj() {
      return subj;
}
   public String getName() {
      return name;
}
   public void setName(String s) {
      name = s;
}
/**
* 重寫clone()方法 * @return
*/
public Object clone() { //淺拷貝
try {
// 直接調(diào)用父類的clone()方法 return super.clone();
      } catch (CloneNotSupportedException e) {
         return null;
} }
}

2.深拷貝


截屏2020-08-19 上午9.23.11.png

代碼實現(xiàn):就是實現(xiàn)CloneAble接口谆沃,并重寫clone方法,在clone方法中創(chuàng)建一個新的對象并將這個對象的屬性賦值給他

public class Student implements Cloneable { // 對象引用
   private Subject subj;
   private String name;
   public Student(String s, String sub) {
      name = s;
      subj = new Subject(sub);
   }
   public Subject getSubj() {
      return subj;
}
   public String getName() {
      return name;
}
   public void setName(String s) {
      name = s;
}
/**
* 重寫clone()方法 *
* @return
*/
public Object clone() {
// 深拷貝入客,創(chuàng)建拷貝類的一個新對象管毙,這樣就和原始對象相互獨立 
Student s = new Student(name, subj.getName());
 return s;
   }
 }

序列化

就是將對象轉(zhuǎn)換為流的形式,將內(nèi)存中的對象變成一連串的字節(jié)桌硫,可以用于網(wǎng)絡(luò)傳輸對象

通過序列化來實現(xiàn)深拷貝

public class ColoredCircle implements Serializable {
   private int x;
   private int y;
public ColoredCircle(int x, int y) { this.x = x;
this.y = y; }
   public int getX() {
      return x;
}
public void setX(int x) { this.x = x;
}
   public int getY() {
      return y;
}
public void setY(int y) { this.y = y;
}
   @Override
   public String toString() {
      return "x=" + x + ", y=" + y;
   }
}
------------------------------------------------
public class DeepCopy {
   public static void main(String[] args) throws IOException {
      ObjectOutputStream oos = null;
      ObjectInputStream ois = null;

try {
// 創(chuàng)建原始的可序列化對象
ColoredCircle c1 = new ColoredCircle(100, 100); System.out.println("Original = " + c1);
ColoredCircle c2 = null; // 通過序列化實現(xiàn)深拷貝
   ByteArrayOutputStream bos = new ByteArrayOutputStream()
    oos = new ObjectOutputStream(bos); // 序列化以及傳遞這個對象       
    oos.writeObject(c1);
    oos.flush();
ByteArrayInputStream bin = new eam(bos.toByteArray());
ByteArrayInputStr
ois = new ObjectInputStream(bin);
// 返回新的對象
c2 = (ColoredCircle) ois.readObject();
// 校驗內(nèi)容是否相同 System.out.println("Copied
// 改變原始對象的內(nèi)容
c1.setX(200);
c1.setY(200);
// 查看每一個現(xiàn)在的內(nèi)容 System.out.println("Original = " + c1); System.out.println("Copied = " + c2);
} catch (Exception e) { 
System.out.println("Exception in main = " + e);
} finally {
 oos.close(); 
ois.close();
   } 
 }
}

這種方式實現(xiàn)深拷貝不建議用夭咬,他的效率比較慢

Transient

1)一旦變量被transient修飾,變量將不再是對象持久化的一部分铆隘,該變量內(nèi)容在序列化后無法獲得訪問卓舵。
2)transient關(guān)鍵字只能修飾變量,而不能修飾方法和類膀钠。注意掏湾,本地變量是不能被 transient關(guān)鍵字修飾的裹虫。變量如果是用戶自定義類變量,則該類需要實現(xiàn) Serializable接口融击。
3)被transient關(guān)鍵字修飾的變量不再能被序列化筑公,一個靜態(tài)變量不管是否被 transient修飾,均不能被序列化尊浪。

實現(xiàn)Externalizeable時需要在writeExternal中手動進行序列化匣屡,這是與transient無關(guān)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拇涤,隨后出現(xiàn)的幾起案子捣作,更是在濱河造成了極大的恐慌,老刑警劉巖鹅士,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件券躁,死亡現(xiàn)場離奇詭異,居然都是意外死亡掉盅,警方通過查閱死者的電腦和手機也拜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怔接,“玉大人搪泳,你說我怎么就攤上這事稀轨《笃辏” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵奋刽,是天一觀的道長瓦侮。 經(jīng)常有香客問我,道長佣谐,這世上最難降的妖魔是什么肚吏? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮狭魂,結(jié)果婚禮上罚攀,老公的妹妹穿的比我還像新娘。我一直安慰自己雌澄,他們只是感情好斋泄,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著镐牺,像睡著了一般炫掐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睬涧,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天募胃,我揣著相機與錄音旗唁,去河邊找鬼。 笑死痹束,一個胖子當著我的面吹牛检疫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祷嘶,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼电谣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抹蚀?” 一聲冷哼從身側(cè)響起剿牺,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎环壤,沒想到半個月后晒来,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡郑现,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年湃崩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片接箫。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡攒读,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辛友,到底是詐尸還是另有隱情薄扁,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布废累,位于F島的核電站邓梅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏邑滨。R本人自食惡果不足惜日缨,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掖看。 院中可真熱鬧匣距,春花似錦、人聲如沸哎壳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耳峦。三九已至恩静,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驶乾。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工邑飒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人级乐。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓疙咸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親风科。 傳聞我的和親對象是個殘疾皇子撒轮,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

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