2

我已经从网上下载了一个简单的 java 示例。我正在尝试编译下面给出的代码

package ArrayList;
import java.util.ArrayList;

public class SimpleArrayListExample {

    public static void main(String[] args) {

        //create an ArrayList object
        ArrayList<String> arrayList = new ArrayList<String>();

        /*
        Add elements to Arraylist using
        boolean add(Object o) method. It returns true as a general behavior
        of Collection.add method. The specified object is appended at the end
        of the ArrayList.
         */
        arrayList.add("1");
        arrayList.add("2");
        arrayList.add("3");

        /*
        Use get method of Java ArrayList class to display elements of ArrayList.
        Object get(int index) returns and element at the specified index in
        the ArrayList
         */
        System.out.println("Getting elements of ArrayList");
        System.out.println(arrayList.get(0));
        System.out.println(arrayList.get(1));
        System.out.println(arrayList.get(2));
    }
}

我已经按照你的建议编辑了程序,我可以编译并得到类文件。

java SimpleArrayListExample.java

现在我正在尝试使用

java -classpath . ArrayList.SimpleArrayListExample.java

线程“主”java.lang.NoClassDefFoundError 中的异常

我谷歌发现我必须指定 -classpath 。

http://www.tech-recipes.com/rx/826/java-exception-in-thread-main-javalangnoclassdeffounderror/ 似乎无法解决问题。

4

6 回答 6

3

编译器警告集合中包含的类型尚未声明。您可以使用泛型来消除此警告

ArrayList<String> arrayList = new ArrayList<String>();

编辑:

你的包结构有问题。SimpleArrayListExample不在名为 的目录中ArrayList。修理

  • 移动SimpleArrayListExample.java到一个名为ArrayList.
  • 编译使用: -javac ArrayList/SimpleArrayListExample.java
  • 跑步:java ArrayList.SimpleArrayListExample

注意包名通常使用小写

于 2013-01-23T21:40:34.603 回答
2

这不是编译错误;相反,它是一个编译警告。这意味着它仍然可以编译,但建议修复警告。

在这种情况下,这是因为您ArrayList缺少泛型类型。您应该将其声明为 an ArrayList<String>,因为您只是向其添加字符串。

于 2013-01-23T21:41:22.447 回答
2

您可以使用泛型来避免此警告:

public static void main(String[] args) {

    //create an ArrayList object
    ArrayList<String> arrayList = new ArrayList<String>();

    //...
}

如果您不想使用泛型,也可以禁止显示警告:

@SuppressWarnings("unchecked")
public static void main(String[] args) {
    //...
}
于 2013-01-23T21:40:42.623 回答
2

通过为您的集合提供泛型类型来限制您的集合,或者换句话说使您的集合类型安全(仅编译时),警告将消失

 ArrayList<String> arrayList = new ArrayList<String>();

由于引入了类型推断,也来自Java 7

 ArrayList<String> arrayList = new ArrayList<>();
于 2013-01-23T21:40:44.537 回答
1

这不是错误,而是警告。

这是因为您使用的 ArrayList 没有泛型类型。

您可能想阅读有关泛型的更多信息:http: //docs.oracle.com/javase/tutorial/java/generics/

于 2013-01-23T21:42:28.800 回答
1

使其成为ArrayList<String>.

这称为泛型集合,这意味着它是一个可以使用类型参数化的集合,以存储和检索该类型的对象。

所以,如果你指定你希望它存储String,编译器会知道它也会返回String。如果您不指定任何内容,它本质上会退回到Object,这意味着它可以存储任何内容(非标量)并检索任何内容(这反过来又会使编译器跳跃)。

于 2013-01-23T21:40:01.050 回答