2013-11-15 27 views
0
import java.util.*; 

import java.io.*; 

public class Test extends ArrayList 
{ 

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

    public static void main(String[] args) 
    { 
     new Test().add(); 
     new Test().contains(); 
    } 



    public boolean add(){ 
     list.add("cat"); 
     System.out.println(list); 
     return true; 
    } 

    public void contains(){ 
     if (list.contains("cat")){ 
      System.out.println("list contains cat"); 
     } 
     else{ 
      System.out.println("list doesn't contain cat"); 
     } 

    } 

} 

爲什麼不是結果[貓]列表包含貓? 它不斷給我[貓]名單不包含貓。 第一種方法工作正常,但爲什麼不是第二種? 謝謝......我真的很陌生。如何在main中調用java中的方法?

+0

什麼是繼承'ArrayList'的目的? – Masudul

回答

7

這是因爲你使用不同的實例調用兩個方法。

new Test().add(); // Creates 1 instance 
new Test().contains(); // creates another instance 

您需要使用相同的實例來調用這兩個方法。由new Test()與創建

Test t = new Test(); 
t.add(); 
t.contains(); 

每一個新的Test對象都有自己的list副本。這就是爲什麼當您與另一個實例調用時,它仍然爲空,因爲第一個實例的list只添加了字符串「cat」。

+0

謝謝,這很有道理! – user2995344

1

由於arraylist不是靜態的,因此您要創建兩個App實例,其中每個實例都有自己的列表變量。

設置變量靜態,它將工作。

static ArrayList<String> list = new ArrayList<String>(); 

但是最好使用相同的實例來調用兩次。

Test test = new Test(); 
test.add(); 
test.contains(); 
1

您打給new Test()兩次。您正在創建兩個實例。您將添加到第一個,並在第二個(新創建的)上檢查contains

0

您正在創建兩個Test實例。然後你創建兩個單獨的「list」實例。首先是字符串「貓」,第二個是空的。

0

爲什麼要擴展ArrayList?可能你可以嘗試這樣...

import java.util.ArrayList; 

public class Test { 

    public static void main(String[] args) { 
     ArrayList<String> list = new ArrayList<String>(); 
     list.add("cat"); 
     System.out.println(list); 

     if (list.contains("cat")) { 
      System.out.println("list contains cat"); 
     } else { 
      System.out.println("list doesn't contain cat"); 
     }  

    } 
}