Java 为什么在参数内创建对象而不命名对象是可能的?

Java 为什么在参数内创建对象而不命名对象是可能的?,java,object,constructor,arguments,Java,Object,Constructor,Arguments,我创建了一个维度和一个点对象,但我不需要命名这两个对象,也不需要在方法调用的参数中调用它的构造函数。我能解释一下为什么这是可能的吗?我已经太习惯于给我的对象命名了,我需要解释我的问题 import java.awt.Dimension; import java.awt.Point; import javax.swing.JFrame; public class GameFrame extends JFrame { public GameFrame(

我创建了一个维度和一个点对象,但我不需要命名这两个对象,也不需要在方法调用的参数中调用它的构造函数。我能解释一下为什么这是可能的吗?我已经太习惯于给我的对象命名了,我需要解释我的问题

import java.awt.Dimension;
    import java.awt.Point;

    import javax.swing.JFrame;


    public class GameFrame extends JFrame {

        public GameFrame()
        {

            // call this method to the GameFrame object 
            // if you do not call this method the JFrame subclass will not actually close
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            // set size to an appropriate size
            // create a dimension object 
            setSize(new Dimension(600,600));

            // upon creating the object set the location of the frame to the center of the screen
            setLocation(new Point (500,300));

            // prevent the user from resizing the GameFrame object
            setResizable(false);
        }

    }

变量
标识符
,只是指向对象在内存中占用的空间。在java中,对象通过引用传递给方法。因此,如果在方法调用中创建新对象,该方法将访问存储在内存中的对象,因为您提供了对该对象位置的引用。方法完成后的后续操作将无法访问该对象,因为您没有将引用存储在命名变量中。

a
变量或
标识符仅指向该对象在内存中占用的空间。在java中,对象通过引用传递给方法。因此,如果在方法调用中创建新对象,该方法将访问存储在内存中的对象,因为您提供了对该对象位置的引用。方法完成后的后续操作将无法访问对象,因为您没有将引用存储在命名变量中。

您没有使用名称引用对象(只是将实例传递给方法)。如果引用该对象,则通过该引用可以在指定的scop中对该对象进一步执行操作


如果您认为不需要在指定的范围内对该对象执行任何进一步的操作,那么您可以简单地创建一个对象,而无需引用。

您没有引用具有名称的对象(只是将实例传递给方法)。如果引用该对象,则通过该引用可以在指定的scop中对该对象进一步执行操作


如果您认为不需要在指定范围内对该对象执行任何进一步的操作,那么您可以简单地创建一个没有引用的对象。

这是一个称为匿名类的功能,您并不真正关心对象的引用,但真正关心的是对象的功能/行为。您将在函数式编程中看到更多这一点


有关此功能的更多信息是

这是一个名为匿名类的功能,您并不真正关心对象的引用,但真正关心的是对象的功能/行为。您将在函数式编程中看到更多这一点

有关此功能的详细信息,请在编写时参阅

setSize(new Dimension(600,600));
实际上,在创建对象并将其传递给方法时,您正在保存
维度
对象的引用

如果您不需要将对象进一步单独用于任何计算,则建议您使用此方法

setSize(new Dimension(600,600));
实际上,在创建对象并将其传递给方法时,您正在保存
维度
对象的引用


如果您不需要进一步单独使用对象进行任何计算,则建议您使用此方法。基本上,您所做的工作相当于:

Dimension dimension = new Dimension(600,600);
setSize(dimension);
现在,即使它是完全相同的东西,
dimension
只是新对象的标识符。如果您不需要在除新对象之外的任何其他地方使用它,这只是浪费空间

setSize
方法将新对象传递给超类的一个变量
JFrame
,该变量保存您的对象,而您的类
GameFrame
将通过其超类访问该对象。在Java中,每个对象都需要至少有一个对它的引用,否则它将被视为垃圾并被删除

此外,即使为
维度
指定了名称,在执行四行代码后,变量也会超出范围并被删除


希望我能帮上忙:)

基本上你所做的等同于:

Dimension dimension = new Dimension(600,600);
setSize(dimension);
现在,即使它是完全相同的东西,
dimension
只是新对象的标识符。如果您不需要在除新对象之外的任何其他地方使用它,这只是浪费空间

setSize
方法将新对象传递给超类的一个变量
JFrame
,该变量保存您的对象,而您的类
GameFrame
将通过其超类访问该对象。在Java中,每个对象都需要至少有一个对它的引用,否则它将被视为垃圾并被删除

此外,即使为
维度
指定了名称,在执行四行代码后,变量也会超出范围并被删除


希望我能帮忙:)

对象没有名称。您考虑的是变量:-p此处不需要变量,因为您需要维护对位置和大小的引用。对象没有名称。您考虑的是变量:-p此处不需要变量,因为您需要维护对位置和大小的引用。这与匿名类无关。如果是,请您解释一下这些setSize(新维度(600600))是什么?请参阅其他投票赞成的答案。匿名类将是setSize(新维度(600600){});注意后面的{},您可以在其中重写方法等。是的,正如Tom所说,您通常使用匿名类当场创建一个类或实现一个接口,但它必须仅在该现场需要。通常使用它们的方法是ActionListeners。这与匿名类无关。如果是,请您解释一下这些setSize(新维度(600600))是什么?请参阅其他投票赞成的答案。匿名类将是setSize(新维度(600600){});注意后面的{},您可以在其中重写方法等。是的,正如Tom所说,您通常使用匿名类当场创建一个类或实现一个接口,但只需要在该类上使用它