我试图从静态方法调用非静态方法但没有任何结果,我的应用程序崩溃 我的代码:
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中的静态方法调用非静态方法? 以及如何???
答案 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();
调用另一个活动实例的方法。