我正在努力解决这个问题.
在我的项目中,我有一个名为'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方法只能调用静态方法,我怎样才能完成我正在做的事情,即设置和检索对象的字段?在什么,我怎么能做这个限制只能调用静态方法?????
您也可以向成员变量添加"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实例.
显然,在这种简单的情况下,它不会以某种方式产生任何差异,但一般来说,应尽可能避免使用静态成员和方法.
同时制作setObj()
方法和an_obj
变量static
,或者执行以下操作:
public static void main(String[] args) { new Hello().setObj(); }
除了以前的所有答案之外,我想提一下,只是因为你不理解一种语言的概念并不一定构成"限制".