Statik yöntemler ve Örnek yöntemleri arasındaki fark


89

Sadece ders kitabımda bana verilen metni okuyordum ve ne dediğini tam olarak anladığımdan emin değilim. Temelde bana statik yöntemlerin veya sınıf yöntemlerinin statik "değiştirici" anahtar kelimesini içerdiğini söylüyor. Ama bunun ne anlama geldiğini gerçekten bilmiyorum?

Birisi bana Statik veya Sınıf Yöntemlerinin ne olduğunu gerçekten basit terimlerle açıklayabilir mi?

Ayrıca Örnek yöntemlerinin ne olduğuna dair basit bir açıklama alabilir miyim?

Ders kitabında bana verdikleri şey bu:

Statik değiştiricinin varlığı veya yokluğunun önemli pratik sonuçları vardır. Java, ait olduğu sınıfın tanımını işlediği anda bir genel sınıf yöntemi çağrılabilir ve çalıştırılabilir. Bir örnek yöntemi için durum böyle değildir. Bir genel örnek yöntemi çağrılmadan ve çalıştırılmadan önce, ait olduğu sınıfın bir örneği oluşturulmalıdır. Bir genel sınıf yöntemini kullanmak için, sadece sınıfa ihtiyacınız var. Öte yandan, genel bir örnek yöntemini kullanmadan önce sınıfın bir örneğine sahip olmanız gerekir.

Statik bir yöntemin başka bir yöntemin tanımı içinde çağrılma biçimi, iki yöntemin aynı sınıfa ait olup olmadığına göre değişir. Yukarıdaki örnekte, faktoriyel ve ana, MainClass sınıfının yöntemleridir. Sonuç olarak, main'in tanımındaki faktoriyelin çağrılması basitçe yöntem adı olan "faktoriyel" i referans alır.

Yanıtlar:


166

Java'daki temel paradigma, sınıflar yazmanız ve bu sınıfların somutlaştırılmasıdır. Örneklenmiş nesneler (bir sınıfın örneği), davranışlarını etkileyen kendileriyle ilişkili özniteliklere (üye değişkenlere) sahiptir; örneğin metodu çalıştırıldığında, bu değişkenlere başvurur.

Bununla birlikte, belirli bir türdeki tüm nesneler, üye değişkenlere hiç bağımlı olmayan davranışlara sahip olabilir; bu yöntemler en iyi şekilde statik yapılır. Statik olduğundan, yöntemi çalıştırmak için sınıfın hiçbir örneği gerekmez.

Statik bir yöntem yürütmek için bunu yapabilirsiniz:

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

Ancak statik olmayan bir yöntemi yürütmek için şunu yapmanız gerekir:

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

Daha derin bir seviyede derleyici, bir sınıfı bir araya getirdiğinde, yöntemlere işaretçiler toplar ve bunları sınıfa ekler. Bu yöntemler çalıştırıldığında, işaretçileri takip eder ve uzak uçtaki kodu yürütür. Bir sınıfın somutlaştırılması durumunda, yaratılan nesne, miras hiyerarşisinde söz konusu sınıf için çağrılacak yöntemlere işaret eden "sanal yöntem tablosuna" bir işaretçi içerir. Ancak, yöntem statikse, "sanal yöntem tablosu" gerekmez: bu yönteme yapılan tüm çağrılar, aynı kodu yürütmek için bellekte tam olarak aynı yere gider. Bu nedenle, yüksek performanslı sistemlerde, örnek değişkenlerine bağımlı değilseniz, statik bir yöntem kullanmak daha iyidir.


2
tanıdık görünen kod örnekleri için çok teşekkür ederim, bu yüzden şimdi anlıyorum
Panthy

4
@Rohan Buna bakmanın bir başka iyi yolu da herhangi staticbir şeyin (bir sınıf, yöntem veya alan) gerçekten hiçbir şeye ait olmamasıdır, sadece organizasyonel amaçlar için sınıfta takılır.
gobernador

1
Ayrıca statik alanlar veri nesneleri olarak kullanılır (verileri tutan ve bu nedenle değişmeyen ancak içindeki verileri işleyebilirsiniz.) Statik yöntemler yalnızca statik alanlar için çağrılabilir ve bu nedenle aynı sabit kalma veya değişmeme kavramını taşır. ya da örneklemiyor !!
user2416728

1
@ user2416728 Yorumunuz çok karışık. Statik alanlar olabilir değiştirilebilir, ancak bunların kapsamı onların yürütme ortamına geneldir. Bu nedenle, söz konusu alana erişimi olan herhangi bir kodun aynı verilere erişimi vardır. Bu, verilerin sabit kalmasıyla eşdeğer değildir ('son' değiştirici kullanılmadıkça).
Nathaniel Ford

2
evet, "değişme" >> somutlaştırılamaz demek istedim !!
user2416728

19

Statik olarak bildirilmeyen yöntemler ve değişkenler, örnek yöntemler ve örnek değişkenleri olarak bilinir. Örnek yöntemlerine ve değişkenlerine başvurmak için, önce sınıfı başlatmanız gerekir, yani önce o sınıfın bir nesnesini oluşturmanız gerekir. Statik için sınıfı başlatmanız gerekmez u, dönem işaretini kullanarak sınıf adıyla yöntemlere ve değişkenlere erişebilirsiniz (.)

Örneğin:

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

statik olmayan yöntem için sınıfı başlatmanız gerekir.

Person person1 = new Person();   //instantiating
person1.nonStaticMethod();       //accessing non-static method.

8

Statik yöntemler, değişkenler yalnızca bir nesne örneğine değil, tüm sınıfa aittir. Statik bir yöntem olan değişken, bir sınıfın belirli örneklerinden ziyade bir bütün olarak sınıfla ilişkilendirilir. Her nesne, statik yöntemlerin, değişkenlerin ortak bir kopyasını paylaşacaktır. Ondan kaç tane nesne oluşturulduğuna bakılmaksızın, sınıf başına yalnızca bir kopya vardır.


8

Statik yöntemler ve Örnek yöntemleri arasındaki fark

  1. Örnek yöntemi, çağrılmadan önce kendi sınıfından bir nesnenin oluşturulmasını gerektiren yöntemlerdir. Statik yöntemler, Java'da bir sınıf nesnesi oluşturmadan çağrılabilen yöntemlerdir.

  2. Statik yöntem, static anahtar sözcüğüyle bildirilir. Örnek yöntemi statik anahtar kelimeyle değil.

  3. Statik yöntem, bir sınıf için tek bir kopya olarak bulunacak anlamına gelir. Ancak örnek yöntemleri, o sınıf için oluşturulan örneklerin sayısına bağlı olarak birden çok kopya olarak mevcuttur.

  4. Statik yöntemler, sınıf referansı kullanılarak çağrılabilir. Örnek veya statik olmayan yöntemler, nesne başvurusu kullanılarak çağrılır.

  5. Statik yöntemler, örnek yöntemlerine ve örnek değişkenlerine doğrudan erişemez. Örnek yöntemi, statik değişkenlere ve statik yöntemlere doğrudan erişebilir.

Referans: geeksforgeeks


4

Örnek yöntemleri => belirli bir sınıfın belirli bir örneğinde çağrılır. Yöntem hangi sınıfta çağrıldığını bilmek ister. Olduğu gibi, 'bu' adında görünmez bir parametre var. "Bunun" içinde, zaten değerlerle ayarlanmış örnek sınıfının üyelerine sahibiz. "Bu" bir değişken değildir. Bu bir değerdir, değiştiremezsiniz ve değer aramanın alıcısına referanstır. Ör: TV'nizi (gerçek program) düzeltmek için tamircileri çağırırsınız (örnek yöntemi). Araçlarla birlikte gelir ('bu' parametre). Televizyonu tamir etmek için gerekli özel aletlerle birlikte gelir ve başka şeyleri de tamir edebilir.

Gelen statik yöntemlerle => 'Bu' diye bir şey yoktur. Ör: Aynı tamirci (statik yöntem). Onu aradığınızda, hangi tamirciyi arayacağınızı belirtmeniz gerekir (elektrikçi gibi). Ve o gelecek ve sadece senin televizyonunu tamir edecek. Ancak, başka şeyleri düzeltecek araçları yoktur ('bu' parametresi yoktur).

Statik yöntemler genellikle sınıfın bir örneğinden ("bu" dan) herhangi bir veri gerektirmeyen işlemler için kullanışlıdır ve amaçlanan amaçlarını yalnızca kendi argümanlarını kullanarak gerçekleştirebilirler.


2

Bir nesnenin davranışı, o sınıfın değişkenlerine ve yöntemlerine bağlıdır. Bir sınıf yarattığımızda onun için bir nesne yaratırız. Statik yöntemler için, statik yöntemler tüm nesnelerin aynı kopyaya sahip olacağı anlamına geldiğinden, bunlara ihtiyaç duymayız, bu nedenle bir nesneye gerek yoktur. Örneğin:

Myclass.get();

Örnek yöntemde her nesnenin farklı davranışı olacaktır, bu nedenle nesne örneğini kullanarak yöntemi çağırmaları gerekir. Örneğin:

Myclass x = new Myclass();
x.get();

1

Bir yöntemin durumu değiştirilmeyecekse veya herhangi bir örnek değişkeni kullanmayacaksa.

Örneği olmayan yöntemi çağırmak istiyorsunuz.

Yalnızca kendisine sağlanan argümanlar üzerinde çalışıyorsa.

Fayda fonksiyonları, statik yöntemlerin iyi bir örneğidir. yani math.pow (), bu fonksiyon farklı değerler için durumu değiştirmeyecektir. Yani statik.


1

Kısacası, statik yöntemler ve statik değişkenler, örnek yöntemleri ve örnek değişkenleri olarak örnek veya nesne düzeyinde olan sınıf düzeyidir.

Bu, bir örnek veya nesne (yeni ClassName () kullanılarak) oluşturulduğunda, bu nesnenin kendi örnek değişkenleri kopyasını tutacağı anlamına gelir. Aynı sınıftan beş farklı nesneniz varsa, örnek değişkenlerin beş farklı kopyasına sahip olursunuz. Ancak statik değişkenler ve yöntemler bu beş nesnenin tümü için aynı olacaktır. Oluşturulan her nesne tarafından kullanılacak ortak bir şeye ihtiyacınız varsa, onu statik hale getirin. Çalışmak için nesneye özgü verilere ihtiyaç duymayan bir yönteme ihtiyacınız varsa, onu statik hale getirin. Statik yöntem yalnızca statik değişkenle çalışır veya aktarılan argümanlar temelinde veri döndürür.

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);
    }
}

Yukarıdaki örnekte, add () işlevini şu şekilde çağırdığınızda:

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
    }
}

Birinci sınıfta, add () belirli bir nesne tarafından iletilen verilerin toplamını döndürür. Ancak statik yöntem, belirli bir örnek veya nesneden bağımsız olmayan herhangi bir sınıftan toplamı almak için kullanılabilir. Bu nedenle, yalnızca çalışması için bağımsız değişkenlere ihtiyaç duyan jenerik yöntemler için, hepsini KURU tutmak için statik yapılabilir.


0

Örnek yöntemi ve Statik yöntem

  1. Örnek yöntemi, örnek yöntemlerine ve örnek değişkenlerine doğrudan erişebilir.

  2. Örnek yöntemi, statik değişkenlere ve statik yöntemlere doğrudan erişebilir.

  3. Statik yöntemler, statik değişkenlere ve statik yöntemlere doğrudan erişebilir.

  4. Statik yöntemler, örnek yöntemlerine ve örnek değişkenlerine doğrudan erişemez. Nesneye referans kullanmaları gerekir. Ve statik yöntem bu anahtar kelimeyi kullanamaz, çünkü 'this' için başvurulacak bir örnek yoktur.


-2

Statik değiştirici, bir işlevin önüne yerleştirildiğinde, o işlevin yalnızca bir kopyasının var olduğu anlamına gelir. Statik değiştirici işlevin önüne yerleştirilmezse, o sınıfın her nesnesi veya örneği ile bu işlevin yeni bir kopyası yapılır. :) Değişkenler için de durum aynıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.