引用的缺省值–null

  • null是引用类型的缺省值
  • null代表空,不存在。可以读作空
  • 引用类型的数组创建出来,初始值都是空

null带来的问题

  • 大名鼎鼎的NullPointerException (NPE)
  • 如果不确定,使用前先要判断引用是不是空
package classDemo;

public class CheckBeforeUse {
    public static void main(String[] args) {

        ClassTest1[] ct = new ClassTest1[9];
        for(int i = 0; i<ct.length; i++){
            if( i % 2 == 0){
                ct[i] = new ClassTest1();
            }
        }

        //可以打印null
        System.out.println(ct[7]);

        //应用类使用前先要判断是不是空
        for(int i = 0; i<ct.length; i++){
            if( ct[i] != null){
                ct[i].name = "商品" + i;
            }
        }

        for(int i = 0; i < ct.length; i++){
            if(ct[i] != null){
                System.out.println(ct[i].name);
            }
        }
    }
}

执行结果:

null
商品0
商品2
商品4
商品6
商品8

Process finished with exit code 0

访问null的属性,报错

package classDemo;

public class CheckBeforeUse {
    public static void main(String[] args) {

        ClassTest1[] ct = new ClassTest1[9];
        for(int i = 0; i<ct.length; i++){
            if( i % 2 == 0){
                ct[i] = new ClassTest1();
            }
        }

        //不能访问null的任何属性
        System.out.println(ct[7].name);
        //ct[7].name = "不存在的商品,不存在的名字";

        //应用类使用前先要判断是不是空
        for(int i = 0; i<ct.length; i++){
            if( ct[i] != null){
                ct[i].name = "商品" + i;
            }
        }

        for(int i = 0; i < ct.length; i++){
            if(ct[i] != null){
                System.out.println(ct[i].name);
            }
        }
    }
}
Exception in thread "main" java.lang.NullPointerException
	at classDemo.CheckBeforeUse.main(CheckBeforeUse.java:13)

Process finished with exit code 1