java中两大异常:空指针异常和越界异常
前几天我在学习java中遇到了几个异常的问题其中就有两个异常我认为有必要拿出来和大家分享一下,希望能为初学java的人(我也是刚学)带来帮助废话不多说,我我们就直奔主题吧!
一、空指针异常
空指针异常是运行期的异常,编译的时候是不会检查的,只有运行的时候才会抛出,一般情况下如果出现了空指针异常,事先你不知道会有这个异常,就说明你的程序有bug,当然就要找出这个bug,然后在变量调用之前先给它赋值,另外有一种情况,你事先知道某个操作会抛出空指针异常,常见一些非法的操作,但是又无法避免用户执行这个操作,就可以通过try,catch块捕获这个异常,然后给用户一个反馈信息,告知这个操作是非法的,因为如果你直接抛出异常的话,用户可能会看不懂,比如抛出了java.lang.NullPointerException,一般的软件使用者是看不懂的,你试想一下如果你在使用一个软件时时候,忽然之间抛出了一大堆异常,你肯定会埋怨这个软件,竟然会出现这样的低级错误。下面给大家举一个实例,是我前两天遇到过的一个空指针异常。
第一步:首先建一个学生类(我用的是eclipse)如下图:
属性是我自己随便定义的你可以自己修改,方法你可以自己写也可以用系统自动添加。在eclipse中Source(点击)
第二步:建一个新的类如下图:
如果把该句注释掉以后会产生空指针异常(空指针)如下:
如果不注释就不会出现空指针异常.
出现上述的原因是因为你在实例化时没有达到上述的数组的长度,数组中的元素还有没有实例化完全。
上述例题中的完全代码如下哦!
学生类:
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)//把该句注释掉以后会产生空指针异常(空指针)
System.out.println(stuArr[i].getLable()+"号"+ stuArr[i].getName()+"---"+ stuArr[i].getScore());
}
}
}
二、数组越界异常
举例:
你把第二个类代码中( Student[] stuArr = new Student[10];)10改成小于你实例化学生的个数0、1、2就会出现越界异常
Exception in thread
"main" java.lang.ArrayIndexOutOfBoundsException: 2
at
Student.SwithcTest.main(SwithcTest.java:31)
注:下标从0开始,最大为 数组名.length 一定要注意哦!!!!!!!!!!
希望我上述所说的能给读者带来一点有用之处!!!!!!!!!!!!
我懂的只有这些了些网大家多多关注我的bolg,让我们一起成长!!!