当你在Java中创建一个类的实例时,你会使用:
Class nameOfClass = new Class();
它创建了一个对象,然后您可以通过在对象名称后面添加一个句点来调用它的方法。为什么在使用BigInteger时不需要使用新的关键字或括号,并且可以通过以下方式创建新对象:
BigInteger first = BigInteger.valueOf(1);
我浏览了这里的文档,以及许多谷歌搜索,以找出为什么这毫无用处。
这是一个静态工厂方法,它返回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);
}
}
这被称为工厂方法。一个static
方法,它为您创建并返回一个新对象。
当你有很多创建对象的方法,但不想过多地重载方法签名(即有不同的构造函数)时,它们很方便
这是一个静态工厂方法。一种用于创建和返回新对象的静态方法。因此,您可以创建一个static
方法,该方法在内部调用new
操作
BigInteger使用factory method
模式来创建具有更有意义的方法名称的新实例。工厂方法还允许JVM重用通常可重用值(如1)的同一实例以节省内存。
顺便说一句,你可以使用new关键字来构造新的实例,但构造函数采用了许多参数或字符串,这可能会令人困惑。