使用constructer以外的方法初始化对象

时间:2016-01-11 18:04:04

标签: java

我是Java和编程的新手。

我正在尝试使用已存在的对象初始化对象。

我可以这样做,还是需要使用new

在这里,我没有使用new,但它有效,为什么?

我认为我需要在内存中创建之前使用new实例化对象。

在代码中,我使用obj2初始化了obj,因此如果我打印它应该打印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 个答案:

答案 0 :(得分: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是类顶部的全局范围公共int b,b是构造函数arg本地作用于构造函数。如果您有相同名称的变量,则需要区分它们所在的范围,否则请使用其他名称。