给内部类对象数组属性赋值时报错:Exception in thread main java.lang.NullPointerException...
前言
1255: 打怪升级(Java),写这个题目程序的时候,控制台提示如下错误:
Exception in thread "main" java.lang.NullPointerExceptionat oj1255.Main.input(Main.java:41)at oj1255.Main.<init>(Main.java:24)at oj1255.Main.main(Main.java:52)
然后我调试才发现,这个对象数组居然是null
的,这我就不理解了,我明明写了new
的……
于是就有了这篇博客。为了突出重点,就重新写了个类,因此直接看下面的即可,不用管前言。
参考博客
跳币上山岭的博客
示例1
package error.inner;// 外部类
public class Outer {// 内部类private class Inner {public int x; // 属性}private Inner[] test; // 内部类对象数组// 构造方法public Outer() {int i;test = new Inner[2]; // 创建实例for(i = 0; i < 2; i++) {test[i].x = i; // 赋值}// 输出内部类属性值for(i = 0; i < 2; i++) {System.out.println(test[i].x);}}public static void main(String[] args) {new Outer();}}
乍一看,你可能会觉得这段代码没有任何问题,然而事实是在控制台丢一个Exception
给你:
Exception in thread "main" java.lang.NullPointerExceptionat oj1255.Outer.<init>(Outer.java:18)at oj1255.Outer.main(Outer.java:27)
报错在第18行test[i].x = i;
,于是进入了Debug
模式
从红色箭头那一行,我们看到test[0]
是null
的,到这里应该都明白了。
我们在第16行test = new Inner[2]
的代码实际上只是申请的对象数组的大小,如下图所示:
堆内存里面并没有Inner
的实例,因此我们需要加1行代码即可:
// 构造方法public Outer() {int i;test = new Inner[2]; // 创建Inner数组for(i = 0; i < 2; i++) {test[i] = new Inner(); // 创建实例test[i].x = i; // 赋值}// 输出内部类属性值for(i = 0; i < 2; i++) {System.out.println(test[i].x);}}
其他代码都不用改,这样一来,堆中就变成了了这样:
到这里在运行程序,就能正常输出想要的东西了:
小结
类的实例数组,每一个都需要单独创建。切记!切记!
转载于:https://www.cnblogs.com/wowpH/p/11060833.html
给内部类对象数组属性赋值时报错:Exception in thread main java.lang.NullPointerException...相关推荐
- 关于给java数组循环赋值时报错Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException: 5
1.检查初始给数组分配的空间是否足够. 2查看循环限制是否超出限制, 假定数组为something, 数组长度为,something.length, 则指定循环限制要<something.len ...
- idea启动springboot时报错Exception in thread “main“ java.lang.UnsupportedClassVersionError:
idea启动springboot时报错Exception in thread "main" java.lang.UnsupportedClassVersionError:org/s ...
- PI 使用JNative连接报错Exception in thread “main“ java.lang.IllegalStateException: JNative library not load
使用java调用PiApiTools连接PI数据库报错: Exception in thread "main" java.lang.IllegalStateException: J ...
- IDEA运行redis多线程访问报错Exception in thread “main“ java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
错误样式: 解决方案: 下载两个JAR包即可,同样的代码我在MyEclipse中运行就不报错,可能是IDEA缺少这两个JAR包吧,而ME本身自带了 托管下载地址:Central Repository: ...
- 【亲测有效】如何解决Hadoop运行jar包 报错Exception in thread “main“ java.lang.ClassNotFoundException: /input
报错解释 字面意思就是我要运行这个jar但是Java无法找到主类 试错过程 你可能会在这里添加主类,但是还是不行.你可能没辙了. 解决办法 <build><finalName> ...
- SpringBoot—启动报错Exception in thread “main“ java.lang.ClassNotFoundException
问题 在微服务启动时,日志排查发现无法启动. 解决方案 查看是否有xxxApplication类. 在pom.xml中查看中的内是否未加xxxApplication类.
- springboot启动报错Exception in thread “main“ java.lang.NoClassDefFoundError: io/netty/util/Timer
原因: 这是缺少netty包的原因. 解决方法: 加入一下依赖: <!-- https://mvnrepository.com/artifact/io.netty/netty-all --> ...
- 报错Exception in thread “main“ java.lang.NoClassDefFoundError: javax/xml/bind/...
项目一开始用的是jdk8,后来重新导入项目没有设置jdk的版本,idea自动设置jdk11 , jdk11没有javax.xml.bind 这个包,需要手动导包: <!-- https://mv ...
- list.add时报错:Exception in thread “main“ java.lang.UnsupportedOperationException
用list.add()时报错: Exception in thread "main" java.lang.UnsupportedOperationExceptionat java. ...
最新文章
- Cygwin运行nutch报错:Failed to set permissions of path
- ASP.NET MVC:4 Ways To Prevent Duplicate Form Submission(转载)
- Golang 1.14 发布 | 云原生生态周报 Vol. 39
- 设计模式学习笔记——工厂(Factory)模式
- 利用VmWare_在本地内网IP地址段_搭建Centos7测试MyCat集群_亲测---Linux工作笔记044
- python 旋转矩阵_【每日算法Day 93】不用额外空间,你会旋转一个矩阵吗?
- 创建 macvlan 网络 - 每天5分钟玩转 Docker 容器技术(55)
- 使用layer 实现点击 显示大图
- 被动语态 动词的过去分词
- 计算机毕业设计php的人事档案管理系统
- shell命令进制转换
- python sasl_python用sasl的方式连接ldap提示
- 计算机专硕可以考事业编吗,专硕考事业编制遇冷
- 数组类型的修改和去重
- String ends with?
- 【报告分享】2020-2021年中国购物中心消费者洞察报告-中国连锁经营协会(附下载)
- EventSystems之鼠标相关事件(实现拖曳功能常用)
- Python学习初衷、心得
- 误删文件夹但是回收站没有找到怎么恢复?
- 西南科技大学Power OJ:实验六 C: 实验六-求X的N次方 求 Xn 。(使用子函数实现功能)