Исправлено: Нестатический метод не может быть связан со статическим контекстом —

Многие программисты сталкиваются с сообщением об ошибке ‘Нестатический метод не может быть указан из статического контекстаКогда они кодируют Это сообщение об ошибке не является специфическим и может появляться в любой среде IDE, если условия для ошибки выполняются.

Нестатический метод не может ссылаться на статический контекст

Это очень распространенная ошибка для начинающих, когда программист пытается использовать класс «статически», не создавая экземпляр класса. Есть несколько условий, которые должны соблюдаться при использовании статического класса. В этой статье мы рассмотрим несколько различных случаев и научим вас, как использовать статический класс.

Что такое статический метод?

Добавление ключевого слова «static» к любому методу делает метод известным как статический метод. Статический метод принадлежит классу, а не объекту (что является нормой). Статический метод может быть легко вызван без условия создания экземпляра класса.

Есть несколько различных применений статических методов, например, используя его, вы можете изменить статический элемент данных и его значение. Однако при использовании статического метода все еще существуют некоторые ограничения. Например, если вы хотите получить доступ к нестатическим полям вашего класса, вы должны использовать нестатический метод. Таким образом, чтобы подвести итог, статические методы используются очень осторожно, но они имеют свои преимущества.

Вот краткий пример того, как можно сделать статический метод для изменения свойства всех объектов.

Студенты класса {
int roll_no;
Имя строки;
static String College = "InformationTech";
статическое изменение пустоты () {
колледж = «Менеджмент»;}
Студенты (int номер, String name_self) {
roll_no = число;
name = name_self; }
void display () {System.out.println (rollno + "" + name + "" + College);}
public static void main (String args []) {
Students.change ();
Студенты stu_1 = новые студенты (100, «мексиканец»);
Студенты stu_2 = новые студенты (202, «американец»);
Студенты stu_3 = новые студенты (309, «британцы»);
stu_1.display ();
stu_2.display ();
stu_3.display ();
}}

Выход программы будет:

100 Мексиканский менеджмент 202 Американский менеджмент 309 Британский менеджмент

В чем разница между классом и экземпляром класса?

Думаю, вы идете по улице и видите машину. Теперь вы сразу знаете, что это автомобиль, даже если вы не знаете, какая у него модель или тип. Это потому, что вы знаете, что это относится к классу «автомобилей», о котором вы уже знаете. Думайте о классе здесь как о шаблоне или идее.

Теперь, когда вы приближаетесь, вы видите модель и марку автомобиля. Здесь вы узнаете «экземпляр» класса «автомобиль». Здесь все свойства будут представлены в деталях; колеса, мощность, обода и т. д.

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

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

Напротив, статические методы и поля являются общими для всех экземпляров. Они сделаны для значения или элементов, которые являются специфическими для класса, а не для самого экземпляра. Для методов могут быть глобальные методы (например, преобразователь stringtoInt), а для полей они обычно являются константами в соответствии с вашим кодом (например, тип машины может быть статическим, если вы производите только нормальные машины).

Теперь мы рассмотрим все различные случаи, когда ваше кодирование может пойти не так, и посмотрим, как их исправить.

Проблема 1: Вы называете что-то, что не существует

Мы сталкивались с некоторыми случаями, когда пользователи использовали как статические, так и нестатические методы друг с другом. Когда мы делаем это, вы должны быть осторожны с тем, какой метод вызывает какой (с точки зрения статичности или нет). Посмотрите на следующий код:

private java.util.List someMethod () {
/ * Какой-то код * /
вернуть someList; }
public static void main (String [] strArgs) {
// Следующий оператор вызывает ошибку. Ты знаешь почему..
java.util.List someList = someMethod (); }

Здесь статический метод вызывает someMethod. В объектно-ориентированном программировании мы инкапсулируем данные вместе с данными, с которыми мы хотим работать. Здесь, без объекта, нет данных экземпляра, и, хотя методы экземпляра существуют как часть определения класса, всегда должен быть экземпляр объекта для предоставления им данных.

Подводя итог, вы не можете назвать то, чего не существует. Поскольку вы, возможно, не создали объект, нестатический метод еще не существует. Однако, с другой стороны, статический метод всегда будет существовать (из-за определения).

Проблема 2: Методы не сделаны статическими

Если вы вызываете методы из основного метода Static без создания экземпляра методов, вы получите сообщение об ошибке. Здесь применяется тот же принцип; Вы не можете получить доступ к тому, чего не существует.

открытый класс BookStoreApp2 {
// константы для опций
Вход сканера = новый сканер (System.in);
public static void main (String [] args) {
BookStoreItem [] item; // объявление массива
item = new BookStoreItem [10]; // инициализирующий массив
int itemType = -1;
printMenu ();
getUserChoice ();
для (int i = 0; i < item.length; i++){
}//end of switch statement
}//end of for loop
for (int i = 0; i < item.length; i++) {
}//end of for
}//end of main method

Здесь, в этом коде, вам нужно преобразовать оба метода printMenu () а также getUserChoice () в статические методы.

Следовательно, если вы хотите обойти такую ​​ситуацию, вы можете использовать конструктор вместо. Например, вы можете взять содержимое вашего метода main () и поместить его в конструктор.

public BookStoreApp2 ()
{
// Поместить содержимое метода main здесь}
После этого сделайте следующее внутри вашего метода main ():
public void main (строка [] args)
{
новый BookStoreApp2 (); }

Если эти советы не работают с вашим или вашим кодом по-разному, вы должны помнить об основных принципах статических классов и методов и перепроверить ваш код, чтобы убедиться, что основной принцип не нарушается.

Ссылка на основную публикацию
Adblock
detector