给内部类对象数组属性赋值时报错: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中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供.”单例模式可以保证一个应用中有且只有一个实例,避免了资源的浪费和多个实例多次调用导致出错. 单例模式有以下特点: 1.单 ...
- CodeForces 787 题解
A题,因为数据范围很小,所以只要暴力即可,如果能相遇一定范围不大,如果范围很大还没相遇一定是不会相遇的了.正解应当是用扩展欧几里得计算这个方程的整数解,再想办法看看有没有正整数解才是. B题,只要看懂 ...
- Linux之jq
什么是jq?jq是Linux下面把文本字符串格式化成json格式的工具 系统环境:centos 7 一.安装 (1)yum安装 a.安装epel源 # wget http://dl.fedorapro ...
- Ubuntu16.04 apache2+php7.0+mysql5.7环境搭建
今天配置一下web环境,很常见的apache+php+mysql的网站环境: 步骤一:安装apache sudo apt install apache2 步骤二:安装php7 1.安装PHP7和响应的 ...
- GDPR全文翻译(一)
General Data Protection Regulation <一般数据保护法案>全文翻译(一) 编者按 2016年4月14日,欧洲议会投票通过了商讨四年的<一般数据保护法案 ...
- python __new__
1.__new__的作用是什么? 依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程 ...
- 重置密码解决MySQL for Linux
重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor ...
- json简单案例
1.Group类 import java.util.ArrayList; import java.util.List; class Group{ private int id; private Str ...
- Excel导出问题
问题一:本地导出正常,部署到linux服务器导出文件内容乱码? 解决:修改服务器tomcat配置 server.xml 添加URIEncoding="UTF-8" <Conn ...
- Win10使用Tex Live和VS Code和Latex Workshop插件编写Latex文档(未完成版本)
首先取Tex Live官网下载安装包:https://www.tug.org/texlive/acquire-netinstall.html 我下载的是 http://mirror.ctan.org/ ...