2015-02-06 60 views
-2

我正在嘗試在培訓程序中學習java,但是發現自己在一些簡單的東西(如專業術語)上裝了瓶裝。程序中的類實例化位置

我的任務之一請求以下內容:使用兩個字符串變量創建一個不可變類。然後我們要實例化這個類。

public class Assignment { 

    public final class Immutable { 
     String one; 
     String two; 
    } 
    public static void main(String[] args) { 

     // Do I instantiate my class here? 

    } 
} 

出於某種原因,「類實例化」的概念是逃逸我:( 任何幫助,就這麼簡單的事情讚賞

+0

你想知道類是如何裝? – User27854 2015-02-06 02:00:15

+0

[Immutable class?]可能的重複(http://stackoverflow.com/questions/3162665/immutable-class) – User27854 2015-02-06 02:17:17

回答

1

實例化是說你可以將這個類的一個實例的方式....沒有幫助嗎?記住這是面向對象編程,一個類只是一個對象的概念,所以你必須創建一個對象的實例...或者換句話說,將它的「想法」分配給一個變量,堅持與我......

因此,使一個類不可變的,你使它最終。這就是它。不可變=最終。它有點mak如果你仔細想想,你會覺得有意義。

public final class Assignment{ 
    public Assignment(){ 
    } 
} 

這是類及其構造函數。

要使用(實例),它...

Assignment asmt = new Assignment(); 

ASMT是你的類分配的實例。

現在添加變量...

public final class Assignment{ 
    private final String _one; 
    public Assignment(){ 
    } 

    public void setOne(String one){ 
      _one = one; 
    } 
    public String getOne(){ 
      return _one; 
    } 
} 

終於等來使用分配類:

Assignment asmt = new Assignment(); 
asmt.setOne("this var one"); 

然後來獲取值...

System.out.println(asmt.getOne()); 
+1

我想你忘記了變量。 – User27854 2015-02-06 02:10:40

+0

@ user2900314 ...更新 – Menefee 2015-02-06 03:23:59

+0

通過只讓類最終,不會導致不可變的類。你創建的這個類不能擴展它。不可變的手段:對象的內容是固定的,你不能改變它(所以沒有setter方法或任何改變對象狀態的方法)。如果你想改變對象的狀態,那麼它將會或者你將創建一個新的對象。我在下面發佈了我的答案。 – User27854 2015-02-06 05:36:12

2

如果一堂課是模板,那麼使用該模板噴在牆上的圖像就是它的實例。只要您有足夠的內存(即牆上的空間)可用,您就可以創建一個類的多個實例。

創建一個實例,您需要使用關鍵字new調用它的構造,它是類本身的名字命名:

Immutable myFirstImmutable = new Immutable() 

它在Java Tutorial描述相當不錯。

然而,你的類並不是一成不變的,因爲它是可以改變這兩個領域的任何時間:

myFirstImmutable.one = "some value" 
myFirstImmutable.one = "oh no, another value" 

而且標誌着類爲final(以避免它被子類),您還需要標記這些字段(一個和兩個)是最終的。

+0

如果這些字段被聲明爲final,則它們必須在實例化時填充。 :) 你不能簡單地通過這種方式設置「myFirstImmutable.one =」Data「; – 2015-02-06 02:14:11

+0

當然:-)但是,由於OP沒有給任何有關爲這些不可變字符串變量賦值的內容...... ;-)我想,分配的目的是爲了一個2參數構造函數,2個最終字段和2個getter方法來訪問這些字段。 – martin 2015-02-06 02:30:48

0

當您實例化一個類時,您必須實際聲明類類型的New對象。這是通過使用new關鍵字完成的。請參閱下面的示例,使用您的代碼!另外,在這個例子中不需要外部類。

public final class Immutable { 
    private String one; //For Immutable classes the variables must be declared as private so their values are not modified outside the class. 
    private String two; 

    public static void main(String[] args) { 

    // Do I instantiate my class here? 
    Immutable immutableObject = new Immutable(); // We just created an instance of the class 
    } 
} 

請記住,而Java的確提供了內置的默認構造函數,這是很好的做法,創建自己的構造函數。例如

public final class Immutable { 
    private String one; 
    private String two; //Must be private, it is also good to protect your variables 

    // This is a default constructor 
    Immutable() { 
     one = "default value"; 
     two = "default value"; 
    } 

    // Parameter-accepting constructor 
    Immutable (String one, String two) { 
     this.one = one; 
     this.two = two; 
    } 


    public static void main(String[] args) { 

    // Do I instantiate my class here? 
    Immutable immutableObject = new Immutable(); // Default 
    Immutable immutableObject2 = new Immutable ("A string", "Another string"); // Now we defined the Strings in the instance! 
} 
} // End class 

通過建立我們自己的構造函數,我們可以可以肯定的是我們的類定義正是我們預期的方式。

0

對於一類是不可變的,以下幾點必須是:

  1. 聲明類爲final。
  2. 由fobidding類的實例聲明成員爲私有,並最終(私有,這樣你是不是能夠從訪問 類外)

  3. 設爲默認的訪問修飾符構造私人(有)

  4. 您將只有吸氣方法否設置方法或(沒有修改狀態的方法)。你甚至可以讓它安全。覆蓋克隆方法,以便該對象的克隆不會被製作等。

現在生成的類將不可變。

如:

final class ImmutableInt { 
    private final int value; 

    public ImmutableInt(int i) { 
    value = i; 
    } 

    public int getValue() { 
    return value; 
    } 
}