java数组空指针问题

在java中空指针异常算是一个比较棘手的问题,下面通过一个例子来讲解一下怎么处理空指针,以及出现空指针的问题

比如,我们先建好一个Book类,里面包括name属性和bNumber(统计书的总数),并写出get和set方法。

再写一个Test类,main方法中用数组保存100本书,并设置书的名称,最后打印书的总数和书的名字。

Book类:

public class Book {

private String name;
private static int bNumber = 0;

    public String getName() {
        return name;
    }

    public static int getbNumber() {
        return bNumber;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static void setbNumber(int bNumber)
    {
        Book.bNumber = bNumber;
    }

    Book(String name)
    {
        this.name = name;
        bNumber += 1;
    }

    Book()
    {
        bNumber += 1;
    }

}

接下来是Test类,定义一个数组保存一百本书,我们的第一想法就是Book[] bookname = new Book[100];  那写完这些接下来呢,怎么设置书名,是直接bookname[0].setname("《世界通史》"); ???。。。如果这样的话,你写完最后运行的时候会出现一个错误:Exception in thread "main" java.lang.NullPointerException。。。。这个就是空指针异常,错在哪里了呢。。。

我们可以回到建立数组的地方,Book[] bookname = new Book[100];,在这里我们建立的数组,里面的100个元素是什么,是类对象?还是指针。。。答案是指针,100个指向Book类变量的指针,所以我们接下来就要给这100个元素赋值

for(int i=0;i<100;i++)
        {
            bookname[i] = new Book();
        }

这样,我们就给100个元素(指针)赋了值。。。

那接下来就是赋值给他们书名以及输出

Test类:

public class Test{

    public static void main(String[] args)
    {

        Book[] bookname = new Book[100];
        for(int i=0;i<100;i++)
        {
            bookname[i] = new Book();
        }
        bookname[0].setName("《世界通史》");
        bookname[1].setName("《中华上下五千年》");
        bookname[2].setName("《明朝那些事儿》");
        bookname[3].setName("《深入理解计算机系统》");

        for(int i=4;i<100;i++)
            bookname[i].setName("空");

        System.out.println("书籍总数: "+Book.getbNumber());

        for(int i=0;i<100;i++)
        {
            System.out.println(i + ". " + bookname[i].getName());
        }
    }

}

测试结果:

java数组空指针问题_第1张图片java数组空指针问题_第2张图片

你可能感兴趣的:(java)