运行时错误:运行java类文件

时间:2013-01-23 21:39:08

标签: java javac

我从网上下载了一个简单的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

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

我google并发现我必须指定-classpath。

  

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

6 个答案:

答案 0 :(得分:3)

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

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

修改

您的包结构存在问题。 SimpleArrayListExample不在名为ArrayList的目录中。修复

  • SimpleArrayListExample.java移至名为ArrayList
  • 的新目录
  • 使用以下方式编译: - javac ArrayList/SimpleArrayListExample.java
  • 要运行:java ArrayList.SimpleArrayListExample

注意包名称通常使用小写

答案 1 :(得分: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) {
    //...
}

答案 2 :(得分:2)

通过为您的收藏品提供通用类型来限制您的收藏,换句话说,使您的收藏品类型安全 <仅限编译时间,并且警告将消失

 ArrayList<String> arrayList = new ArrayList<String>();
由于类型推断

的产生,

也来自 Java 7

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

将其设为ArrayList<String>

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

因此,如果您指定希望它存储String,编译器将知道它也返回String。如果你没有指定任何东西,它基本上会回退到Object,这意味着它可以存储任何东西(非标量)并检索任何东西(反过来,这会使编译器跳跃)。

答案 5 :(得分:1)

这不是错误,而是警告。

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

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