我想在 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|123qwe|klj它每次在 forEach 行中只调用最后一个对象的 printEncLoc 函数。它打印输出如下。s1:qwe s2:kljs1:qwe s2:klj这里有什么问题?
1 回答
拉丁的传说
TA贡献1789条经验 获得超8个赞
您将 test2 中的属性设为静态,这意味着所有实例共享相同的属性。因此,当您为第二行更改它们时,第一行也会更改。
从 s1 和 s2 以及您的 printEncLoc() 方法中删除“static”,您的代码就可以工作了。
添加回答
举报
0/150
提交
取消