Android vs Java在创建方法时给我带来了一些困惑

时间:2012-12-17 21:39:00

标签: java android

我今天正在帮他的朋友做他的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关键字。

注意:这可能源于我被静态实际意味着什么所吓倒。

4 个答案:

答案 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代码,具有完全相同的规则。

阅读Java tutorial about instance and static members

答案 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个例子)。