2014-10-12 41 views
0

我有一個創建創建一個對象實例的類不同的對象使用相同的數據的Java

public class EmployeeProfile { 
    /////////INSTANCE VARIABLES///////// 
    private static String fName; 
    private static String lName; 
    private static String email; 
    private static String phone; 


    ////////CONSTRUCTORS//////////// 
    public EmployeeProfile() 
    { 

    } 

    public EmployeeProfile(String firstName, String lastName, String emailAdd, String pNumber) 
    { 
     fName = firstName; 
     lName = lastName; 
     email = emailAdd; 
     phone = pNumber; 
    } 
} 

當我調用空構造,並與我所創建的方法來填充它自己一切都很好。但是,當我使用第二個構造函數和參數調用一個新名稱的新對象時,它們將覆蓋來自第一個對象的數據!

EmployeeProfile prof1 = new EmployeeProfile(); 
    prof1.firstName("John"); 
    prof1.lastName("Doe"); 
    prof1.email("[email protected]"); 
    prof1.phone("555-555-5555"); 


    EmployeeProfile prof2 = new EmployeeProfile("Jane", "Doe", "[email protected]", "555-123-4567"); 

    System.out.println(prof1.getProfile()); 
    System.out.println(prof2.getProfile()); 

當我運行這個prof1和prof2都從prof2返回數據。我在這裏做錯了什麼?

+1

你認爲'靜態'是什麼意思? – 2014-10-12 02:57:01

+0

geez !!大聲笑我想我應該提到我是相當新的Java以及。謝謝! – 2014-10-12 02:59:17

回答

2
/////////INSTANCE VARIABLES///////// 
private static String fName; 
private static String lName; 
private static String email; 
private static String phone; 

註釋和代碼不一致。 static表示類變量,而不是實例。因此,它們在類實例之間共享。

2

您製作靜態變量。

private static String fName; 
private static String lName; 
private static String email; 
private static String phone; 

當您創建一些變量靜態值,每次覆蓋值。 因此,請將其更改爲無靜態關鍵字。

e.g :private String fName; 
+0

謝謝,我在印象之下的靜態意味着它不會每次都被覆蓋。問題已解決 – 2014-10-12 03:02:55

+0

靜態意味着每個類的實例將共享同一個屬性/變量的實例 – Alex 2014-10-12 03:07:40

1

static表示該變量在整個類中都是靜態的。刪除static所以你變量看起來像這樣:

private String fName; 
private String lName; 
private String email; 
private String phone; 

祝你好運。

0

的問題是,靜態屬性該類的實例之間共享的,這就是爲什麼屬性正在不斷被覆蓋。因此,您應該刪除屬性中的靜態描述符。此外,在面向對象編程範例中,總是建議通過它的getter &設置器來訪問對象的屬性。隨着更改,代碼將如下:

public class EmployeeProfile { 
    /////////INSTANCE VARIABLES///////// 
    private String fName; 
    private String lName; 
    private String email; 
    private String phone; 


    ////////CONSTRUCTORS//////////// 
    public EmployeeProfile() 
    { 

    } 

    public EmployeeProfile(String firstName, String lastName, String emailAdd, String pNumber) 
    { 
     this.setfName(firstName); 
     this.setlName(lastName); 
     this.setEmail(emailAdd); 
     this.setPhone(pNumber); 
    } 

    public String getfName() { 
     return fName; 
    } 

    public void setfName(String fName) { 
     this.fName = fName; 
    } 

    public String getlName() { 
     return lName; 
    } 

    public void setlName(String lName) { 
     this.lName = lName; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getPhone() { 
     return phone; 
    } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 

} 

希望它有幫助。

克萊門西奧莫拉萊斯盧卡斯。

相關問題