在 Loop 内部创建多个 Java 对象并在外部使用所有对象

我想在 while 循环内创建多个对象并访问 JAVA 8 外部的所有对象。目前使用列表来存储对象,但所有对象都被最后一个对象(最后创建的)替换。


我已经尝试在尝试中初始化列表,在尝试之外,但没有任何效果。


这是我的 test1.java,


import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;


public class test1 {

public static void main(String[] args){

    try {

        List<test2> objList=new ArrayList<>();

        BufferedReader encReader = new BufferedReader(new FileReader("./asd.txt"));

        String eachLine;

        while ((eachLine = encReader.readLine()) != null) {

            String[] data = eachLine.split("\\|");

            if(true){

                objList.add(new test2(data[0], data[1]));

            }

        }   // While ends here


        objList.forEach(x -> x.printEncLoc());


    }catch (IOException e) {

        e.printStackTrace();

    }

}

}

这是我的 test2.java,


public class test2 {

private static String s1;

private static String s2;

test2(String s1new, String s2new){

    s1=s1new;

    s2=s2new;

}

public static void printEncLoc(){

    System.out.println("s1:"+s1+" s2:"+s2);

}

}

这是我的输入文件示例 (asd.txt)


hello|123

qwe|klj

它每次在 forEach 行中只调用最后一个对象的 printEncLoc 函数。它打印输出如下。


s1:qwe s2:klj

s1:qwe s2:klj

这里有什么问题?


翻阅古今
浏览 111回答 1
1回答

拉丁的传说

您将 test2 中的属性设为静态,这意味着所有实例共享相同的属性。因此,当您为第二行更改它们时,第一行也会更改。从 s1 和 s2 以及您的 printEncLoc() 方法中删除“static”,您的代码就可以工作了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java