Java 你怎么不';使用BigInteger时不需要使用new关键字或括号?

Java 你怎么不';使用BigInteger时不需要使用new关键字或括号?,java,biginteger,Java,Biginteger,为什么在使用Java创建类的实例时: Class nameOfClass = new Class(); 它创建一个对象,然后您可以通过在对象名称后添加句点来调用其方法。为什么在使用BigInteger时不需要使用new关键字或括号,并且可以通过以下方式创建新对象: BigInteger first = BigInteger.valueOf(1); 我已经翻遍了文档,也翻遍了很多谷歌搜索,想找出为什么这样做毫无用处。这就是所谓的工厂方法。一种静态方法,它为您创建并返回一个新对象 当您有很多创建

为什么在使用Java创建类的实例时:

Class nameOfClass = new Class();
它创建一个对象,然后您可以通过在对象名称后添加句点来调用其方法。为什么在使用BigInteger时不需要使用new关键字或括号,并且可以通过以下方式创建新对象:

BigInteger first = BigInteger.valueOf(1);

我已经翻遍了文档,也翻遍了很多谷歌搜索,想找出为什么这样做毫无用处。

这就是所谓的工厂方法。一种
静态
方法,它为您创建并返回一个新对象


当您有很多创建对象的方法,但不想让方法签名过多(即,有很多不同的构造函数)时,它们非常方便。

这就是所谓的工厂方法。一种
静态
方法,它为您创建并返回一个新对象


当您有很多创建对象的方法,但不想让方法签名过多(即,有很多不同的构造函数)时,它们非常方便。

这是一种静态工厂方法。用于创建和返回新对象的静态方法。因此,您可以创建一个
static
方法,该方法在内部调用
new
操作,这是一个静态工厂方法。用于创建和返回新对象的静态方法。因此,您可以创建一个
static
方法,该方法在内部调用
new
操作

这是一个static,它返回一个
biginger
的实例

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);
}
这是一个静态函数,返回
biginger
的实例

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);
}

这是因为BigInteger.valueOf方法是静态工厂方法。这意味着该方法本身仅用于创建BigInteger的单个实例。此链接很好地描述了何时使用静态方法:

这是因为biginger.valueOf方法是静态工厂方法。这意味着该方法本身仅用于创建BigInteger的单个实例。此链接很好地描述了何时使用静态方法:

BigInteger使用
工厂方法
模式创建具有更有意义的方法名称的新实例。工厂方法还允许JVM重用通常可重用值(如1)的相同实例以节省内存


顺便说一句,您可以使用new关键字来构造新实例,但构造函数使用了许多参数或字符串,这可能会造成混淆。

biginger使用
工厂方法
模式来创建具有更有意义的方法名称的新实例。工厂方法还允许JVM重用通常可重用值(如1)的相同实例以节省内存


顺便说一句,您可以使用new关键字来构造新实例,但构造函数使用了许多参数或字符串,这可能会让人困惑。

您可以查看源代码,您会发现它的功能与您为
类所描述的相同:
返回新的biginger(val)是的,这很简单--创建一个静态方法,在内部执行
新操作。有趣!我记得在大学时,我复习过工厂法,肯定需要再次翻开书本。lol。有这么多答案,我应该接受哪一个?你肯定不能写“Class nameOfClass=newclass();”@EJP从类创建新对象???我想这就是你应该做的。你可以看看源代码,你会发现它做的事情和你为
描述的一样:
返回新的大整数(val)是的,这很简单--创建一个静态方法,在内部执行
新操作。有趣!我记得在大学时,我复习过工厂法,肯定需要再次翻开书本。lol。有这么多答案,我应该接受哪一个?你肯定不能写“Class nameOfClass=newclass();”@EJP从类创建新对象???我想这就是你应该做的。。