我已经定义了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());
}
}
}
但是当我正在执行第二课时,它没有显示任何东西,所以我的问题是,我做了一些无原则的事情(那是什么原因)或者是否有任何出路,详细的解释将帮助我理解它提前感谢
答案 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虚拟机一次运行其中一个作为程序的入口点