使用同一实例创建多个对象

时间:2020-06-11 04:35:09

标签: java oop object

我刚刚看到本教程通过应用DAO模式使用同一个实例创建多个对象,并在一个简单的控制台中对其进行了尝试,但据我所知,我总是感到困惑java.lang.NullPointerException,据我所知,构造函数只能使用一次,并且该对象将是不可变的。请看一下:

Fighter.java

public class Fighter {
    private String style;

    public Fighter() {}

    public String getStyle() {
        return style;
    }
    public void setStyle(String style) {
        this.style = style;
    }
}

FightersDAO.java

public class FightersDAO {
    public List<Fighter> getFighters(){

        List <Fighter> fighter = new ArrayList<>();
        String [] styles= { "Karate", "Sumo", "Pro-Wrestling" };

        for(int i=0; i < styles.length; i++) {
            Fighter temp = new Fighter();;
            temp.setStyle(styles[i]);
            fighter.add(temp);
        }
        return fighter;
    }
}

Demo.java

public class Demo {
    private static FightersDAO fighterDAO;
    public static void main (String [] args) {
        List <Fighter> fighters = fighterDAO.getFighters();

        for(Fighter e: fighters) {
            System.out.println(e.getStyle()); //this should output the objects, but nothing shows
        }
    }
}

为什么它为空?哪一部分出了错

3 个答案:

答案 0 :(得分:3)

变量fighterDAO从未初始化。因此,您在这里获得了NPE:

List <Fighter> fighters = fighterDAO.getFighters();

要解决此问题,请执行以下操作:

private static FightersDAO fighterDAO = new FightersDAO();

答案 1 :(得分:3)

import emojiPlugin, { defaultTheme } from 'draft-js-emoji-plugin'; // say i need to extend the emojiSelectPopover's css then. defaultTheme.emojiSelectPopover = defaultTheme.emojiSelectPopover + " own-class" // own class is a class with your required enhanced css. this helps in preserving the old css. const emojiPlugin = createEmojiPlugin({ theme : defaultTheme })
我认为有一个问题,因为它没有初始化。

更改:
private static FightersDAO fighterDAO;

答案 2 :(得分:0)

在您的代码中
private static FightersDAO fighterDAO; //此处未初始化。它只是一个声明,所以fighterDAO = null;

在执行以下代码时将抛出异常 列出战斗人员= fighterDAO.getFighters(); //表示null.getFighters();

下面是正确的代码

package aks;

import java.util.List;

公共课程演示{ 私人静态FightersDAO fighterDAO = new FightersDAO();

public static void main (String [] args) {
    List <Fighter> fighters = fighterDAO.getFighters();

    for(Fighter e: fighters) {
        System.out.println(e.getStyle()); 
    }
}

}

您可以通过仅在eclise或任何IDE上调试来进行分析

如果您要使用同一实例,请使用以下代码

私有静态FightersDAO fighterDAO = new FightersDAO();

相关问题