理解静态修饰符的问题

时间:2011-09-11 20:04:28

标签: java variables methods static

我很难理解“静态”方法和“静态”变量是什么,这导致我的代码出现问题。这是我遇到困难的代码:

    public class Document{
      public void NewBlank(){
           Resources.openRawResource(R.raw.blank);
           }
       }

为什么我会收到错误“无法从类型资源”中对非静态方法Resource.openRawResource(int)进行静态引用?为什么我不能引用非静态方法?

2 个答案:

答案 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

(请查看上面的示例,只是为了理解静态变量的概念。您将收到警告“以非静态方式访问静态字段”,因为这不是访问这些静态字段的正确方法变量)