Różnica między metodami statycznymi a Instancyjnymi

Właśnie czytałam tekst podany mi w podręczniku i nie jestem pewna, czy rozumiem o czym on mówi. Zasadniczo mówi mi, że metody statyczne lub metody klas zawierają słowo kluczowe" modyfikator " static. Ale naprawdę Nie wiem, co to znaczy?

Czy mógłby mi ktoś wyjaśnić w bardzo prosty sposób czym są metody statyczne lub klasowe?

Również, Czy Mogę uzyskać proste wyjaśnienie, jakie metody instancji są?

To mi dają w Podręcznik:

Istnieją ważne praktyczne implikacje obecności lub braku modyfikatora statycznego. Metoda klasy publicznej może zostać wywołana i wykonana, gdy tylko Java przetworzy definicję klasy, do której należy. Tak nie jest w przypadku metody instancji. Przed wywołaniem i wykonaniem metody instancji publicznej należy utworzyć instancję klasy, do której należy. Aby użyć metody klasy publicznej, potrzebujesz tylko klasy. Z drugiej strony, przed możesz użyć metody wystąpienia publicznego musisz mieć instancję klasy.

Sposób wywoływania statycznej metody w ramach definicji innej metody różni się w zależności od tego, czy obie metody należą do tej samej klasy. W powyższym przykładzie zarówno factorial, jak i main są metodami klasy MainClass. W rezultacie wywołanie czynnika w definicji głównej po prostu odwołuje się do nazwy metody, "czynnik".

Author: Platinum Azure, 2012-08-16

10 answers

Podstawowy paradygmat w Javie polega na tym, że piszesz klasy i że te klasy są tworzone jako instancje. Instancyjne obiekty (instancja klasy) mają powiązane z nimi atrybuty (zmienne członkowskie), które wpływają na ich zachowanie; gdy instancja ma wykonaną metodę, będzie odnosić się do tych zmiennych.

Jednakże, wszystkie obiekty określonego typu mogą mieć zachowanie, które w ogóle nie jest zależne od zmiennych członkowskich; te metody są najlepiej statyczne. Będąc statycznym, żaden przypadek klasa jest wymagana do uruchomienia metody.

Możesz to zrobić, aby wykonać statyczną metodę:

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

Ale aby wykonać niestatyczną metodę, musisz to zrobić:

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

Na głębszym poziomie, gdy kompilator składa klasę razem, zawiera ona kilka wskaźników do metod. Gdy te metody są wykonywane, podąża za wskaźnikami i wykonuje kod na drugim końcu. W przypadku utworzenia instancji klasy, utworzony obiekt zawiera wskaźnik do "tabeli metod wirtualnych", który wskazuje na metody, które należy wywołać dla danej klasy w hierarchii dziedziczenia. Jeśli jednak metoda jest statyczna, nie jest potrzebna "wirtualna tabela metod": wszystkie wywołania tej metody idą do dokładnie tego samego miejsca w pamięci, aby wykonać dokładnie ten sam kod. Z tego powodu w systemach o wysokiej wydajności lepiej jest użyć metody statycznej, jeśli nie zależy się na zmiennych instancji.

 110
Author: Nathaniel Ford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-11 11:44:18

Metody i zmienne, które nie są zadeklarowane jako statyczne, są znane jako metody instancji i zmienne instancji. Aby odwoływać się do metod instancji i zmiennych, musisz najpierw utworzyć instancję klasy, co oznacza, że najpierw powinieneś utworzyć obiekt tej klasy.Dla statycznych nie musisz tworzyć instancji Klasa u może uzyskać dostęp do metod i zmiennych z nazwą klasy za pomocą znaku kropki, który jest w (.)

Na przykład:

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

Dla metody niestatycznej należy utworzyć instancję klasy.

Person person1 = new Person();   //instantiating
person1.nonStaticMethod();       //accessing non-static method.
 11
Author: Khalid Ahmed Khichi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-07 12:06:10

Statyczne metody, zmienne należą do całej klasy, a nie tylko do instancji obiektu. Statyczna metoda, zmienna jest powiązana z klasą jako całością, a nie z konkretnymi instancjami klasy. Każdy obiekt będzie miał wspólną kopię statycznych metod, zmiennych. Na klasę przypada tylko jedna kopia, bez względu na to, ile obiektów zostało z niej utworzonych.

 7
Author: Paulius Matulionis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-16 18:24:12

Metody instancji = > wywołane na konkretnej instancji określonej klasy. Metoda chce wiedzieć, na której klasie została wywołana. Sposób, w jaki to się dzieje, jest niewidoczny parametr o nazwie "this". Wewnątrz 'this' mamy członków klasy instancji już ustawionych wartościami. 'This' nie jest zmienną. Jest to wartość, nie można jej zmienić, a wartość jest odniesieniem do odbiorcy połączenia. Ex: wywołujesz repairmen (metodę instancji), aby naprawić swój telewizor (rzeczywisty program). On narzędzia (parametr' this'). On pochodzi z konkretnych narzędzi potrzebnych do naprawy TV i może naprawić inne rzeczy również.

W metodach statycznych => nie ma czegoś takiego jak 'to'. Ex: ten sam mechanik (metoda statyczna). Kiedy dzwonisz do niego, musisz określić, do którego serwisanta zadzwonić (np. Elektryk). A on przyjdzie i naprawi tylko twój TELEWIZOR. Ale nie ma narzędzi do naprawiania innych rzeczy(nie ma parametru 'this').

Metody statyczne są zwykle przydatne dla operacje, które nie wymagają żadnych danych z instancji klasy (od' this') i mogą wykonywać swoje zamierzone cele wyłącznie za pomocą ich argumentów.

 4
Author: Eldiyar Talantbek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-22 20:33:33

Różnica między metodami statycznymi i Instancyjnymi

  1. Metoda instancji to metody, które wymagają utworzenia obiektu swojej klasy przed wywołaniem. Metody statyczne to metody w Javie, które można wywołać bez tworzenia obiektu klasy.

  2. Metoda Static jest zadeklarowana za pomocą słowa kluczowego static. Metoda instancji nie zawiera słowa kluczowego statycznego.

  3. Metoda statyczna oznacza, że będzie istnieć jako pojedyncza kopia dla klasy. Ale przykład metody istnieją jako wiele kopii w zależności od liczby instancji utworzonych dla tej klasy.

  4. Metody statyczne mogą być wywoływane za pomocą referencji klasy. Instancja lub niestatyczne metody są wywoływane przez odniesienie do obiektu.

  5. Statyczne metody nie mogą uzyskać bezpośredniego dostępu do metod instancji i zmiennych instancji. Metoda instancji może uzyskać bezpośredni dostęp do zmiennych statycznych i metod statycznych.

Reference: geeksforgeeks

 4
Author: rashedcs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-02 18:29:39

Jeśli stan metody nie ma być zmieniany lub jej nie będzie używać żadnych zmiennych instancji.

Chcesz wywołać metodę bez instancji.

Jeśli działa tylko na dostarczonych mu argumentach.

Funkcje użytkowe są dobrą instancją metod statycznych. matematyka.pow (), funkcja ta nie zmieni stanu dla różnych wartości. Więc to jest statyczne.

 1
Author: Suketu Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-16 00:20:34

Zachowanie obiektu zależy od zmiennych i metod tej klasy. Kiedy tworzymy klasę, tworzymy dla niej obiekt. W przypadku metod statycznych nie wymagamy ich, ponieważ metody statyczne oznaczają, że wszystkie obiekty będą miały tę samą kopię, więc nie ma potrzeby posiadania obiektu. e. g:

Myclass.get();

W metodzie instance każdy obiekt będzie miał inne zachowanie, więc musi wywołać metodę za pomocą instancji obiektu. e. g:

Myclass x = new Myclass();
x.get();
 1
Author: Vishal Patil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-01 00:20:10

W skrócie, metody statyczne i zmienne statyczne są poziomem klasy, gdzie jako metody instancji i zmienne instancji są poziomem instancji lub obiektu.

Oznacza to, że za każdym razem, gdy zostanie utworzona instancja lub obiekt (używając new ClassName ()), obiekt ten zachowa własną kopię zmiennych instace. Jeśli masz pięć różnych obiektów tej samej klasy, będziesz mieć pięć różnych kopii zmiennych instancji. Ale zmienne statyczne i metody będą takie same dla wszystkich tych pięciu obiektów. Jeśli potrzeba czegoś wspólnego, aby każdy utworzony obiekt był używany, aby stał się statyczny. Jeśli potrzebujesz metody, która nie potrzebuje do działania danych specyficznych dla obiektu, zrób ją statyczną. Metoda statyczna będzie działać tylko ze zmienną statyczną lub zwróci dane na podstawie przekazanych argumentów.

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

W powyższym przykładzie, gdy wywołujesz add () jako:

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

W pierwszej klasie, add () zwróci sumę danych przekazywanych przez określony obiekt. Ale metoda statyczna może być użyta do uzyskania sumy z dowolnej klasy nie niezależne, jeśli jakaś konkretna instancja lub obiekt. Stąd, Dla metod generycznych, które potrzebują tylko argumentów do działania, można uczynić statycznymi, aby wszystko było suche.

 1
Author: Prakash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-22 04:27:12

Metoda instancji vs metoda statyczna

  1. Metoda instancji może uzyskać dostęp do metod instancji I instancji zmienne bezpośrednio.

  2. Metoda instancji może uzyskać dostęp do zmiennych statycznych i metod statycznych bezpośrednio.

  3. Metody statyczne mogą uzyskać dostęp do zmiennych statycznych i metod statycznych bezpośrednio.

  4. Statyczne metody nie mogą uzyskać dostępu do metod instancji i zmiennych instancji bezpośrednio. Muszą używać odniesienia do obiektu. I statyczne metoda nie może użyj tego słowa kluczowego, ponieważ nie ma instancji, do której można by się odnieść.

 1
Author: param,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-06 08:28:11

Modyfikator statyczny umieszczony przed funkcją oznacza, że istnieje tylko jedna kopia tej funkcji. Jeśli modyfikator statyczny nie jest umieszczony przed Funkcją, to z każdym obiektem lub instancją tej klasy tworzy się nową kopię tej funkcji. :) Podobnie jest w przypadku zmiennych.

 0
Author: Prakhar Mohan Srivastava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-16 18:20:13