javascript - java初始化的数组为什么拿不到值,报错了.

查看:110
本文介绍了javascript - java初始化的数组为什么拿不到值,报错了.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

project001Test.java

package project001.test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;


public class project001Test {
    private project002Test a;
    public project002Test getA() {
        return a;
    }
    public void setA(project002Test a) {
        this.a = a;
    }
    public static void main(String[] arg) throws IOException{

        project001Test p1 = new project001Test();
        project002Test p2 = p1.getA();
        System.out.println(p2.getString()[0]);
    }
}

project002Test.java

package project001.test;

public class project002Test {
    private String[] string = {"1","2"};

    public String[] getString() {
        return string;
    }

    public void setString(String[] string) {
        this.string = string;
    }
}

报错信息:

Exception in thread "main" java.lang.NullPointerException
    at project001.test.project001Test.main(project001Test.java:27)

已经给了string数组的初始值了啊.{"1","2"} 为什么还报错?

解决方案

真是蛋痛的代码~
原因是:
创建对象 project001Test 时,其中的属性只是被声明的,但是没被初始化。导致属性 a 为 null。调用 getA() 返回的是 null。


这是一个你用来学习的代码,所以类名、变量名都比较随意。但是,个人建议,每一次写代码都请认真对待,方便以后自己阅读。

  1. 类名首字母大写,这在Java里面是亘古不变的!

  2. 尽可能不要使用 a b c 这类没意义的变量名。过段时间你自己都不记得这代码写了什么

  3. 不要用 string 这类与关键字类似的名称作变量名。会混淆的

  4. 没意义的包不要引入

具体错误原因:
private Project002Test a;
仅只是声明了变量a为 Project002Test 这个类型,并未创建具体对象。因此调用 getA() 返回 null.
修改方式:

  1. 声明时直接创建

    private Project002Test a = new Project002Test();

  1. 调用时判断创建

    private Project002Test a;
    public Project002Test getA() {
      if (a == null) {
        a = new Project002Test();
      }
      return a;
    }

这篇关于javascript - java初始化的数组为什么拿不到值,报错了.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆