Java 我是在创建对象还是变量?
我正在读一本关于Java编程的书,作者使用了如下示例:Java 我是在创建对象还是变量?,java,Java,我正在读一本关于Java编程的书,作者使用了如下示例: import java.text.NumberFormat; public class NumberFormatTest { public static void main (String[] args){ NumberFormat currency = NumberFormat.getCurrencyInstance(); } } 我对这句话感到困惑: NumberFormat currency =
import java.text.NumberFormat;
public class NumberFormatTest {
public static void main (String[] args){
NumberFormat currency = NumberFormat.getCurrencyInstance();
}
}
我对这句话感到困惑:
NumberFormat currency = NumberFormat.getCurrencyInstance();
这是创建NumberFormat类的对象,还是创建变量?我意识到“新”语句没有用,所以我不认为它是一个对象。我很困惑。有人能解释一下这行代码中发生了什么吗
Kevin是的,您正在创建NumberFormat类的对象(或者可能是该类的子类的对象)。您正在调用的方法-
NumberFormat.getCurrencyInstance()
-包含创建实例的new
语句。它是一个工厂方法,用于创建类的实例并将对该实例的引用返回给调用方
然后,您的
currency
变量保存对NumberFormat
对象的引用。您正在创建一个变量,可能还有一个对象
这一行:
NumberFormat currency ...
创建一个局部变量。最好说您声明了一个局部变量,但将其视为创建变量并没有错。下一部分:
... NumberFormat.getCurrencyInstance()
可能会创建一个对象,但它也可能会返回在程序中其他位置创建的对象(例如,如果
getCurrencyInstance()
已在其他位置调用,它可能只会重用已创建的对象)。您正在创建变量和对象
NumberFormat currency = NumberFormat.getCurrencyInstance();
NumberFormat currency
,创建NumberFormat类型的变量
NumberFormat.getCurrencyInstance()
,创建NumberFormat类型的实例/对象
,并返回相同的值。您有一个名为“currency”的变量,该变量被分配给NumberFormat类型的对象。java中唯一的非对象类型是基元类型—int、long、float、boolean
等等,但是每个基元类型都有等价的对象
我认为混淆是因为NumberFormat使用静态方法来创建其对象,因此它在幕后为您执行new
您的书可能会像这里所描述的那样深入了解对象与类:明白了。。。因此getCurrencyInstance()
方法包含的代码包含一个new
语句,该语句创建实例,对吗?正确。像这样的方法通常会缓存它们创建的对象,因此它可能会首先检查静态字段是否为null,然后调用new
,如果字段为null,则返回值(field或new)。从技术上讲,@markspace的答案更正确。您不知道getCurrentyInstance()
正在创建任何内容。它可能返回对以前创建的实例的引用。在本例中,由于NumberFormat
是可变的,因此它可能是一个新实例。在一般情况下,如果不检查实现,您就不知道。