Perbaiki: Metode Non Statis Tidak Dapat Dirujuk dari Konteks Statis

Banyak programmer menghadapi pesan kesalahan ' Metode non statis tidak dapat dirujuk dari konteks statis ' ketika mereka sedang mengkode. Pesan kesalahan ini tidak spesifik dan dapat terjadi di IDE apa pun jika kondisi untuk kesalahan itu benar.

Metode Non Statis Tidak Dapat Dirujuk dari Konteks Statis

Ini adalah kesalahan yang sangat umum bagi pemula di mana programmer mencoba menggunakan kelas 'statis' tanpa membuat turunan dari kelas. Ada beberapa kondisi 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 kegunaan yang berbeda dari metode Statis misalnya, menggunakannya, Anda dapat mengubah anggota data statis dan nilainya. Namun, masih ada beberapa batasan saat menggunakan metode Static. Misalnya, jika Anda ingin mengakses bidang non-statis kelas Anda, Anda harus menggunakan metode non-statis. Singkatnya, metode statis digunakan sangat jarang tetapi mereka memiliki manfaatnya.

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

 kelas Siswa {int roll_no; Nama string; static String college = "InformationTech"; static void change () {college = "Management";} Siswa (int number, String name_self) {roll_no = number; name = name_self;} tampilan batal () {System.out.println (rollno + "" + name + "" + + perguruan tinggi);} public static void main (String args []) {Students.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 contoh kelas?

Berpikir Anda berjalan di jalan dan melihat mobil. Sekarang Anda segera tahu bahwa ini adalah mobil bahkan jika Anda tidak tahu apa model atau jenisnya. Ini karena Anda tahu bahwa ini milik kelas 'mobil' yang sudah Anda ketahui. Pikirkan kelas di sini sebagai templat atau ide.

Sekarang ketika Anda bergerak lebih dekat, Anda melihat model dan pembuatan mobil. Di sini Anda mengenali 'contoh' dari kelas 'mobil'. Di sini semua properti akan hadir secara rinci; roda, tenaga kuda, rims dll.

Contoh properti dapat berupa kelas 'mobil' yang menyatakan bahwa semua mobil harus memiliki roda. Mobil yang Anda lihat (turunan 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 dipakai, memori secara otomatis dicadangkan untuk warna di backend dan nanti, Anda bisa memberikan ini nilai tertentu (misalnya merah). Karena atribut seperti ini spesifik, mereka tidak statis.

Sebaliknya, metode dan bidang statis dibagikan dengan semua instance. Ini dibuat untuk nilai atau item yang khusus untuk kelas dan bukan instance itu sendiri. Untuk metode, mungkin ada metode global (misalnya, konverter stringtoInt) dan untuk bidang, mereka biasanya konstanta sesuai dengan kode Anda (misalnya, tipe mobil bisa statis jika Anda hanya memproduksi 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 hal statis atau tidak). Lihatlah kode berikut:

 private java.util.List someMethod () {/ * Some Code * / return 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 menyediakan data kepada mereka.

Jadi singkatnya, Anda tidak dapat 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 memohon metode dari metode utama Statis Anda tanpa membuat instance metode, Anda akan mendapatkan pesan kesalahan. Di sini, prinsip yang sama berlaku; Anda tidak dapat mengakses sesuatu yang tidak ada.

 BookStoreApp2 kelas publik {// konstanta untuk opsi Input pemindai = Pemindai baru (System.in); public static void main (String [] args) {item BookStoreItem []; // mendeklarasikan item array = BookStoreItem baru [10]; // menginisialisasi array int itemType = -1; printMenu (); getUserChoice (); for (int i = 0; i <item.length; i ++) {} // akhir dari pernyataan pergantian} // akhir untuk loop untuk (int i = 0; i <item.length; i ++) {} // end dari untuk} // akhir metode utama 

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

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

 BookStoreApp2 publik () {// Masukkan 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-prinsip dasar kelas dan metode Statis dan periksa kembali kode Anda untuk memastikan bahwa prinsip dasar tidak dilanggar.

Artikel Menarik