0

我创建了一个 Dimension 和一个 Point 对象,但我不需要命名这两个对象并在方法调用的参数中调用其构造函数。我可以解释为什么这是可能的吗?我已经太习惯于给我的对象命名,我需要对我的问题进行解释。

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

    }
4

5 回答 5

3

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

于 2012-09-07T04:44:03.003 回答
1

基本上你所做的相当于:

Dimension dimension = new Dimension(600,600);
setSize(dimension);

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

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

此外,即使您为 命名dimension,在执行四行代码后,该变量也会超出范围并被删除。

希望我有所帮助:)

于 2012-09-07T06:02:22.840 回答
1

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

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

于 2012-09-07T04:44:56.497 回答
1

当你写

setSize(new Dimension(600,600));

您实际上是在Dimension创建对象并将其传递给方法时保存对象的引用。

如果您不需要进一步单独使用该对象进行任何计算,则此方法效果很好,建议您使用。

于 2012-09-07T04:53:13.593 回答
0

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

有关此功能的更多信息在这里

于 2012-09-07T04:48:28.397 回答