【问题标题】:Proper variable initialization and call from another class正确的变量初始化和从另一个类调用
【发布时间】:2014-09-24 14:03:40
【问题描述】:

下面有这两个例子:

示例 1:

public class class1{
    private classN var1;
    public class1(param1) {
        var1 = new classN(param1); //here I initialize var1;
    }

    public void setVar1(param1){
        this.var1 = new classN(param1)
    }

    public classN getVar1(){
        return this.var1;
    }
}

public class class2{
    private class1 c1;
    public class2(param) {
        this.c1 = new class1(param);
    }

    public void handle(){
        c1.setVar1(sth);
    }
}

示例 2:

public class class1{
    private classN var1; //var1 not initialized inside constructor
    public class1() {}

    public void setVar1(param1){
        this.var1 = new classN(param1);
    }

    public classN getVar1(){
        return this.var1;
    }
}

public class class2{
    private class1 c1;
    public class2() {
        this.c1 = new class1();
    }

    public void handle(){
        c1.setVar1(sth);
    }
}

我想问两件事:

  1. 两个例子是否相等?
  2. var1 是否在这两种情况下都初始化了,否则我会在示例 2 中遇到某种异常?

提前谢谢你。

【问题讨论】:

  • 你试过测试它们吗?请做;)
  • 编译它(我不认为它是)。运行。如果您遇到异常,请告诉我们。我们当然会提供帮助。
  • 我得到了两个例子java.lang.NullPointerException

标签: java oop object


【解决方案1】:
  1. 不,两个示例不相等。在示例一中,变量在构造时初始化,没有它就无法实例化class1。在示例 2 中,变量未初始化,并被赋予默认值 null,直到稍后设置 setVar1
  2. 不,您不会遇到异常。如果您在调用handle 之前尝试调用getVar1,您将获得默认的null 值。

【讨论】:

    【解决方案2】:

    两个例子是否相等?

    不,如果是 -1,new class1(param); 会初始化 var1;(为非空值),在第二种情况下,var1 将是 null

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      相关资源
      最近更新 更多