对于我正在做的项目,我想使用一个单独的类来存储arraylist中各种人的信息。在这种情况下,该方法将包含一个字符串的arraylist来存储我的所有信息。当我尝试这样做时,我意识到每次我运行storage
向arraylist添加一个字符串时,它都会从arraylist中删除所有先前的信息。
是否可以这样做,以便字符串Hello, How Are You?
和I'm fine. How Are You?
添加到类two
中的数组,而不会在重新运行该方法后重置数组?
public class one
{
public static void main (String [] args)
{
two t = new two();
t.storage("Hello, How Are You?");
t.storage("I'm fine. How Are You?");
}
}
import java.util.ArrayList;
public class two
{
public static void storage(String toBeAdded)
{
ArrayList<String> al = new ArrayList<String>();
al.add(toBeAdded);
System.out.println(al);
}
}
给定输出:
[Hello, How Are You?]
[I'm fine. How Are You?]
预期产出:
[Hello, How Are You?]
[Hello, How Are You?,
I'm fine. How Are You?]
答案 0 :(得分:2)
有两种方法可以解决您的问题:
选项(1):您当前的 ArrayList
范围是storage
方法的本地,因为您正在创建品牌{{1}每个调用new
方法{},ArrayList
,但您需要的是类级别的storage()
static
对象,如下所示,但因为您正在调用{{ 1}}使用对象的方法,这不是更好的选项(在下面清楚地解释),编译器已经发出警告,你忽略了它。
ArrayList
选项(2)(首选):删除storage()
范围,并将public class two {
private static ArrayList<String> al = new ArrayList<String>();
public static void storage(String toBeAdded)
{
al.add(toBeAdded);
System.out.println(al);
}
}
声明为实例变量,如下所示(更喜欢此选项),因为您正在调用使用不需要的对象引用的static
方法会造成混淆。
ArrayList<String>
始终确保使用classname(如Two.storage())调用 static
变量/方法而不创建任何对象,因为它们是类级别成员,即它们不适用于单个对象。我强烈建议您阅读this并更清楚地理解这个主题。
除了上述重点之外,请始终确保遵循Java 命名标准,因为类名称应以您违反的大写字母开头。
答案 1 :(得分:2)
不要将ArrayList声明为局部变量,而是将其用作字段。同时使方法非静态
public class two
{
private ArrayList<String> al = new ArrayList<String>();
public void storage(String toBeAdded)
{
al.add(toBeAdded);
System.out.println(al);
}
}
答案 2 :(得分:1)
您的错误
每次调用storage()
方法时,您都要创建一个新的&#39; ArrayList&#39;。
解决方案
所以,创建一个类two
的对象,并将其与字符串一起传递给方法storage()
import java.util.ArrayList;
public class one
{
public static void main (String [] args)
{
two t = new two();
t.storage(t,"Hello, How Are You?");
t.storage(t,"I'm fine. How Are You?");
}
}
class two
{
ArrayList<String> al = new ArrayList<String>();
public static void storage(two object,String toBeAdded)
{
object.al.add(toBeAdded);
System.out.println(object.al);
}
}
答案 3 :(得分:0)
在您的班级two
中方法问题storage
您的逻辑不正确每次调用存储来保存新字符串时,您都会创建新的arraylist al
,这将删除之前的所有字符串static
旧arraylist中的信息。
解决在第二类中定义public class two
{
public static ArrayList<String> al = new ArrayList<String>();
public void storage(String toBeAdded)
{
al.add(toBeAdded);
System.out.println(al);
}
}
arraylist并通过方法存储向其添加信息:
storage
注意:同样static
方法也不应该是two
方法,因为您正在创建类storage
的对象并通过此对象调用方法,所以如果你尝试测试它会给你警告:
访问静态方法存储
警告您尝试访问类t
的对象two
中的静态方法ClassName.MethodName()
的原因。
当你在类中声明静态方法时,正确的方法是调用它:
two.storage("Hello, How Are You?");
two.storage("I'm fine. How Are You?");
在你的例子中:
date