Поправка: Нестатичният метод не може да бъде отнесен от статичен контекст

Много програмисти са изправени пред съобщението за грешка „ Нестатичният метод не може да бъде отнесен от статичен контекст “, когато те кодират. Това съобщение за грешка не е конкретно и може да се появи във всеки IDE, ако условията за грешката са верни.

Нестатичният метод не може да бъде отнесен от статичен контекст

Това е много често срещана грешка за начинаещи, когато програмистът се опитва да използва клас "статично", без да прави инстанция на класа. Има няколко условия, които трябва да бъдат изпълнени, когато използвате клас, който е статичен. В тази статия ще разгледаме няколко различни случая и ще ви насочим как да използвате статичен клас.

Какво е статичен метод?

Добавянето на ключовата дума "статичен" към всеки метод прави метода известен като статичен метод. Статичният метод принадлежи на класа, а не на обект (което е норма). Статичният метод може лесно да бъде извикан без условието за създаване на екземпляр от клас.

Има няколко различни приложения на статичните методи, например, с него можете да промените статичен член на данните и неговата стойност. Въпреки това, все още има някои ограничения при използване на статичен метод. Например, ако искате да получите достъп до нестатични полета на вашия клас, трябва да използвате нестатичен метод. За да обобщим, Статичните методи се използват много бавно, но те имат своите ползи.

Ето кратък пример за това как може да се направи статичен метод за промяна на свойството на всички обекти.

 ученици от клас {int roll_no; Име на струна; static String college = "InformationTech"; static void change () {college = “Management”;} Студенти (int номер, String name_self) {roll_no = число; име = name_self;} void display () {System.out.println (rollno + "" + име + "" + колеж);} обществена статична 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 () {/ * Some Code * / върнете someList; } public static void main (String [] strArgs) {// Следното изречение причинява грешката. Знаеш защо .. java.util.List someList = someMethod (); } 

Тук статичният метод извиква someMethod. В обектно-ориентираното програмиране ние капсулираме данните заедно с данните, върху които искаме да работим. Тук без обект няма данни за инстанции и докато методите на инстанцията съществуват като част от дефиницията на класа, винаги трябва да има обект на обект, който да им предоставя данни.

За да обобщим, не можете да извикате нещо, което не съществува. Тъй като може да не сте създали обект, нестатичният метод все още не съществува. От друга страна, статичен метод винаги ще съществува (поради дефиницията).

Въпрос 2: Методите не са статични

Ако извиквате методи от основния си метод Static, без да създавате екземпляр от методите, ще получите съобщение за грешка. Тук важи същия принцип; не можете да получите достъп до нещо, което не съществува.

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

Тук, в този код, трябва да конвертирате както методите printMenu (), така и getUserChoice () в статични методи.

Следователно, ако искате да заобиколите подобна ситуация, вместо това можете да използвате конструктор . Например, можете да вземете съдържанието на основния си () метод и да ги поставите в конструктор.

 public BookStoreApp2 () {// Поставете съдържанието на основния метод тук} След като направите това, направете следното във вашия main () метод: public void main (String [] args) {new BookStoreApp2 (); } 

Ако тези съвети не работят на вашия или кодът ви е различен, трябва да имате предвид основните принципи на статичните класове и методи и да проверите отново кода, за да сте сигурни, че основният принцип не е нарушен.

Интересни Статии