Fix: Metode Non Statis Tidak Dapat Dirujuk dari Konteks Statis

Banyak programmer menghadapi pesan kesalahan 'Metode non-statis tidak dapat dirujuk dari konteks statis'Saat mereka membuat kode. Pesan kesalahan ini tidak spesifik dan dapat terjadi di IDE mana pun jika kondisi kesalahannya benar.

Ini adalah kesalahan yang sangat umum untuk pemula di mana pemrogram mencoba menggunakan kelas 'secara statis' tanpa membuat instance kelas. Ada beberapa syarat yang harus dipenuhi ketika Anda menggunakan kelas yang statis. Pada artikel ini, kami akan membahas beberapa kasus berbeda dan memandu Anda tentang cara menggunakan kelas statis.

Apa itu Metode Statis?

Menambahkan kata kunci 'statis' ke metode apa pun membuat metode ini dikenal sebagai metode statis. Metode statis milik kelas daripada milik objek (yang merupakan norma). Metode statis dapat dengan mudah dipanggil tanpa syarat membuat instance kelas.

Ada beberapa penggunaan metode Statis yang berbeda misalnya, dengan menggunakannya, Anda dapat mengubah anggota data statis dan nilainya. Namun, masih ada beberapa batasan saat menggunakan metode Statis. Misalnya, jika Anda ingin mengakses bidang non-statis kelas Anda, Anda harus menggunakan metode non-statis. Jadi untuk menyimpulkan, metode Statis digunakan sangat jarang tetapi mereka memiliki manfaatnya.

Berikut adalah contoh singkat tentang bagaimana metode statis dapat dibuat untuk mengubah properti semua objek.

siswa kelas {int roll_no; Nama string; static String college = "InformationTech"; static void change () {college = “Management";} Mahasiswa (nomor int, String name_self) {roll_no = number; name = name_self;} void display () {System.out.println (rollno + "" + name + "" + perguruan tinggi);} public static void main(String args[]){ Siswa.change(); Siswa stu_1 = Siswa baru (100,"Meksiko"); Siswa stu_2 = Siswa baru (202,"Amerika"); Siswa stu_3 = Siswa baru (309, "Inggris"); stu_1.display (); stu_2.display (); stu_3.display ();}}

Output dari program ini adalah:

100 Manajemen Meksiko 202 Manajemen Amerika 309 Manajemen Inggris

Apa perbedaan antara kelas dan instance kelas?

Pikirkan Anda sedang berjalan di jalan dan Anda melihat sebuah mobil. Sekarang Anda langsung tahu bahwa ini adalah mobil meskipun Anda tidak tahu apa model atau tipenya. Ini karena Anda tahu bahwa ini termasuk dalam kelas 'mobil' yang sudah Anda ketahui. Pikirkan kelas di sini sebagai templat atau ide.

Sekarang saat Anda mendekat, Anda akan melihat model dan merek mobil tersebut. Di sini Anda mengenali 'kejadian' dari kelas 'mobil'. Di sini semua properti akan ditampilkan secara detail; roda, tenaga kuda, pelek, dll.

Contoh properti dapat berupa kelas 'mobil' menyatakan bahwa semua mobil harus memiliki roda. Mobil yang Anda lihat (contoh dari kelas mobil) memiliki pelek alloy.

Dalam pemrograman berorientasi objek, Anda menentukan kelas sendiri dan di dalam kelas, Anda menentukan bidang jenis 'warna'. Setiap kali kelas dibuat, memori secara otomatis dicadangkan untuk warna di backend dan nanti, Anda dapat memberikan nilai tertentu (misalnya merah). Karena atribut seperti ini spesifik, maka atribut tersebut tidak statis.

Sebaliknya, metode dan bidang statis dibagikan dengan semua instance. Ini dibuat untuk nilai atau item yang khusus untuk kelas tersebut dan bukan untuk instance itu sendiri. Untuk metode, mungkin terdapat metode global (misalnya, konverter stringtoInt) dan untuk bidang, biasanya berupa konstanta sesuai dengan kode Anda (misalnya, jenis mobil bisa statis jika Anda hanya membuat mobil biasa).

Sekarang, kita akan melihat semua kasus berbeda di mana pengkodean Anda bisa salah dan melihat solusi untuk memperbaikinya.

Masalah 1: Anda memanggil sesuatu yang tidak ada

Kami menemukan beberapa kasus di mana pengguna menggunakan metode statis dan non-statis satu sama lain. Ketika kami melakukan ini, Anda harus berhati-hati dengan metode apa yang memanggil apa (dalam istilah statis atau tidak). Perhatikan kode berikut ini:

java.util.List pribadi someMethod(){ /* Beberapa Kode */ mengembalikan someList; } public static void main (String [] strArgs) {// Pernyataan berikut menyebabkan kesalahan. Anda tahu mengapa .. java.util.List someList = someMethod (); }

Di sini, metode statis memanggil someMethod. Dalam pemrograman berorientasi objek, kami merangkum data bersama dengan data yang ingin kami operasikan. Di sini, tanpa objek, tidak ada data instance dan sementara metode instance ada sebagai bagian dari definisi kelas, harus selalu ada instance objek untuk memberikan data kepada mereka.

Singkatnya, Anda tidak bisa menyebut sesuatu yang tidak ada. Karena Anda mungkin belum membuat objek, metode non-statis belum ada. Namun, di sisi lain, metode statis akan selalu ada (karena definisi).

Masalah 2: Metode tidak dibuat Statis

Jika Anda menggunakan metode dari metode utama Statis Anda tanpa membuat turunan dari metode tersebut, Anda akan mendapatkan pesan kesalahan. Di sini, prinsip yang sama berlaku; Anda tidak dapat mengakses sesuatu yang tidak ada.

public class BookStoreApp2 { //konstanta untuk opsi Input pemindai = Pemindai baru (System.in); public static void main(String[] args) { Item BookStoreItem[];//mendeklarasikan item array = new BookStoreItem[10];//menginisialisasi array int itemType = -1; printMenu (); getUserChoice(); for (int i = 0; i 

Di sini, di kode ini, Anda perlu mengonversi kedua metode cetakMenu() dan getUserChoice () menjadi metode statis.

Karenanya jika Anda ingin menyiasati situasi seperti ini, Anda dapat menggunakan file konstruktor sebagai gantinya. Misalnya, Anda bisa mengambil konten metode main () Anda dan menempatkannya di dalam konstruktor.

public BookStoreApp2 () {// Letakkan konten metode utama di sini} Setelah melakukan ini, lakukan hal berikut di dalam metode main () Anda: public void main (String [] args) {new BookStoreApp2 (); }

Jika tips ini tidak berfungsi pada Anda atau kode Anda berbeda, Anda harus mengingat prinsip dasar class dan metode Statis dan memeriksa ulang kode Anda untuk memastikan bahwa prinsip dasar tidak dilanggar.

Facebook Twitter Google Plus Pinterest