java 对象引用为null时,出现的bug问题
在Java中,对象往往包含属性、方法及一个存储空间,若一个对象的属性和方法是空的则可认为这是一个空对象。
一个空对象也是对象,同样通过对象名引用方法或属性,但和一般对象有点不同。
1.空对象调用非静态方法会出现空指针异常,如下图:
这是因为一个null对象自身的存储空间内是没有任何方法和属性的,所以任何空对象.xxx调用非静态方法或属性都会出现空指针异常;
但空对象可以调用静态方法或属性,如下所示:
这是因为Static 方法是存储在静态池当中的,一个类的所有对象共享静态池的方法;
另外,我们可以理解null为空类型的对象,当必要的时候,他除了没有属性和方法之外,可以强制转换为任意类型的对象。
以下为null调用静态属性及方法的例子:
以上去掉属性和方法前面的关键字Static后,程序不会报错(说明实例化null为空指针对象没有问题),但运行时会报出空指针异常(说明实例化后的空间里面没有方法和属性),如下图:
上面的过程大致可以用下图来描述,每个类的静态方法:
下面是一些非空对象的引用方法过程,结构类似于上面,但是.....
1.非空对象强制转换成非父类对象,程序报错,如下图:
2.非空对象可以转换为父类对象,但是没有多大意义,感觉像在挖坑,因为它们转换前后的运行结果并无区别,如下图:
运行结果是一样的:
转载自csdn原创文章
java 对象引用为null时,出现的bug问题的更多相关文章
- java 反射: 当Timestamp类型的属性值为null时,设置默认值
import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...
- Java使用FileReader(file)、readLine()读取文件,以行为单位,一次读一行,一直读到null时结束,每读一行都显示行号。
//Java使用FileReader(file).readLine()读取文件,以行为单位,一次读一行,一直读到null时结束,每读一行都显示行号. public static void readFi ...
- 新人踩坑的一天——springboot注入mapper时出现java.lang.NullPointerException: null
来公司的第二周接到了定时任务的开发需求:每天早上十点发送用户报表邮件 .校招新人菜鸟没做过这玩意有些懵(尴尬)于是决定分步写,从excel导出->邮件发送->定时器实现->mappe ...
- Druid出现DruidDataSource - recyle error - recyle error java.lang.InterruptedException: null异常排查与解决
一.问题回顾 线上的代码之前运行的都很平稳,突然就出现了一个很奇怪的问题,看错误信息是第三方框架Druid报出来了,连接池回收连接时出现的问题. 2018-05-14 20:01:32.810 ERR ...
- Java中有关Null的9件事
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常 (NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我 ...
- 页面上使用 Thymeleaf 的内联js不当造成了 java.lang.StackOverflowError: null 问题
由于在页面上内联js使用不当,从而在从 Controller 跳转到页面时发生了以下错误: java.lang.StackOverflowError: null at org.thymeleaf.ut ...
- 转!!Java中关于Null的9个解释(Java Null详解)
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...
- 页面提交错误,页面间参数传递java.lang.NumberFormatException: null
多次出现这样的错误,在点击一个按钮触发提交整个页面的事件时,总是报错,不止一次出现这样的错误了. 出现这种问题的分析: 1 我们从这个问题的本身来看,java.lang.NumberFormatExc ...
- JAVA中String = null 与 String = "" 的区别
JAVA中String = null 与 String = ""的区别 笔者今天在Debug的时候发现的NPE(NullPointerException),辛辛苦苦地调试了半天,终 ...
随机推荐
- PHP高级进阶之路
一:常见模式与框架 学习PHP技术体系,设计模式,流行的框架 常见的设计模式,编码必备 Laravel.ThinkPHP开发必不可少的最新框架 YII.Symfony4.1核心源码剖析 二:微服务架构 ...
- vue路由守卫触发顺序
不同组件之间的路由跳转流程图 导航被触发(A–>B) 调用A组件内路由守卫beforeRouteLeave(to,from,next) 调用全局路由前置守卫router.beforeEach(t ...
- vue typescript curd
用typescript 完成了一个页面 import { Component, Prop } from 'vue-property-decorator'; import Vue, { VNode } ...
- DP问题练习2:网格路径数量计算问题
DP问题练习2:网格路径数量计算问题 问题描述 有一个机器人的位于一个 m × n 个网格左上角. 机器人每一时刻只能向下或者向右移动一步.机器人试图达到网格的右下角. 问有多少条不同的路径? 样例: ...
- AntisymmetricRNN: A Dynamical System View on Recurrent Neural Networks(解析)
原文链接:https://arxiv.org/abs/1902.09689 发表在:ICLR 2019 ------------------------------------------------ ...
- XP系统登录界面,需要手动点击用户帐户后才会出现输入密码的界面
问题描述XP系统,用户帐户设置有密码.用户表示之前启动到系统登录界面,会直接出现输入密码的对话框(见图一):现在启动到登录界面只看到用户帐户信息,需手动点击用户名后才能出现输入密码的界面,用户感觉不方 ...
- poi导出excel数据量过大
问题:使用poi导出excel,数据量过大导致内存溢出 解决思路:1.多sheet导出 2.生成多个excel打包下载 3.生成csv下载 本文使用的是第二个思路,代码如下: poiUtil工具类 p ...
- js - 执行上下文和作用域以及闭包
首先,咱们通常被"执行上下文","执行上下文环境","上下文环境","执行上下文栈"这些名词搞混.那我们一一来揭秘这些名 ...
- PHP---pdo和mongodb的操作使用
<?php $pdo = new PDO("mysql:host=127.0.0.1;dbname=testdb","root","123456 ...
- thinkphp5权限仿制
权限列表 流程 thinkphp5封装好的权限模块 RBAC还有auth and then .......管理员表,可以依据auth.php搭建所有的权限表