调用不存在的对象或成员变量
本文节选自《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余页编程参考宝典电子书(免费赠送)

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

  1. 21天学通Java学习笔记-Day01

    21天学通java 中文第6版 下载地址:点击打开链接 Day01: 命令行查看和设置classpath: 查看:echo %classpath% 设置:set classpath = %classp ...

  2. 《21天学通Java(第6版)》—— 1.4 属性和行为

    本节书摘来异步社区<21天学通Java(第6版)>一书中的第1章,第1.4节,作者:[美]Rogers Cadenhead,更多章节内容可以访问云栖社区"异步社区"公众 ...

  3. 21天学通java第7版pdf_21天学通Java.第7版.pdf

    <21天学通Java(第7版)>是初学者学习Java编程语言的畅销经典教程,循序渐进地介绍了Java编程语言知识,并提供了丰富的实例和练习:同时全面涵盖了Java 8这一新标准以及与And ...

  4. 《21天学通Java(第7版)》—— 第2章 Java编程基础 2.1 语句和表达式

    本节书摘来异步社区<21天学通Java(第7版)>一书中的第2章,第2.1节,作者: [美]Rogers Cadenhead(罗格斯 卡登海德),更多章节内容可以访问云栖社区"异 ...

  5. 21天学通Java学习笔记-Day12(MYsql-JDBC)

    JDBC MYQL 基础: 用命令行进入MYSQL:shell > mysql -h host(主机) -u user(用户名) -p 回车,等待输入密码 退出MYSQL:mysql >  ...

  6. 21天学通Java学习笔记-Day04

    Day04: 静态数组是一组对象,每个元素都是一个对象,所以用 new 创建新的数组实例. class test{public static void main(String[]args){a[] a ...

  7. 21天学通Java学习笔记-Day11(常用类)

    java 常用类(重点): String 类: String 类代表字符串.创建以后不能更变. public class tests { public static void main(String[ ...

  8. 学习《21天学通Java 6》(二)

    1  MS-DOS 切换文件夹 如果需要切换到其他分区的目录,需要先切换到那个分区,必须先 e: 然后就可以任意目录跳转了 2 使用同一文件夹下其他文件的类出错 我的两个文件java文件在同一目录下, ...

  9. 21天学通java 3_《21天学通Java》PDF 下载

    第一篇  基 础 篇 第1章  Java简介 1.1  Java的平台简介 1.2  安装工具包 1.3  程序开发过程 1.4  编码规范 1.5  HelloWorld:第一个Java程序 1.6 ...

  10. 21天学通Java学习笔记-Day02

    Day02: java 程序是由 类,对象 组成.对象和类是由 方法,变量组成.方法是由 语句,表达式 组成.表达式是由 运算符 组成. 3种变量: 实例变量:定义对象的属性. 类 变 量 : 定义类 ...

最新文章

  1. json解析对应的value为null_JSON 学习笔记第一天——初识
  2. [JavaWeb-HTML]HTML标签_块标签
  3. 如何实现rtsp h265 转 rtmp (rtsp hevc 转 rtmp)并转发到CDN或自建服务器
  4. printf输出字符串_c语言入门 第十二章 字符串
  5. 无法获得锁 /var/cache/apt/archives/lock – open (11 资源临时不可用)
  6. c语言s_gets函数作用,C语言中gets_s(),gets(),fgets()函数的比较。
  7. 超详细IPONE越狱教程详解
  8. 大整数除一相对较小的数
  9. 服务器端给客户端发送消息,linux 服务器端给客户端发送消息
  10. 电脑该如何选择(小仙女篇)
  11. 【laravel-admin】权限管理与实现原理
  12. MOGRT动态图标模板 爱情元素手绘爱心特效pr视频模板
  13. AltiumDesigner19(AD19)使用设置技巧
  14. 莫纳什大学计算机专业排名,澳大利亚大学计算机专业排名
  15. Android TextView自动调整字体大小(官方)
  16. pip安装python库总提示下载超时read timed out的解决办法
  17. 试证明:如果X→Y,W→Z ,则 XW→YZ。
  18. MySQL - 为什么使用B+树做索引结构
  19. #Reading Paper# 【序列推荐】ICKM 2022 RETR:Recommender Transformers with Behavior Pathways
  20. java计算机毕业设计汽车售后服务信息管理系统的设计与实现源码+数据库+系统+lw文档+mybatis+运行部署

热门文章

  1. WEB安全第六篇--千里之外奇袭客户端:XSS和HTML注入
  2. keystone环境搭建(源码方式+yum方式)(ocata版本)
  3. JSONArray ja = JSONArray.fromObject(list);//特殊类 用于将list转化为JSON 数据并返回 out.print(ja);...
  4. ASP.NET AJAX中防止用户多次提交页面
  5. linux导出Mysql数据sql脚本
  6. 快速稀疏角点光流框架(Fast sparse corner optical flow framework)
  7. 朱恒志20135314实验2 实验报告
  8. 组合数学引论部分习题答案
  9. BlueViewer 地图加载分析(C#)
  10. 「知识蒸馏」最新2022研究综述