当前位置:  开发笔记 > 编程语言 > 正文

如何克服Java的Static Main()方法的局限性

如何解决《如何克服Java的StaticMain()方法的局限性》经验,为你挑选了3个好方法。

我正在努力解决这个问题.

在我的项目中,我有一个名为'Hello.java'的文件,它是带有main()参数的文件,在编译程序时会调用它.我有另一个名为MyObj.java的文件,它只是一个随机的类,我用来测试java的OO功能.我正在尝试这样做:

class Hello
{
    public MyObj an_obj;
    public static void main(String[] args)
    { 
        setObj();
    }       

    public void setObj()
    {
        this.an_obj.set_size(7);
        say("size is " + this.an_obj.get_size());
    }    
}

在MyObj.java类中,我有以下代码:

public class MyObj
{
    private int size;

    public MyObj()
    {
        //do nothing
    }

    public void set_size(int new_size)
    {
        this.size=new_size;
    }

    public int get_size()
    {
        return this.size;
    }   
}

然而,这给出了错误:

"无法从类型Hello"对静态方法setObj()进行静态引用.

如果我在setObj的声明中添加'static',即

public static void setObj()

然后我得到:

无法对非静态字段an_obj进行静态引用.

我的问题是,如果启动程序的唯一方法是使用Main方法,并且main方法只能调用静态方法,我怎样才能完成我正在做的事情,即设置和检索对象的字段?在什么,我怎么能做这个限制只能调用静态方法?????



1> Ross..:

您也可以向成员变量添加"static",或者在main方法中实例化该类.以下是两种方法的示例代码:

/* Static */
class Hello {
    public static MyObj an_obj;
    public static void main(String[] args) { 
        setObj();
    }           

    public static void setObj() {
        this.an_obj.set_size(7);
        say("size is " + this.an_obj.get_size());
    }
}

/* Non-Static */
class Hello {
    public MyObj an_obj;
    public static void main(String[] args) {
        Hello hello = new Hello(); 
        hello.setObj();
    }           

    public void setObj() {
        this.an_obj.set_size(7);
        say("size is " + this.an_obj.get_size());
    }
}

这两种方法的主要区别在于,在第一种方法中,"an_obj"是静态的 - 也就是说,整个程序只有一个变量.如果要实例化多个Hello对象,它们都将具有相同的"obj"引用.在第二个中,每个Hello对象都有自己的"obj"引用,每个引用都可以指向不同的MyObj实例.

显然,在这种简单的情况下,它不会以某种方式产生任何差异,但一般来说,应尽可能避免使用静态成员和方法.



2> Zach Langley..:

同时制作setObj()方法和an_obj变量static,或者执行以下操作:

public static void main(String[] args) {
    new Hello().setObj();
}



3> Bombe..:

除了以前的所有答案之外,我想提一下,只是因为你不理解一种语言的概念并不一定构成"限制".

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有