有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从另一个类访问时不显示java ArrayList内容

我定义了ArrayList,并通过一个类向其中添加了少量数据

包含ArrayList定义的类

package practice;
import java.util.ArrayList;
class Prac {
   static ArrayList<Integer> ar1=new ArrayList<Integer>();
   public static void it(){
      ar1.add(1);
      ar1.add(2);
      ar1.add(2);
      ar1.add(2);
      ar1.add(2);
      ar1.add(2);
      ar1.add(2);
      ar1.add(2);   
   }
}
public class Exet{
      public static void main(String args[]){
            Prac.it();
      }
}

然后我想通过迭代另一个类来查看存储在ArrayList中的数据我的第二个类如下

二等舱

package practice;
import practice.Prac;
import java.util.*;
public class StackOver {
      public static void main(String args[]){
            System.out.println(Prac.ar1.isEmpty());
                  Iterator<Integer> it=Prac.ar1.iterator();
                  while(it.hasNext()){
                        System.out.println(it.next());
                  }
      }
}

但是,当我执行第二节课时,它没有显示任何内容,所以我的问题是,我是否做了一些不符合原则的事情(那么原因是什么),或者是否有任何出路,一个详细的解释将帮助我提前理解它


共 (3) 个答案

  1. # 1 楼答案

    您正在执行第一类public class Exet{这是一个独立的程序它有自己的main方法。一旦main方法完成,与该程序相关的所有数据都将从内存中删除

    然后执行第二个类,它有自己的main方法,与第一个类执行所做的任何事情都无关,因为它们是您正在执行的两个不同的程序

    通过中的main()方法,可以在项目中拥有任意多的类。但是,Java虚拟机一次只能运行其中一个,作为程序的入口点

  2. # 2 楼答案

    Declaring a method static does not mean it will be run when your class is loaded.

    在第一个程序中,您调用了填充arraylist的方法。在第二个程序中,你从未调用过它

    如果希望其他类可以使用静态块,请在第一个程序中添加一个静态块,并在该静态块中填充arraylist,或者可以从第一个程序的静态块调用“it()”方法

    加载第一个类时,将运行静态块并初始化arraylist

    将第一个程序更改为以下内容:

    public static ArrayList<Integer> ar1=new ArrayList<Integer>();
    static {
            ar1.add(1);
            ar1.add(2);
            ar1.add(2);
            ar1.add(2);
            ar1.add(2);
            ar1.add(2);
            ar1.add(2);
            ar1.add(2); 
    }
    

    更改arraylist的范围,使其可供其他类使用,并在静态块中初始化arraylist,如图所示

    一个更简单的解决方案是调用在第一个程序的静态块中初始化arraylist的方法,如下所示:

    public static ArrayList<Integer> ar1 = new ArrayList<Integer>();
    static {
            it();           
    }
    

    您可以在其他类中访问arraylist,如下所示:

    Prac.ar1

  3. # 3 楼答案

    package practice;
    import practice.Prac;
    import java.util.*;
    
    public class StackOver {
    
        public static void main(String args[]){
            Exet.execute(); // <  Add this in your second class, this will run the code in Exet class.
            System.out.println(Prac.ar1.isEmpty());
            Iterator<Integer> it=Prac.ar1.iterator();
            while(it.hasNext()){
                System.out.println(it.next());
            }
        }
    }
    

    以上代码将是您的主要方法

    package org.test.main;
    
    import java.util.ArrayList;
    
    public class Prac {
    
        static ArrayList<Integer> ar1 = new ArrayList<Integer>();
    
        public static void it() {
            ar1.add(1);
            ar1.add(2);
            ar1.add(2);
            ar1.add(2);
            ar1.add(2);
            ar1.add(2);
            ar1.add(2);
            ar1.add(2);
        }
    }
    
    class Exet {
        public static void execute() { // I remove the main method in here.
            Prac.it(); // In this way, you populate the values in array using Exet Class's execute method.
        }
    }
    

    试试上面的代码。希望有帮助