我很难理解“静态”方法和“静态”变量是什么,这导致我的代码出现问题。这是我遇到困难的代码:
public class Document{
public void NewBlank(){
Resources.openRawResource(R.raw.blank);
}
}
为什么我会收到错误“无法从类型资源”中对非静态方法Resource.openRawResource(int)进行静态引用?为什么我不能引用非静态方法?
答案 0 :(得分:3)
openRawResources不是静态方法,需要在对象中调用,而不是在类型中调用。为了获得Resources的实例,您可以在活动中调用getResources。然后生成的代码将是
Resources resources = myactivity.getResources();
resources.openRawResource(R.raw.blank);
静态方法/变量属于类类型,而不属于此类型的实例/对象。
答案 1 :(得分:1)
无法对非静态方法进行静态引用
这意味着要调用您正在尝试的方法,您需要引用该类的实例。 这是一个说明差异的例子:
public class Foo{
public static int staticVariable = 5;
public static void methodStatic(){}
public void nonStaticMethod(){}
}
以下是如何使用它们:
Foo.nonStaticMethod(); //can call static method referring to the class itself without having an instance
Foo f = new Foo();
f.nonStaticMethod(); //you need an instance of a Foo class in order to call a non-static method
对于静态变量而言,这些变量不属于类的单个实例,而是在同一个类的所有不同实例之间共享:
Foo a = new Foo();
Foo b = new Foo();
System.out.println(a.staticVariable); //print 5
System.out.println(b.staticVariable); //print 5
a.staticVariable = 10;
System.out.println(b.staticVariable); //print 10
(请查看上面的示例,只是为了理解静态变量的概念。您将收到警告“以非静态方式访问静态字段”,因为这不是访问这些静态字段的正确方法变量)