为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

翻阅古今 2023-04-26 14:50:56
我想在 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”,您的代码就可以工作了。


查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信