2016-01-11 66 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局部范围的建筑工。如果变量名称相同,则需要区分它们所在的范围,否则使用不同的名称。

相关问题