在单独的方法中初始化 Java 对象:为啥这不起作用

Posted

技术标签:

【中文标题】在单独的方法中初始化 Java 对象:为啥这不起作用【英文标题】:Initializing a Java object in a separate method: why this won't work在单独的方法中初始化 Java 对象:为什么这不起作用 【发布时间】:2011-10-26 18:00:07 【问题描述】:

这件事我不能说我很惊讶它不起作用,但无论如何,找到这个案例的解释对我来说很有趣。 假设我们有一个对象:

SomeClass someClass = null;

以及将这个对象作为参数来初始化它的方法:

public void initialize(SomeClass someClass) 
  someClass = new SomeClass();

然后当我们调用时:

initialize(someClass);
System.out.println("" + someClass);

它将打印:

null

感谢您的回答!

【问题讨论】:

Is Java pass by reference? 的可能重复项 Can I pass parameters by reference in Java?的可能重复 【参考方案1】:

以及将这个对象作为参数来初始化它的方法:

在您的情况下,该方法不采用 object 作为参数。它需要一个指向 null 的引用。然后它复制此引用并将其指向SomeClass 的新实例。但显然,您作为参数传递的引用仍然指向 null

【讨论】:

【参考方案2】:

正如 Armen 所说,您想要做的事情是不可能的。为什么不使用factory method?

【讨论】:

【参考方案3】:

在java中是不可能的。在 C# 中,您将使用 refout 关键字传递参数。 java中没有这样的关键字。详情可以看这个问题:Can I pass parameters by reference in Java?

顺便说一句,出于同样的原因,您不能在 java 中编写交换两个整数的交换函数。

【讨论】:

以上是关于在单独的方法中初始化 Java 对象:为啥这不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥java的子类中必须调用父类的构造方法

如果在 Ruby 中一切都是对象,为啥这不起作用?

为啥 Java 反射 API 允许我们访问私有和受保护的字段和方法?这不会破坏访问修饰符的目的吗? [复制]

为啥我不能将 ToUpper() 应用于 OwnerNode?

java中的string类中内容一旦被初始化就不能改变为啥还有replace方法呢?

java 内部类为啥不能static