2011-09-11 3 views
1

J'ai de la difficulté à comprendre ce qu'est une méthode "statique" et une variable "statique" et cela me cause des problèmes avec mon code. Voici le code J'éprouve des difficultés avec:Problèmes de compréhension du modificateur statique

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

Pourquoi ai-je l'erreur « Impossible de faire une référence statique à la méthode non statique Resource.openRawResource (int) à partir des ressources de type »? Pourquoi ne puis-je pas référencer une méthode non statique?

Répondre

3

openRawResources n'est pas une méthode statique, elle doit être invoquée dans un objet, pas un type. Pour obtenir une instance de ressources, vous pouvez appeler getResources dans une activité. Ensuite, le code résultant serait

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

Méthode/variable statique est celle qui appartient au type de classe, et non aux instances/objets de ce type.

+0

OK, donc je peux utiliser le code ci-dessus si le code est dedans, disons, et activité? Mais mon code ne l'est pas. Y a-t-il un moyen d'accéder à la ressource brute simplement à partir d'une classe normale? Merci! –

+0

Si vous faites référence à mon code, alors oui. Et je ne pense pas, il pourrait y avoir mais pour autant que je sache, il n'y a aucun moyen d'accéder aux ressources sans un objet contextuel. Mais vous pouvez obtenir les ressources lors de la création de votre classe Document et le transmettre. –

+0

Super, je vais essayer ça! –

1

Impossible de faire une référence statique à la méthode non statique

Cela signifie que pour invoquer cette méthode que vous essayez de, vous avez besoin d'une référence à une instance de cette classe. Voici un exemple illustrant la différence:

public class Foo{ 
    public static int staticVariable = 5; 
    public static void methodStatic(){} 
    public void nonStaticMethod(){} 
} 

est ici comment vous pouvez les utiliser:

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 

Pour ce qui concernent les variables statiques, ce sont des variables qui ne font pas partie d'une seule instance d'une classe , mais sont partagés entre toutes les différentes instances de la même classe:

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 

(S'il vous plaît, regardez l'exemple ci-dessus juste pour comprendre le concept de ce une variable statique est. Vous obtiendrez l'avertissement "accéder à un champ statique d'une manière non statique" car ce n'est pas un moyen correct d'accéder à ces variables)

+0

Fantastique! Cela a réglé la confusion. Désolé, je vais attribuer la réponse à K-ballo car il a réglé mon problème spécifiquement, mais votre conseil m'a énormément aidé aussi. Merci! –

Questions connexes