通过Java中的构造函数调用没有实例的方法

时间:2018-11-18 11:19:21

标签: java

我对这个动作的名称及其在内存中的执行方式非常怀疑。

在main()方法中,我编写了这些句子或说明。

public static void main(String[] args) {
    int i = 0;
    int j = new Random().nextInt(100); // As it is called this way of acting or as it is called.
}
  • 我已经清楚地知道它的作用是直接调用Random类的构造函数方法,调用nextInt方法并生成存储在int j变量中的随机数,但我不这样做不知道如何定义这种类型的动作,我也不知道执行这种指示是否正确。

  • 我很好奇知道这种动作叫什么。

感谢您的关注。

P.D:对不起..我正在学习

3 个答案:

答案 0 :(得分:5)

int j = new Random().nextInt(100);

几乎相同
Random r = new Random();
int j = r.nextInt(100);

即都创建Random类的实例(对象),然后调用该实例的方法。

区别在于,在第一种情况下,您不保留对已创建实例的引用,因此您无法再次访问该实例,并且由于不存在对该实例的引用,因此可以立即对其进行垃圾回收。

正如安迪(Andy)所建议的,您可以像创建Random类的实例并将其分配给一个名为nextInt()方法的变量,然后退出该实例的作用域那样看待它。变量已声明:

int j;
{
    Random r = new Random();
    j = r.nextInt(100);
}
// at this point you have no access to the Random instance

答案 1 :(得分:2)

一个重要的注意事项:这段代码短了一点,如果您不需要再次调用nextInt()也可以。如果可以的话,最好将实例存储在变量的Random类上,因为为多个int值创建多个Random对象的过程太繁琐了。

答案 2 :(得分:1)

从技术上讲,有一个类的实例,因为您看到了关键字100 200 300 0 0 0 0 0 0 400 400 500 600 0 0 0 0 -144118967647076350 0 0 0 3508856861431739000000000000000000 2070380395102208 0 0 0 0 -0 0 1921062897128927200000000000000000 1921062897128927200000000000000000 0 0 0 0 0 -0 0 1921062897128927200000000000000000 0 0 0 1921064599296481200000000000000000 -0 0 0 3501549920349857000000000000000000 3486704852883756600000000000000000 -1 0 0 0 0 0 -5529745792027328500 0 0 0 0 1931126885420802600000000000000000 1931126885420802600000000000000000 0 0 1941291301598365100000000000000000 1990334617392229100000000000000000 0 1940873342092601300000000000000000 0 1931097793829879400000000000000000 1931096401147335200000000000000000 1931096401147335200000000000000000 -0 0 0 0 0 0 0 0 1934835908521006500000000000000000 1934835908521006500000000000000000 -406541672906752 -1 1931096401147335200000000000000000 1931134003576028500000000000000000 0 0 0 0 1990463982126334400000000000000000 1990463982126334400000000000000000 0 0 0 0 0 0 0 0 0

在这里看到的称为方法链接。

您首先使用new调用构造函数,然后将new Random()方法链接到它。

如果您好奇如何在没有类实例的情况下调用方法,则简单的答案是您需要一个静态类:)好的reference on static classes

但是一个简单的示例是java中的Math类,您可以通过它执行以下操作:

nextInt()

注意调用Math时如何不使用“ new”