【问题标题】:Creating a new null object what will the instance variables be?创建一个新的空对象实例变量是什么?
【发布时间】:2021-04-02 14:32:41
【问题描述】:

假设我有一个名为Class 的类,我创建了一个新的空对象:

Class object = null

Class 中的构造函数是:

private int a;
private String b;

public Class() {
    a = 144;
    b = "Test";
    c = null;
}

abc 是否等于 null?

如果没有,我有没有办法创建对象,以便所有三个实例变量都是null

【问题讨论】:

  • a 是一个int,所以它不能为空。
  • 找出“这可能吗”或“这段代码有什么作用”的最佳方法是编写它并找出答案。在调试器中单步执行代码并检查变量的内容并查看它们所包含的值。

标签: java constructor null


【解决方案1】:

没有。它们不等于任何东西,因为它们不存在。没有任何东西创建过Class 的实例,所以没有实例。

打个比方,你基本上是在问,“如果我不建房子,那房子的窗户是开着还是关着?”他们都不是。

当你这样做时:

Class object = null;

您拥有的是一个变量,它可以(稍后)引用Class 类型的任何实例,但当前引用的是no 实例。

有没有办法让我创建对象,使所有三个实例变量都为空

一种。您可以添加一个不设置这些值的构造函数:

public Class () { }

您可以通过该构造函数创建该类的实例:

Class object = new Class();

然后您可以在调试器中观察您的实例以查看这些值是什么。我在 Java 中不确定 100%,但 int 不能null。这会使问题的那一部分变得毫无意义。 (我知道它不能在 C# 中,但如果它在 Java 中可以,那么忽略这部分并继续。)

如果您尝试使用未分配的 int 局部变量,它将是编译器错误。但这是一个类字段,而不是局部变量。在这种情况下,它将被自动赋予其默认值,对于引用类型通常为 null,而对于原始数字类型则为 0

【讨论】:

    【解决方案2】:

    假设我有一个名为 Class 的类

    鉴于java.lang.Class 已经存在,我们不要。假设您有一个名为 MyClass 的类。

    我创建了一个新的空对象:

    这是矛盾的。

    null 是一个参考。它不是一个对象。事实上,它是表示“我不指任何对象”的引用,也是唯一表示“我没有指向任何东西”的引用。

    当你写作时:

    MyClass x = new MyClass();
    

    那么x藏宝图new MyClass()是'创造一个新的宝箱并把它埋在沙子里'。中间的= 说:更新名为x 的藏宝图,这样跟随它会引导你找到我刚刚制作的宝藏(new X() 表示:制作新宝藏并埋葬它)。

    MyClass x = null;
    

    表示你有一张名为x的藏宝图,目前为空白。

    如果没有,我有没有办法创建对象,使所有三个实例变量都为空?

    这意味着MyClass 宝藏类型的宝箱,其中有一些划痕的空间(int a - 一个数字),并包含一个藏宝图(String b 变量)。如果你想将它们全部设置为null,那么,你不能 - a 是一个原始的 (int) 并且那些不是藏宝图,它们是实际的数字。你不能没有 - a 不能为空。充其量,a 可以是0。 b 可以为空。这意味着有真正的宝藏,但宝藏包含另一张藏宝图(在java中,它主要是一路藏宝图),但那个是空白的。这和根本没有宝藏不同。

    更一般地说,这个问题:“我可以创建一个 MyClass 的新实例,使得所有字段都是我想要的一些值”是一个错误的问题,也许:一般原则是封装:MyClass 是一个 API:这就像一家大公司办公室的接待员。接待员决定提供哪些服务。即使 CEO 有空,如果接待员选择不回答“我现在可以见 CEO 吗?”这个问题,那么你就看不到她了。

    您的问题可以归结为:“如果我冲进这个办公室并要求与 CEO 交谈,我会被允许吗?” - 唯一可行的答案是:嗯,接待员会决定,所以你必须问他。对于类:无论 API 允许您做什么,您都可以做。但这就是你所能做的。

    如果没有构造函数将这些字段初始化为 null,那么,不,你不能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多