2016-01-11 96 views
-2

我是Java和編程的新手。使用非構造函數的方法初始化對象

我想用已經存在的對象初始化一個對象。

我可以那樣做還是需要使用new

在這裏我沒有使用new,但它工作,爲什麼?

我以爲我需要在內存中創建之前使用new實例化一個對象。

在代碼中,我與obj初始化obj2,所以如果我打印它應該是打印20,但它給默認值30

我在android教程中看到了這段代碼,它說的是sharedpreferences obj = getsharedpreferences();,那就是當我有這個疑問時。

任何人都可以澄清這一點嗎?

public class Class1 { 

    public int b=30; 

    public static void main(String args[]) 
    { 

     Class1 ob =new Class1(); 
     ob.just(); 

    } 

    public Class1 getobj() 
    { 
     Class1 obj =new Class1(b); 

     return obj; 
    } 

    public void aamethod() 
    { 
     System.out.println(b); 
    } 

    void just() 
    { 
     Class1 obj2= getobj(); 
     System.out.println(obj2.b); 
     obj2.aamethod(); 
    } 

    Class1() 
    { 
     a=10; 
    } 

    Class1(int b) 
    { 
     b=20; 
     System.out.println(b); 
    } 
} 
+1

你爲什麼看着android教程?這純粹是Java代碼 –

+2

這甚至不會編譯 – redFIVE

回答

1

它的所有有關的變量是如何一個作用域。在你設定b = 20的最後一個班級定義中。您將傳遞給構造函數的b的值設置爲20.如果將其更改爲this.b = 20,它會將在類頂部聲明的public int b更改爲20,結果應該打印出20在那種情況下,雖然沒有必要將b傳遞給構造者。在構造

變量賦值通常看起來像

public int b 

public Class1 (int b) { 
    this.b = b; 
} 

哪裏this.b是全局範圍公衆詮釋b。在類的頂部和b是構造ARG局部範圍的建築工。如果變量名稱相同,則需要區分它們所在的範圍,否則使用不同的名稱。

相關問題