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

时间:2016-11-15 05:42:48

标签: java arraylist iterator

我已经定义了ArrayList,并通过一个类

添加了一些数据

包含ArrayList defination的类

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 个答案:

答案 0 :(得分:0)

  

声明一个静态方法并不意味着它会在你的类中运行   装了。

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

在第一个程序中添加一个静态块,并在此静态块中填充您的arraylist,如果您希望它可供其他班级使用,或者您可以拨打&#34; it()&#34 ; 方法来自第一个程序的静态块。

加载第一个类时,将运行静态块,并初始化您的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

答案 1 :(得分:0)

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.
    }
}

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

答案 2 :(得分:0)

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

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

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