Java 访问;“实例”;没有实例?
因此,我正在考虑创建一个Java 访问;“实例”;没有实例?,java,Java,因此,我正在考虑创建一个JFrame,而不创建它的实例 我通常是这样做的: package framecanvasagain; public class Framecanvasagain { public MyFrame theframe; public static void main(String[] args) { //creates the frame normally theframe = new MyFrame();
JFrame
,而不创建它的实例
我通常是这样做的:
package framecanvasagain;
public class Framecanvasagain {
public MyFrame theframe;
public static void main(String[] args) {
//creates the frame normally
theframe = new MyFrame();
//now let's say I want to access the frame again later on
theframe.setLocationRelativeTo(null);
}
}
我可以创建一个JFrame
,而无需创建它的实例,但是有没有办法在以后访问该JFrame
package framecanvasagain;
public class Framecanvasagain {
public static void main(String[] args) {
new MyFrame(); //Netbeans says "New Instance Ignored" but it still loads a JFrame
//now let's say I want to access the frame again later on
MyFrame().setLocationRelativeTo(null); //this returns an error, "cannot find symbol"
}
}
简单的答案是否定的。您需要将其设置为变量,以便再次访问其属性
new MyFrame();
创建JFrame的实例,但Java垃圾收集器会立即将其拾取,因为它没有设置为任何值
您可以这样做:
(new MyFrame()).setLocationRelativeTo(null);
但是,您仍将创建它的实例,并且无法再次访问它的属性。如果不创建对象并将其存储在Java中,就无法重用对象。面向对象编程语言的危险
把它变成单身可能是另一种选择
尽管如此,我不认为你在这里真正想做的是这样。你的问题标题不正确: 你真正想问的是: 我可以访问一个实例而不引用它吗 答案是:不,你不能 在示例代码中,您确实创建了
JFrame
的一个实例,但是您立即放弃了对它的引用,因此您无法处理该特定实例
此外,它可能随时被垃圾收集(除非库的某些内部部分也包含对它的引用,我不是AWT内部的专家),因此您的框架可能会随机消失
但真正的问题是:你想在这里实现什么?你可以通过添加一个单词来实现你的要求……
static
。只需将您的myFrame
设置为变量static
。这是您的第一个示例,稍作修改。我将“do later”调用移到另一个方法中,只是为了强调可以从任何地方访问您的MyFrame
:
package framecanvasagain;
public class Framecanvasagain {
public static MyFrame theframe;
public void someOtherMethod() {
//now let's say I want to access the frame again later on
Framecanvasagain.theframe.setLocationRelativeTo(null);
}
public static void main(String[] args) {
//creates the frame normally
theframe = new MyFrame();
....
}
}
我可以创建一个JFrame而不创建它的实例-。@GiorgiTsiklauri是的,你是对的<代码>新建MyFrame()确实创建了一个JFrame实例,但它没有“名称”。那么,以后是否可以再次访问这个无名的JFrame?@Noob欢迎使用Stack Overflow。请学习如何使用堆栈溢出,并阅读如何提高问题的质量。然后检查,看看你可以问什么问题。请在您的问题中包含您正在尝试做的更详细的描述。不清楚你在问什么或者你在尝试什么。将引用以正常方式保存在变量中有什么问题?你想在哪里访问它?你把“实例”和“变量”混淆了吗?@khelwood是的,我把实例和变量混淆了。谢谢。我只是想“如果我只使用一个JFrame,为什么我必须为JFrame创建一个变量?”抱歉这个愚蠢的问题。是的,我知道你的意思!某些语言对这样的东西比较宽容,但对于Java,如果您没有对某个东西的引用,它可以随时删除。没有问题是愚蠢的!我们都在那里。您仍然创建
frame
变量。所以,这不是我想象的。我想既然我只有一个JFrame,也许我可以访问它而不需要为它创建变量。我想我用我原来的问题把每个人都弄糊涂了。但我已经对第一个答案感到满意了。所以,这根线死了也没关系。更新它可能会不必要地再次碰撞它。好的。我突然意识到,如果你对单例有兴趣,你可能也想看看这个,这是一个更简单的版本。如果静态是单例的一个更简单的版本,那么我可能会同意。因为我已经熟悉静电。