我今天正在帮他的朋友做他的Java作业,我想我并没有意识到Android中的普通Java和Java之间存在差异。快速撰写该计划:
public class myClass{
public static void Main (String[] args){
doThis();
}
public void doThis(){
System.out.println("Did this");
}
}
但是在运行时,我得到了一个抱怨,我需要让doThis()方法保持静态。这是为什么?当我在Android中开发一些基本的东西时,我永远不必使用static关键字。
注意:这可能源于我被静态实际意味着什么所吓倒。
答案 0 :(得分:2)
为什么?
因为Main()
是静态的。
如果Main()
是实例方法,并且您在Main()
的实例(例如myClass
)上调用了new myClass
,那么doThis()
也可以是一个实例方法。或者,如果您的静态Main()
创建了myClass
的实例,则可以在该实例上调用doThis()
。
当我在Android中开发一些基本的东西时,我永远不必使用static关键字。
这是因为Android中的入口点往往是组件上的实例方法(例如onCreate()
的{{1}}。
答案 1 :(得分:1)
静态方法是不在任何Object实例上调用的方法。非静态方法属于对象,需要一个对象实例才能被调用。因此,从静态方法调用实例方法是不合法的,因为不会在任何对象上调用静态方法。
您需要实例化对象以调用实例方法:
public static void main(String[] args){
MyClass object = new MyCLass();
object.doThis();
}
public void doThis(){
System.out.println("Did this");
}
Android代码是Java代码,具有完全相同的规则。
答案 2 :(得分:0)
问题是你需要像这样重写它:
public class MyClass{ //fixed camel casing, classes start with upper case
public static void main (String[] args){ //fixed lettering
MyClass mc = new MyClass();
mc.doThis();
}
public void doThis(){
System.out.println("Did this");
}
}
这与Android和Java之间的区别没有什么特别之处,两者都会失败。问题是你试图从静态上下文引用非静态方法,这可能会导致问题,因为静态表明类需要实例化不来调用函数。
答案 3 :(得分:0)
可以在没有拥有类的实例的情况下调用静态方法,因此您可以这样做:
myClass.doThis();
由于你的doThis()方法不是静态的,你必须像这样创建一个实例对象:
myClass instance = new myClass();
instance.doThis();
调用doThis()方法的main()方法是一个静态方法,调用它时不需要myClass的实例。这意味着main方法调用的任何方法都必须是静态的,或者在实例对象上调用(参见上面的第2个例子)。