Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 访问;“实例”;没有实例?_Java - Fatal编程技术网

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,也许我可以访问它而不需要为它创建变量。我想我用我原来的问题把每个人都弄糊涂了。但我已经对第一个答案感到满意了。所以,这根线死了也没关系。更新它可能会不必要地再次碰撞它。好的。我突然意识到,如果你对单例有兴趣,你可能也想看看这个,这是一个更简单的版本。如果静态是单例的一个更简单的版本,那么我可能会同意。因为我已经熟悉静电。