Java 在构造函数中初始化的变量的作用域

Java 在构造函数中初始化的变量的作用域,java,Java,如果你创建了一个类,比如 public class Supplier { String s; public Supplier() { s = "MyString"; } } 现在,如果您尝试访问同一类中的方法中的。当您运行代码时,变量s仍然保持为null 我想知道构造函数是如何影响变量的。如上所述,这种行为不可能真正发生。有几种方法可以使变量仍然为null: 1) 您正在设置变量之前调用有问题的方法。例如,考虑这个类和方法: public class

如果你创建了一个类,比如

public class Supplier {
    String s;

    public Supplier() {
        s = "MyString";
    }
}

现在,如果您尝试访问同一类中的方法中的。当您运行代码时,变量s仍然保持为null


我想知道构造函数是如何影响变量的。

如上所述,这种行为不可能真正发生。有几种方法可以使变量仍然为null:

1) 您正在设置变量之前调用有问题的方法。例如,考虑这个类和方法:

public class MyClass{

    private String string;

    public MyClass(){
        method();
        string = "Hello";
    }

    public void method(){
        System.out.println(string);
    }
}
使用
MyClass m=new MyClass()构造对象
将打印
null
,因为在调用
method()
时,
string
尚未设置

2) 你调用了错误的构造函数

public class MyClass{

    private String string;

    public MyClass(){
        method();
    }

    public MyClass(String s){
        string = s;
        method();
    }

    public void method(){
        System.out.println(string);
    }
}

使用
MyClass m=new MyClass()构造对象
将打印
null
,因为在调用
method()
时,
string
尚未设置,因为我们调用了错误的构造函数。使用
MyClass m=newmyclass(“Hello”)构造将解决此问题。

不可生产。这段代码应该可以工作。“如果您尝试在同一类中的方法中访问s。当您运行代码时,变量s仍然保持为null。”这对我来说很好。请在代码示例中添加此方法。一个非常常见的错误是,在将实例字段初始化为传递给构造函数的同名参数值时,忘记使用“this”关键字,但是您的示例代码没有这个问题。要在问题中添加更多信息,如正确使用选项。编辑:将标题从“构造函数中声明的变量的范围”更改为“构造函数中初始化的变量的范围”。我在找前者,但这不是。非常感谢。你正中要害。上帝保佑。