为什么在参数内创建一个对象而不指定对象可能?

时间:2012-09-07 04:39:30

标签: java object constructor arguments

我创建了一个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);
        }

    }

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

写作时

setSize(new Dimension(600,600));

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

如果您不需要将对象进一步用于任何计算,这种方法很有效并且建议使用。

答案 3 :(得分:1)

基本上你做的相当于:

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

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

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

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

希望我帮助过:)

答案 4 :(得分:0)

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

有关此功能的更多信息,请here