java中兩大異常:空指針異常和越界異常
前幾天我在學習java中遇到了幾個異常的問題其中就有兩個異常我認為有必要拿出來和大家分享一下,希望能為初學java的人(我也是剛學)帶來幫助廢話不多說,我我們就直奔主題吧!
一、空指針異常
空指針異常是運行期的異常,編譯的時候是不會檢查的,只有運行的時候才會拋出,一般情況下如果出現(xiàn)了空指針異常,事先你不知道會有這個異常,就說明你的程序有bug,當然就要找出這個bug,然后在變量調(diào)用之前先給它賦值,另外有一種情況,你事先知道某個操作會拋出空指針異常,常見一些非法的操作,但是又無法避免用戶執(zhí)行這個操作,就可以通過try,catch塊捕獲這個異常,然后給用戶一個反饋信息,告知這個操作是非法的,因為如果你直接拋出異常的話,用戶可能會看不懂,比如拋出了java.lang.NullPointerException,一般的軟件使用者是看不懂的,你試想一下如果你在使用一個軟件時時候,忽然之間拋出了一大堆異常,你肯定會埋怨這個軟件,竟然會出現(xiàn)這樣的低級錯誤。下面給大家舉一個實例,是我前兩天遇到過的一個空指針異常。
第一步:首先建一個學生類(我用的是eclipse)如下圖:

屬性是我自己隨便定義的你可以自己修改,方法你可以自己寫也可以用系統(tǒng)自動添加。在eclipse中Source(點擊)

第二步:建一個新的類如下圖:


如果把該句注釋掉以后會產(chǎn)生空指針異常(空指針)如下:

如果不注釋就不會出現(xiàn)空指針異常.
出現(xiàn)上述的原因是因為你在實例化時沒有達到上述的數(shù)組的長度,數(shù)組中的元素還有沒有實例化完全。
上述例題中的完全代碼如下哦!
學生類:
public class Student {
private String name;
private int age;
private int score;
private int lable;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public int getLable() {
return lable;
}
public void setLable(int lable) {
this.lable = lable;
}
}
SwitchTest來如下
public class SwithcTest {
public static void main (String args[]){
Student[] stuArr = new Student[10];
Student student = new Student();
//添加student1
student.setName("hans");
student.setAge(23);
student.setScore(60);
student.setLable(1);
stuArr[0] = student;
Student student1 = new Student();
//添加student2
student1.setName("rose");
student1.setAge(24);
student1.setScore(90);
student1.setLable(2);
stuArr[1] = student1;
Student student2 = new Student();
//添加student3
student2.setName("good");
student2.setAge(25);
student2.setScore(80);
student2.setLable(3);
stuArr[2] = student2;
for(int i = 0;i<stuArr.length;i++){
if (stuArr[i]!=null)//把該句注釋掉以后會產(chǎn)生空指針異常(空指針)
System.out.println(stuArr[i].getLable()+"號"+ stuArr[i].getName()+"---"+ stuArr[i].getScore());
}
}
}
二、數(shù)組越界異常
舉例:
你把第二個類代碼中( Student[] stuArr = new Student[10];)10改成小于你實例化學生的個數(shù)0、1、2就會出現(xiàn)越界異常
Exception in thread
"main" java.lang.ArrayIndexOutOfBoundsException: 2
at
Student.SwithcTest.main(SwithcTest.java:31)
注:下標從0開始,最大為 數(shù)組名.length 一定要注意哦!!!!!!!!!!
希望我上述所說的能給讀者帶來一點有用之處!!!!!!!!!!!!
我懂的只有這些了些網(wǎng)大家多多關注我的bolg,讓我們一起成長!!!