###java的異常分為兩種:Error、Exception
*1.Error是錯誤。java異常處理程序是無奈的。例如jvm內存不足
*2.Exception 是異常。編程錯誤,或者偶然因素產生的問題,可以通過編程解決
###異常處理方法:1.遇到錯誤就終止 2.程序員編程是考慮了對應的異常情況。通過異常捕獲來處理異常。
###我們處理的異常多數(shù)是運行時異常
###try-catch 異常處理 3個流程
*1.代碼正確 正常執(zhí)行-不會進入catch語句塊
*2.代碼異常 catch語句捕獲到了對應的異常,那么執(zhí)行catch語句塊內容,不會造成程序中斷,后續(xù)代碼正常執(zhí)行
*3.代碼異常 catch語句未捕獲到對應異常,那么不執(zhí)行catch塊,程序中斷。
*4.如果我想保證捕獲到異常我的異常類型可以寫成所有異常的父類Exception
catch (Exception e)
###finally使用時,當函數(shù)含有return語句,也會執(zhí)行finally中的內容,先執(zhí)行finally中內容,在去return
###多重catch捕獲時,注意將異常范圍小的放前面,范圍大的放后面
###throws異常分為2類,1類是RuntimeException的子類,跑出這類異常,jvm可以自動捕獲,可以不寫 try-catch
public void setAge(int age) throws IllegalAccessException
//調用時
student.setAge(-100);
###還有1類是非RuntimeException的子類,拋出這類異常,必須寫try-catch
public void setAge(int age) throws FileInputStream
//調用時要捕獲對應異常
try{student.setAge(-100);}catch(FileInputStream e){e.printStackTrace();}
###包裝類的用途
*1.作為基本類型的對應的對象類型存在,方便設計到對象的操作。例如:存儲到容器對象
*2.包含了基本類型的相關屬性和方法,例如:最大、最小值,進制轉化等等。
###自動拆裝箱
//自動拆裝箱
int m = 20;
Integer n4 = m;??//自動裝箱將基本類型裝箱為包裝類型
int m2 = 20+n4;??// 自動拆箱將包裝類型拆箱為基本類型
###throw和throws的區(qū)別和聯(lián)系
*1.throws出現(xiàn)的位置是方法頭部,throw寫在方法體
*2.throws表示出現(xiàn)異常的可能性,并不一定發(fā)生這個異常,throw則是手動拋出異常,執(zhí)行throw一定產生異常
*3.兩者都是消極處理異常的方式(注意不是不好的方式),異常處理者為上層的調用處理
###內部類
*1.java中可以將類,定義在其他類的里面或者方法里面,形成了內部類
*2.成員內部類,局部內部類,靜態(tài)內部類,匿名內部類。
###成員內部類
*創(chuàng)建內部類對象語法
Circle circle = new Circle(200);
Circle.Draw draw = circle.new Draw();
*外部類如果要訪問成員內部類的成員,必須先創(chuàng)建一個成員內部類對象,在通過這個對象的引用來訪問。
OutterClass outterClass = new OutterClass();
OutterClass.InnerClass innerClass = outterClass.new InnerClass();
System.out.println("outterclass.x ="+ outterClass.x);
System.out.println("innerclass.y ="+innerClass.y);
###局部內部類:定義在方法或者某個作用域的類,他和成員內部
###匿名內部類。我們需要內部建立一個對象,卻不必給改類對象起名,這種累叫內部類
*匿名內部類在如下條件使用比較合適
*只用到類的一個實例
*類定義后馬上用
*類非常?。?0行代碼以下)
*給類命名不會讓你的代碼更容易理解
###靜態(tài)內部類:定義在另一個類中的類,只不過類前面多了一個修飾符 static
*靜態(tài)成員內部類的
Outter.Inner inner = new Outter.Inner();
###??.this .i
//成員
private double radias = 0;
private int i = 0;
public Circle(double radias){
this.radias = radias;
}
//成員內部類
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();
}