从android中的静态方法调用非静态方法

时间:2013-11-20 07:08:11

标签: java android static

我试图从静态方法调用非静态方法但没有任何结果,我的应用程序崩溃 我的代码:

public class MainActivity extends Activity  {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        setAuth();
        ///

        ///



    }
    public static void setAuth() {

                new MainActivity().d();
        }
    public void d()
    {

        Toast.makeText(getApplicationContext(), "fff",Toast.LENGTH_SHORT).show();
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }



    }

是否可以从android中的静态方法调用非静态方法? 以及如何???

3 个答案:

答案 0 :(得分:2)

必须能够在不引用类的实例化的情况下执行类中的静态方法:

class MyClass {
    int information;
    static int usefulNumber = 72;

    int method() {
        return information;
    }

    static int methodStatic() {
        // Cannot refer to information
        // But can refer to usefulNumber
    }
}

因此,根据定义,它不能在类中执行非静态方法,因为该方法不存在,除非像@RhinoFeeder所说的那样,实例化了类并且将该实例化传递给了静态类:

    static int methodStatic2(MyClass myClass) {
        return myClass.method();
    }

答案 1 :(得分:0)

执行此操作的唯一方法是,您可以访问包含非静态方法的类的实例。

编辑:我意识到这个答案听起来很空洞而没有进一步的解释,因为你做了一个新的MainActivity

new MainActivity().d();

无法在Android中运行,因为您无法以这种方式创建新的活动。

答案 2 :(得分:0)

public static void setAuth(MainActivity activity) {
       activity.d();
}

那很简单。

new MainActivity().d();调用另一个活动实例的方法。