我创建了一个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);
}
}
答案 0 :(得分:3)
variable
或identifier
只是指向对象在内存中占用的空间。在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