给内部类对象数组属性赋值时报错:Exception in thread "main" java.lang.NullPointerException
前言
1255: 打怪升级(Java),写这个题目程序的时候,控制台提示如下错误:
Exception in thread "main" java.lang.NullPointerException
at 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.NullPointerException
at 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);
}
}
其他代码都不用改,这样一来,堆中就变成了了这样:
到这里在运行程序,就能正常输出想要的东西了:

小结
类的实例数组,每一个都需要单独创建。切记!切记!
给内部类对象数组属性赋值时报错:Exception in thread "main" java.lang.NullPointerException的更多相关文章
- java使用类数组 报错Exception in thread "main" java.lang.NullPointerException
源代码如下: Point[] points=new Point[n];//Point是一个类 for(int i=0;i<n;i++) { System.out.print("请输入x ...
- Spring Boot 启动报错 Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 37
使用命令 java -jar springBoot.jar 启动项目,结果报错如下: Exception at java.lang.String.substring(String.java:) at ...
- Idea运行时Scala报错Exception in thread "main" java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
一.情况描述 使用idea +scala+spark,运行程序代码如下: package cn.idcast.hello import org.apache.spark.rdd.RDD import ...
- Spring报错:Exception in thread "main" java.lang.IllegalArgumentException at org.springframework.asm.ClassReader.<init>(Unknown Source)
简单搭建了一个Spring Maven工程就报错: 看到网上说是JDK 7 和 Spring3.x :JDK编译级别设置成1.7,仍然没有得到解决,采用版本为 3.2.0.RELEASE <b ...
- 使用Grizzy+Jersey搭建一个RESTful框架()报错Exception in thread "main" java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;
报错的类涉及UriBuilder,我搜索类发现, 这个类存在于两个包中,我在baidu的时候,也有人提到是jar包冲突,我就删除了 这个依赖,问题解决了. 环境搭建过程请见地址https://blog ...
- springBoot报错Exception in thread "main" java.lang.NoClassDefFoundError: ch/qos/logback/classic/Level
解决办法: 如果使用的是阿里云 maven 镜像,在这会有找不到最新 Springboot 相关包的问题,请把加速镜像指向华为云: <mirror> <id>huaweiclo ...
- 创建Sqoop作业,报错Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONObject
WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P in ...
- 报错Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/...
首先我的jdk是11.05的 这个是由于: 这个是 由于缺少了javax.xml.bind,在jdk10.0.1中没有包含这个包,所以我自己去网上下载了jdk 8,然后把jdk10.0.1换成jdk ...
- spark使用idea向yarn提交报错:Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig
解决方法: 找到1.19版本放到spark的jars目录下
随机推荐
- Java基础系列 - JAVA集合ArrayList,Vector,HashMap,HashTable等使用
package com.test4; import java.util.*; /** * JAVA集合ArrayList,Vector,HashMap,HashTable等使用 */ public c ...
- 2018-2019-2 20165312《网络攻防技术》Exp7 网络欺诈防范
2018-2019-2 20165312<网络攻防技术>Exp7 网络欺诈防范 目录 一.相关知识点总结 二.实验内容 三.实验步骤 四.实验总结及问题回答 五.实验中遇到的问题及解决方法 ...
- insmod某个内核模块时提示“Failed to find the folder holding the modules”如何处理?
答: 创建/lib/modules/$(uname -r)目录,命令如下: mkdir /lib/modules/$(uname -r)
- Greenwich.SR2版本的Spring Cloud Config+BUS实例
Spring Cloud Config统一的配置中心同注册中心Eureka一样,也分服务端和客户端.服务端用来保存配置信息,客户端用来读取.它的优势是基于Git仓库,支持多环境.多分支配置.动态刷新. ...
- Access-Control-Max-Age是什么?
Access-Control-Max-Age是什么 答: 浏览器的同源策略,就是出于安全考虑,浏览器会限制从脚本发起的跨域HTTP请求(比如异步请求GET, POST, PUT, DELETE, ...
- Linux 系统中部署 LNMP 高可用负载均衡架构集群实现动态博客
(一)设计思路 高可用:keepalived 解决方案 负载均衡:(lvs)DR做轮询,需要一个调度器,后端节点两个(部署nginx动态博客),通过一个vip去访问动态博客 后端节点需要部署动态博客作 ...
- 123457123456---com.threeObj03.FanPaiZi01--- 记忆翻牌儿童
com.threeObj03.FanPaiZi01--- 记忆翻牌儿童
- python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,具体看代码,附上整个project代码
python自动化框架雏形,根据自己需要封装:ui自动化,接口自动化均可适用,python版本为python3.x,不要问我为什么不用python2.x,附上整个project代码:http://fi ...
- Spring Cloud(7.2):配置Producer Server
我们首先创建一个生产者服务.这里以一个商品价格服务为例,这个微服务可以对商品-价格信息进行增删改查,当有商品-价格信息被更新或删除,则该微服务发送消息,告诉其他调用它的系统这条信息已经被修改. 配置p ...
- 第十二章 与Spring集成——《跟我学Shiro》
转发:https://www.iteye.com/blog/jinnianshilongnian-2029717 目录贴:跟我学Shiro目录贴 Shiro的组件都是JavaBean/POJO式的组件 ...