Perbedaan antara metode Statis dan metode Instance

89

Saya baru saja membaca teks yang diberikan kepada saya di buku teks saya dan saya tidak begitu yakin saya mengerti apa yang dikatakannya. Ini pada dasarnya memberi tahu saya bahwa metode statis atau metode kelas menyertakan kata kunci "pengubah" statis. Tapi saya tidak tahu apa artinya itu?

Bisakah seseorang menjelaskan kepada saya dengan istilah yang sangat sederhana apa itu Metode Statis atau Kelas?

Selain itu, dapatkah saya mendapatkan penjelasan sederhana tentang apa itu metode Instance?

Inilah yang mereka berikan kepada saya di buku teks:

Ada implikasi praktis yang penting dari ada atau tidaknya pengubah statis. Metode kelas publik dapat dipanggil dan dijalankan segera setelah Java memproses definisi kelas tempat ia berada. Ini bukan kasus untuk metode contoh. Sebelum metode instance publik dapat dipanggil dan dijalankan, sebuah instance harus dibuat dari kelas tempatnya berada. Untuk menggunakan metode kelas publik, Anda hanya memerlukan kelas tersebut. Di sisi lain, sebelum Anda dapat menggunakan metode instance publik, Anda harus memiliki instance kelas.

Cara di mana metode statis dipanggil dalam definisi metode lain bervariasi sesuai dengan apakah kedua metode tersebut termasuk dalam kelas yang sama atau tidak. Dalam contoh di atas, faktorial dan utama adalah metode kelas MainClass. Akibatnya, pemanggilan faktorial dalam definisi main hanya merujuk nama metode, "faktorial".

Panthy
sumber

Jawaban:

166

Paradigma dasar di Java adalah Anda menulis kelas, dan kelas tersebut dibuat. Objek instantiated (turunan kelas) memiliki atribut yang terkait dengannya (variabel anggota) yang mempengaruhi perilakunya; ketika instance menjalankan metodenya, itu akan merujuk ke variabel-variabel ini.

Namun, semua objek dari tipe tertentu mungkin memiliki perilaku yang tidak bergantung sama sekali pada variabel anggota; metode ini paling baik dibuat statis. Dengan menjadi statis, tidak ada instance kelas yang diperlukan untuk menjalankan metode ini.

Anda dapat melakukan ini untuk menjalankan metode statis:

MyClass.staticMethod();  // Simply refers to the class's static code

Tetapi untuk menjalankan metode non-statis, Anda harus melakukan ini:

MyClass obj = new MyClass();//Create an instance
obj.nonstaticMethod();  // Refer to the instance's class's code

Pada level yang lebih dalam, compiler, ketika menempatkan sebuah kelas bersama, mengumpulkan pointer ke metode dan melampirkannya ke kelas. Ketika metode tersebut dieksekusi, ia mengikuti petunjuk dan mengeksekusi kode di ujung. Jika sebuah kelas dibuat, objek yang dibuat berisi penunjuk ke "tabel metode virtual", yang menunjuk ke metode yang akan dipanggil untuk kelas tertentu dalam hierarki pewarisan. Namun, jika metodenya statis, tidak diperlukan "tabel metode virtual": semua panggilan ke metode itu pergi ke tempat yang sama persis di memori untuk menjalankan kode yang sama persis. Oleh karena itu, dalam sistem berperforma tinggi, lebih baik menggunakan metode statis jika Anda tidak bergantung pada variabel instance.

Nathaniel Ford
sumber
2
terima kasih banyak untuk contoh kode yang terlihat familiar jadi saya mengerti sekarang
Panthy
4
@Rohan Cara lain yang baik untuk melihatnya adalah bahwa apa pun static(kelas, metode, atau bidang) tidak benar-benar milik apa pun, ia hanya berkumpul di kelas untuk tujuan organisasi.
gobernador
1
Selain itu, bidang statis digunakan sebagai objek data (yang menyimpan data dan oleh karena itu tidak dapat diubah tetapi Anda dapat memanipulasi data di dalamnya.). Metode statis hanya dapat dipanggil pada bidang statis dan selanjutnya membawa pengertian yang sama tentang tetap konstan atau tidak berubah atau tidak memberi contoh !!
pengguna2416728
1
@ user2416728 Komentar Anda sangat membingungkan. Bidang statis dapat diubah, tetapi cakupannya bersifat global terhadap lingkungan pelaksanaannya. Oleh karena itu, setiap kode yang memiliki akses ke bidang tersebut memiliki akses ke data yang sama. Ini tidak sama dengan data yang tetap konstan (kecuali pengubah 'akhir' digunakan).
Nathaniel Ford
2
aye, "not change" >> maksudku tidak bisa dipakai !!
pengguna2416728
19

Metode dan variabel yang tidak dideklarasikan sebagai statis dikenal sebagai metode instance dan variabel instance. Untuk merujuk ke metode dan variabel instance, Anda harus membuat instance kelas terlebih dahulu berarti Anda harus membuat objek kelas itu terlebih dahulu.Untuk statis Anda tidak perlu membuat instance kelas, Anda dapat mengakses metode dan variabel dengan nama kelas menggunakan tanda titik yang ada di (.)

sebagai contoh:

Person.staticMethod();           //accessing static method.

untuk metode non-statis Anda harus membuat instance kelas.

Person person1 = new Person();   //instantiating
person1.nonStaticMethod();       //accessing non-static method.
Khalid Ahmed Khichi
sumber
8

Metode statis, variabel milik seluruh kelas, bukan hanya contoh objek. Sebuah metode statis, variabel dikaitkan dengan kelas secara keseluruhan daripada dengan contoh kelas tertentu. Setiap objek akan berbagi salinan umum dari metode statis, variabel. Hanya ada satu salinan per kelas, tidak peduli berapa banyak objek yang dibuat darinya.

Paulius Matulionis
sumber
8

Perbedaan antara metode Statis dan metode Instance

  1. Metode Instance adalah metode yang membutuhkan objek dari kelasnya untuk dibuat sebelum dapat dipanggil. Metode statis adalah metode di Java yang bisa dipanggil tanpa membuat objek kelas.

  2. Metode statis dideklarasikan dengan kata kunci statis. Metode contoh tidak dengan kata kunci statis.

  3. Metode statis artinya yang akan ada sebagai salinan tunggal untuk kelas. Tetapi metode instance ada sebagai beberapa salinan tergantung pada jumlah instance yang dibuat untuk kelas itu.

  4. Metode statis dapat dipanggil dengan menggunakan referensi kelas. Instance atau metode non-statis dipanggil dengan menggunakan referensi objek.

  5. Metode statis tidak dapat mengakses metode instance dan variabel instance secara langsung. Metode Instance dapat mengakses variabel statis dan metode statis secara langsung.

Referensi: geeksforgeeks

ruam
sumber
4

Metode instance => dipanggil pada instance tertentu dari kelas tertentu. Metode ingin mengetahui pada kelas mana ia dipanggil. Cara itu terjadi ada parameter tak terlihat yang disebut 'ini'. Di dalam 'ini' kami memiliki anggota kelas instance yang sudah disetel dengan nilai. 'Ini' bukan variabel. Ini adalah nilai, Anda tidak dapat mengubahnya dan nilainya adalah referensi ke penerima panggilan. Contoh: Anda memanggil tukang (metode contoh) untuk memperbaiki TV Anda (program aktual). Dia datang dengan alat (parameter 'ini'). Dia datang dengan alat khusus yang dibutuhkan untuk memperbaiki TV dan dia juga dapat memperbaiki hal-hal lain.

Dalam metode statis => tidak ada yang namanya 'ini'. Contoh: Tukang yang sama (metode statis). Ketika Anda memanggilnya, Anda harus menentukan tukang yang harus dihubungi (seperti tukang listrik). Dan dia akan datang dan memperbaiki TV Anda saja. Tetapi, dia tidak memiliki alat untuk memperbaiki hal-hal lain (tidak ada parameter 'ini').

Metode statis biasanya berguna untuk operasi yang tidak memerlukan data apa pun dari instance kelas (dari 'this') dan dapat melakukan tujuan yang dimaksudkan hanya dengan menggunakan argumennya.

Eldiyar Talantbek
sumber
2

Perilaku suatu objek bergantung pada variabel dan metode kelas itu. Saat kami membuat kelas, kami membuat objek untuknya. Untuk metode statis, kami tidak memerlukannya karena metode statis berarti semua objek akan memiliki salinan yang sama sehingga tidak diperlukan objek. misalnya:

Myclass.get();

Dalam metode instance setiap objek akan memiliki perilaku yang berbeda sehingga mereka harus memanggil metode tersebut menggunakan instance objek. misalnya:

Myclass x = new Myclass();
x.get();
Vishal Patil
sumber
1

Jika status suatu metode tidak seharusnya diubah atau tidak akan menggunakan variabel instan apa pun.

Anda ingin memanggil metode tanpa contoh.

Jika hanya berfungsi pada argumen yang diberikan padanya.

Fungsi utilitas adalah contoh yang baik dari metode statis. yaitu math.pow (), fungsi ini tidak akan mengubah status untuk nilai yang berbeda. Jadi itu statis.

suketup
sumber
1

Singkatnya, metode statis dan variabel statis adalah level kelas dimana metode instance dan variabel instance adalah level instance atau objek.

Ini berarti setiap kali sebuah instance atau objek (menggunakan new ClassName ()) dibuat, objek ini akan mempertahankan salinan variabel instace-nya sendiri. Jika Anda memiliki lima objek berbeda dari kelas yang sama, Anda akan memiliki lima salinan berbeda dari variabel instan. Tetapi variabel dan metode statis akan sama untuk kelima objek tersebut. Jika Anda membutuhkan sesuatu yang umum untuk digunakan oleh setiap objek yang dibuat, buatlah itu statis. Jika Anda memerlukan metode yang tidak memerlukan data spesifik objek untuk bekerja, buatlah itu statis. Metode statis hanya akan bekerja dengan variabel statis atau akan mengembalikan data berdasarkan argumen yang diteruskan.

class A {
    int a;
    int b;

    public void setParameters(int a, int b){
        this.a = a;
        this.b = b;
    }
    public int add(){
        return this.a + this.b;
   }

    public static returnSum(int s1, int s2){
        return (s1 + s2);
    }
}

Dalam contoh di atas, saat Anda memanggil add () sebagai:

A objA = new A();
objA.setParameters(1,2); //since it is instance method, call it using object
objA.add(); // returns 3 

B objB = new B();
objB.setParameters(3,2);
objB.add(); // returns 5

//calling static method
// since it is a class level method, you can call it using class itself
A.returnSum(4,6); //returns 10

class B{
    int s=8;
    int t = 8;
    public addition(int s,int t){
       A.returnSum(s,t);//returns 16
    }
}

Di kelas pertama, add () akan mengembalikan jumlah data yang diteruskan oleh objek tertentu. Tetapi metode statis dapat digunakan untuk mendapatkan jumlah dari kelas apa pun yang tidak independen jika ada instance atau objek tertentu. Oleh karena itu, untuk metode umum yang hanya membutuhkan argumen untuk bekerja dapat dibuat statis agar semuanya KERING.

Prakash
sumber
0

Metode Instance vs Metode Statis

  1. Metode instance dapat mengakses metode instance dan variabel instance secara langsung.

  2. Metode Instance dapat mengakses variabel statis dan metode statis secara langsung.

  3. Metode statis dapat mengakses variabel statis dan metode statis secara langsung.

  4. Metode statis tidak dapat mengakses metode instance dan variabel instance secara langsung. Mereka harus menggunakan referensi ke objek. Dan metode statis tidak dapat menggunakan kata kunci ini karena tidak ada contoh untuk 'ini' untuk merujuk.

param
sumber
-2

Pengubah statis saat ditempatkan di depan suatu fungsi menyiratkan bahwa hanya ada satu salinan fungsi itu. Jika pengubah statis tidak ditempatkan di depan fungsi maka dengan setiap objek atau instance dari kelas itu salinan baru dari fungsi itu dibuat. :) Sama halnya dengan variabel.

Prakhar Mohan Srivastava
sumber