2011-09-11 9 views
1

「静的」メソッドと「静的」変数が何であるかを理解するのが難しく、コードに問題があります。私は「非静的メソッドResource.openRawResourceタイプのリソースからの(int型)をstatic参照できません」エラーが出るのはなぜ静的修飾子を理解する上での問題

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

:ここで私はとの難しさをコード持っていますか?非静的メソッドを参照できないのはなぜですか?

答えて

3

openRawResourcesは静的メソッドではなく、オブジェクト内で呼び出す必要があります。タイプ。リソースのインスタンスを取得するには、アクティビティ内でgetResourcesを呼び出すことができます。次いで、得られたコードは、静的メソッド/変数は、クラスタイプにはなく、そのようなタイプのインスタンス/オブジェクトに属するものである

Resources resources = myactivity.getResources(); 
resources.openRawResource(R.raw.blank); 

あろう。

+0

コードが上記のような意味で使用されていれば、上記のコードを使用できますか?しかし、私のコードはそうではありません。単純なクラスから生のリソースにアクセスする方法はありますか?ありがとう! –

+0

あなたが私のコードを参照しているなら、はい。そして私はそうは思わない、私が知る限り、コンテキストオブジェクトなしでリソースにアクセスする方法はない。しかし、Documentクラスを作成するときにリソースを取得し、それを渡すことができます。 –

+0

偉大な私はそれを試みる! –

1

は非静的メソッド

これは、あなたがしようとしているメソッドを呼び出すために、あなたはそのクラスのインスタンスへの参照が必要であることを意味をstatic参照できません。 ここでの違いを示す例です:

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 

(上記の例を見てください。静的変数はです。これらの変数にアクセスする適切な方法ではないため、「非静的な方法で静的フィールドにアクセスする」という警告が表示されます。

+0

素晴らしい!それは混乱を分類した。申し訳ありませんが、私はK-balloの回答を賞賛します。私の問題を具体的に分類していますが、あなたの助言は私を大いに助けてくれました。ありがとう! –

関連する問題