Проблемы с пониманием статического модификатора - PullRequest
1 голос
/ 12 сентября 2011

Мне трудно понять, что такое "статический" метод и "статическая" переменная, и это вызывает у меня проблемы с моим кодом.Вот код, с которым я сталкиваюсь с трудностями:

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

Почему я получаю ошибку «Невозможно сделать статическую ссылку на нестатический метод Resource.openRawResource (int) из типа Resources»?Почему я не могу сослаться на нестатический метод?

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

openRawResources не является статическим методом, его нужно вызывать в объекте, а не в типе. Чтобы получить экземпляр ресурсов, вы можете вызвать getResources в действии. Тогда результирующий код будет

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

Статический метод / переменная - это метод, который относится к типу класса, а не к экземплярам / объектам такого типа.

1 голос
/ 12 сентября 2011

Невозможно сделать статическую ссылку на нестатический метод

Это означает, что для вызова того метода, который вы пытаетесь сделать, вам нужна ссылка на экземпляр этого класса. Вот пример, иллюстрирующий разницу:

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

(Пожалуйста, посмотрите на пример выше, чтобы понять, что такое статическая переменная. Вы получите предупреждение «получить доступ к статическому полю нестатическим способом», потому что это неправильный способ доступа к этим переменные)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...