21天学通Java调用不存在的对象或成员变量

调用不存在的对象或成员变量
本文节选自《21天学通JAVA》一书

    如果调用的对象或成员变量没有创建,那么在编译的时候编译器将出现错误。下面用代码演示这个错误,并演示如何修正。
【范例6-20】代码演示访问不存在的成员变量。
示例代码6-20
01    //test类描述的是测试访问不存在的成员变量
02    public class test
03    {
04        //main方法为程序的入口方法
05        public static void main(String[] args)
06        {
07            //创建test类的对象实例
08            test t = new test();
09            //t.a访问的是一个不存在的成员变量,将提示不可识别的字段
10            System.out.println(t.a);
11        }
12    }
【运行结果】使用javac编译程序将产生一个和该程序对应的class程序,然后使用Java运行编译产生的class程序,运行将会发生如下异常。
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    t.a cannot be resolved or is not a field

    at test.main(test.java:7)
【代码解析】对象引用t要访问的是a这个成员变量,而a没有声明,在编译的时候将提示错误信息。在错误提示里,已经提示为main方法里的第7行,只需查看这里就能找到错误的所在。
【范例6-21】修改上述代码使程序运行通过。
示例代码6-21
01    //test类描述的是测试访问不存在的成员变量
02    public class test
03    {
04        //a为test类的成员变量
05        String a;
06    
07        //main方法为程序的入口方法
08        public static void main(String[] args)
09        {
10            //创建test类的对象实例
11            test t = new test();
12            //t.a访问的是一个不存在的成员变量,将提示不可识别的字段
13            System.out.println(t.a);
14        }
15    }
【运行结果】使用javac编译程序将产生一个和该程序对应的class程序,然后使用Java运行编译产生的class程序,运行结果如图6-11所示。
【代码解析】根据上例中的错误提示在test类声明了一个名称为a的成员变量。因为String类型的a没有进行赋值,所以打印出来为null。
6.6.2  调用对象为null值的引用
任何操作的对象的值为null的时候都将出现空指针错误,即“NullPointException”错误。因为成员变量和方法是属于对象的,即属于用new关键字创建出来的对象的。下面用代码来演示这个错误,并演示如何进行修正。
【范例6-22】访问对象值为null的成员变量或方法。
示例代码6-22
01    //ArrayList类所需要的
02    import java.util.ArrayList;
03    
04    //test类测试访问null值的对象
05    public class test
06    {
07        //声明一个成员变量a并进行初值
08        public String a = "test类的成员变量";
09        
10        //Java程序的主入口方法
11        public static void main(String[] args)
12        {
13            //创建test类的对象实例
14            test t = new test();
15            
16            //创建一个集合类,对象引用为一个null值
17            ArrayList al = null;
18            
19            //向一个null的集合对象里添加数据
20            al.add(t.a);
21        }
22    }
【运行结果】使用javac编译程序将产生一个和该程序对应的class程序,然后使用Java运行编译产生的class程序,运行将会发生如下异常。
Exception in thread "main" java.lang.NullPointerException
    at test.main(test.java:20)
【代码解析】ArrayList类为一个集合类和数组很相似,都是用来存储数据用的。错误提示在main方法里的20行,提示为NullPointerException,即空指针错误。对象引用al声明为一个null值,表示这个对象并没有创建其对象的实例,只是一个引用而已。当操作任意一个为null的对象的时候都将提示空指针错误。
【范例6-23】修改上述代码使程序运行通过。
示例代码6-23
01    //ArrayList类所需要的
02    import java.util.ArrayList;
03    
04    //test类测试访问null值的对象
05    public class test
06    {
07        //声明一个成员变量a并进行初值
08        public String a = "test类的成员变量";
09        
10        //Java程序的主入口方法
11        public static void main(String[] args)
12        {
13            //创建test类的对象实例
14            test t = new test();
15            
16            //创建一个集合类,对象引用为一个null值
17            ArrayList al = new ArrayList();
18            
19            //向一个null的集合对象里添加数据
20            al.add(t.a);
21            
22            //打印集合al里的各个元素
23            System.out.println(al);
24        }
25    }
【运行结果】使用javac编译程序将产生一个和该程序对应的class程序,然后使用Java运行编译产生的class程序,运行结果如图6-12所示。
【代码解析】上述错误出现在“al.add(t.a)”,因为al为一个null的引用,只需将集合引用al的实例创建出来就行了。当创建了集合的对象实例后,程序将打印集合引用al的各个元素。
对本节的内容进行总结,可以概括成如下几点。
    任何操作的对象的值为null,都将出现空指针错误,即“NullPointException”。
    NullPointerException错误是运行期的错误,在编译的时候系统是不进行提示的。
    在声明一个对象引用后尽量为其赋一个初值,来避免空指针的出现。

http://www.china-pub.com/195064
【书名】21天学通Java
【作者】庞永庆 庞丽娟 等编著
【ISBN】978-7-121-07897-2
【出版社】电子工业出版社
【出版日期】2009年1月
【宣传语】
项目综合练习典型实例核心技术基础知识案例
307个典型实例、1个项目案例、246个练习题
一线开发人员全程贴心讲解,上手毫不费力
20小时多媒体语音视频教学
本书源代码 + 本书电子教案(PPT)
1000余页编程参考宝典电子书(免费赠送)
posted @ 2008-12-24 15:04  我的javaIT  阅读(228)  评论(0编辑  收藏  举报