无论何时使用Java创建类的实例,该如何使用:
Class nameOfClass = new Class();
创建一个对象,然后可以通过在对象名称后面添加一个句点来调用它的方法。为什么在使用BigInteger时不需要使用new关键字或括号,并且可以这样创建一个新对象:
BigInteger first = BigInteger.valueOf(1);
我已经阅读了文档here,以及许多谷歌搜索,以找出原因为何无效。
答案 0 :(得分:3)
这称为工厂方法。一个static
方法,为您创建并返回一个新对象。
当你有很多方法来创建对象时,它们很方便,但实际上并不想过多地重载方法签名(即有大量不同的构造函数)
答案 1 :(得分:3)
这是一个静态factory method,它返回BigInteger
的实例。
public static BigInteger valueOf(long val)
{
if (val == 0)
return ZERO;
if (val > 0 && val <= MAX_CONSTANT)
return posConst[(int) val];
else if (val < 0 && val >= -MAX_CONSTANT)
return negConst[(int) -val];
return new BigInteger(val);
}
请参阅,它要么返回new BigInteger(val)
,要么通过BigInteger
数组实例成员返回已存在的BigInteger
。作为参考,这是创建数组的静态块:
private static BigInteger posConst[] = new BigInteger[MAX_CONSTANT+1];
private static BigInteger negConst[] = new BigInteger[MAX_CONSTANT+1]
static
{
for (int i = 1; i <= MAX_CONSTANT; i++)
{
int[] magnitude = new int[1];
magnitude[0] = i;
posConst[i] = new BigInteger(magnitude, 1);
negConst[i] = new BigInteger(magnitude, -1);
}
}
答案 2 :(得分:1)
这是一种静态工厂方法。一种静态方法,用于创建和返回新对象。因此,您可以创建一个内部调用static
操作
new
方法
答案 3 :(得分:1)
这是因为BigInteger.valueOf方法是一个静态工厂方法。这意味着该方法本身仅用于创建BigInteger的单个实例。此链接很好地描述了何时使用静态方法:Java: when to use static methods
答案 4 :(得分:1)
BigInteger使用factory method
模式创建具有更有意义的方法名称的新实例。工厂方法还允许JVM重用通常可重用的值(例如1)的相同实例来节省内存。
顺便说一句,您可以使用new关键字来构造新实例,但构造函数会使用许多参数或字符串,这可能会造成混淆。