2013-01-23 72 views
2

我已經下載從net.I我試圖編譯下面運行時錯誤:運行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例子,我可以編譯我得到了類文件。

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/似乎沒有解決問題。

+0

你嘗試編譯器提出什麼「重新編譯-Xlint:取消選中」? –

+0

(-1)*請在提問前搜索錯誤信息* - 嘗試'arraylist unchecked或unsafe operation' – 2013-01-23 21:42:15

+0

http://stackoverflow.com/questions/12947806/unsafe-or-unchecked-operations-for-arraylist ,http://stackoverflow.com/questions/197986/what-c​​auses-javac-to-issue-the-uses-unchecked-or-unsafe-operations-warning – 2013-01-23 21:43:46

回答

3

編譯器是警告集合中包含的類型尚未聲明。 可以使用泛型emilinate此警告

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

編輯:

沒有與你的包結構的問題。 SimpleArrayListExample不在名爲ArrayList的目錄中。修復

  • SimpleArrayListExample.java移動到名爲ArrayList的新目錄。
  • 編譯使用: - javac ArrayList/SimpleArrayListExample.java
  • 要運行:java ArrayList.SimpleArrayListExample

注意包名通常使用小寫

+0

即使這似乎並不奏效。我試過了,得到了同樣的錯誤。 :( – liv2hak

+1

似乎是一個包名稱的問題。請參閱更新 – Reimeus

1

使之成爲ArrayList<String>

這就是所謂的泛型集合,這意味着它可以用一個類型參數的集合,用於存儲和檢索該類型的對象。

因此,如果您指定要存儲String,編譯器將知道它也會返回String。如果你沒有指定任何東西,它實際上會回落到Object,這意味着它可以存儲任何東西(非標量)並檢索任何東西(這反過來又會使編譯器跳動)。

+0

ArrayList和ArrayList有什麼區別 liv2hak

+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) { 
    //... 
} 
+0

請參閱我更新的問題。您的建議我得到一個不同的錯誤 – liv2hak

+1

啊,請確保您將通用聲明放在正確的位置:ArrayList arrayList = new ArrayList (); –

+0

感謝much.Now我得到一個新的運行時錯誤:( – liv2hak

2

限制您的收藏鍵入您的收藏或換句話說,使您的收藏類型安全(僅編譯時間)和警告將消失

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

的Java 7由於類型推斷inroduction

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

這不是一個編譯錯誤;相反,它是一個彙編警告。這意味着它仍然可以編譯,但建議修正警告。

在這種情況下,這是因爲您的ArrayList缺少通用類型。您應該將其聲明爲ArrayList<String>,因爲您只是向其添加字符串。