###java的異常分為兩種:Error什乙、Exception
*1.Error是錯(cuò)誤葫笼。java異常處理程序是無奈的。例如jvm內(nèi)存不足
*2.Exception 是異常茬祷。編程錯(cuò)誤姑尺,或者偶然因素產(chǎn)生的問題竟终,可以通過編程解決
###異常處理方法:1.遇到錯(cuò)誤就終止 2.程序員編程是考慮了對應(yīng)的異常情況。通過異常捕獲來處理異常切蟋。
###我們處理的異常多數(shù)是運(yùn)行時(shí)異常
###try-catch 異常處理 3個(gè)流程
*1.代碼正確 正常執(zhí)行-不會(huì)進(jìn)入catch語句塊
*2.代碼異常 catch語句捕獲到了對應(yīng)的異常统捶,那么執(zhí)行catch語句塊內(nèi)容,不會(huì)造成程序中斷柄粹,后續(xù)代碼正常執(zhí)行
*3.代碼異常 catch語句未捕獲到對應(yīng)異常喘鸟,那么不執(zhí)行catch塊,程序中斷驻右。
*4.如果我想保證捕獲到異常我的異常類型可以寫成所有異常的父類Exception
catch (Exception e)
###finally使用時(shí)什黑,當(dāng)函數(shù)含有return語句,也會(huì)執(zhí)行finally中的內(nèi)容堪夭,先執(zhí)行finally中內(nèi)容愕把,在去return
###多重catch捕獲時(shí),注意將異常范圍小的放前面森爽,范圍大的放后面
###throws異常分為2類恨豁,1類是RuntimeException的子類,跑出這類異常拗秘,jvm可以自動(dòng)捕獲,可以不寫 try-catch
public void setAge(int age) throws IllegalAccessException
//調(diào)用時(shí)
student.setAge(-100);
###還有1類是非RuntimeException的子類祈惶,拋出這類異常雕旨,必須寫try-catch
public void setAge(int age) throws FileInputStream
//調(diào)用時(shí)要捕獲對應(yīng)異常
try{student.setAge(-100);}catch(FileInputStream e){e.printStackTrace();}
###包裝類的用途
*1.作為基本類型的對應(yīng)的對象類型存在扮匠,方便設(shè)計(jì)到對象的操作。例如:存儲(chǔ)到容器對象
*2.包含了基本類型的相關(guān)屬性和方法凡涩,例如:最大棒搜、最小值,進(jìn)制轉(zhuǎn)化等等活箕。
###自動(dòng)拆裝箱
//自動(dòng)拆裝箱
int m = 20;
Integer n4 = m;??//自動(dòng)裝箱將基本類型裝箱為包裝類型
int m2 = 20+n4;??// 自動(dòng)拆箱將包裝類型拆箱為基本類型
###throw和throws的區(qū)別和聯(lián)系
*1.throws出現(xiàn)的位置是方法頭部力麸,throw寫在方法體
*2.throws表示出現(xiàn)異常的可能性,并不一定發(fā)生這個(gè)異常育韩,throw則是手動(dòng)拋出異常克蚂,執(zhí)行throw一定產(chǎn)生異常
*3.兩者都是消極處理異常的方式(注意不是不好的方式),異常處理者為上層的調(diào)用處理
###內(nèi)部類
*1.java中可以將類筋讨,定義在其他類的里面或者方法里面埃叭,形成了內(nèi)部類
*2.成員內(nèi)部類,局部內(nèi)部類悉罕,靜態(tài)內(nèi)部類赤屋,匿名內(nèi)部類。
###成員內(nèi)部類
*創(chuàng)建內(nèi)部類對象語法
Circle circle = new Circle(200);
Circle.Draw draw = circle.new Draw();
*外部類如果要訪問成員內(nèi)部類的成員壁袄,必須先創(chuàng)建一個(gè)成員內(nèi)部類對象类早,在通過這個(gè)對象的引用來訪問。
OutterClass outterClass = new OutterClass();
OutterClass.InnerClass innerClass = outterClass.new InnerClass();
System.out.println("outterclass.x ="+ outterClass.x);
System.out.println("innerclass.y ="+innerClass.y);
###局部內(nèi)部類:定義在方法或者某個(gè)作用域的類嗜逻,他和成員內(nèi)部
###匿名內(nèi)部類涩僻。我們需要內(nèi)部建立一個(gè)對象,卻不必給改類對象起名变泄,這種累叫內(nèi)部類
*匿名內(nèi)部類在如下條件使用比較合適
*只用到類的一個(gè)實(shí)例
*類定義后馬上用
*類非常辛钣础(10行代碼以下)
*給類命名不會(huì)讓你的代碼更容易理解
###靜態(tài)內(nèi)部類:定義在另一個(gè)類中的類,只不過類前面多了一個(gè)修飾符 static
*靜態(tài)成員內(nèi)部類的
Outter.Inner inner = new Outter.Inner();
###??.this .i
//成員
private double radias = 0;
private int i = 0;
public Circle(double radias){
this.radias = radias;
}
//成員內(nèi)部類
class Draw{
int i = 10;
public void drawShape(){
int i = 100;
System.out.println("半徑:"+radias);
System.out.println(i);??//局部變量100
System.out.println(this.i); //成員變量10
System.out.println(Circle.this.i); //外部類的成員變量0
}
}
public static void main(String[] args) {
Circle circle = new Circle(200);
Circle.Draw draw = circle.new Draw();
draw.drawShape();
}