Właśnie przeczytałem tekst podany mi w podręczniku i nie jestem pewien, czy rozumiem, co on mówi. Zasadniczo mówi mi, że metody statyczne lub metody klas zawierają słowo kluczowe „modyfikator” static. Ale tak naprawdę nie wiem, co to znaczy?
Czy ktoś mógłby mi wyjaśnić w bardzo prosty sposób, czym są metody statyczne lub klasowe?
Czy mogę również uzyskać proste wyjaśnienie, jakie są metody instancji?
Oto, co podają mi w podręczniku:
Istnieją ważne praktyczne implikacje obecności lub braku modyfikatora statycznego. Publiczną metodę klasy można wywołać i wykonać, gdy tylko Java przetworzy definicję klasy, do której należy. Nie ma to miejsca 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, zanim będzie można użyć metody instancji publicznej, należy mieć instancję tej klasy.
Sposób, w jaki metoda statyczna jest wywoływana w ramach definicji innej metody, różni się w zależności od tego, czy te dwie metody należą do tej samej klasy, czy nie. W powyższym przykładzie silnia i main są metodami klasy MainClass. W rezultacie wywołanie silni w definicji main po prostu odwołuje się do nazwy metody „silnia”.
źródło
static
(klasa, metoda lub pole) tak naprawdę do niczego nie należy, po prostu wisi w klasie ze względów organizacyjnych.Metody i zmienne, które nie są zadeklarowane jako statyczne, nazywane są metodami instancji i zmiennymi instancji. Aby odwołać się do metod i zmiennych instancji, musisz najpierw utworzyć instancję klasy, co oznacza, że powinieneś najpierw utworzyć obiekt tej klasy. która jest w (.)
na przykład:
Person.staticMethod(); //accessing static method.
w przypadku metody niestatycznej należy utworzyć instancję klasy.
Person person1 = new Person(); //instantiating person1.nonStaticMethod(); //accessing non-static method.
źródło
Metody statyczne, zmienne należą do całej klasy, a nie tylko do instancji obiektu. Metoda statyczna, zmienna, jest powiązana z klasą jako całością, a nie z określonymi instancjami klasy. Każdy obiekt będzie miał wspólną kopię metod statycznych, zmiennych. Istnieje tylko jedna kopia na klasę, niezależnie od tego, ile obiektów jest z niej utworzonych.
źródło
Różnica między metodami statycznymi a metodami instancji
Metoda instancji to metody, które wymagają utworzenia obiektu swojej klasy, zanim będzie można go wywołać. Metody statyczne to metody w Javie, które można wywołać bez tworzenia obiektu klasy.
Metoda statyczna jest deklarowana za pomocą słowa kluczowego static. Metoda instancji nie zawiera statycznego słowa kluczowego.
Metoda statyczna oznacza, że będzie istnieć jako pojedyncza kopia dla klasy. Ale metody instancji istnieją jako wiele kopii w zależności od liczby instancji utworzonych dla tej klasy.
Metody statyczne można wywołać przy użyciu odwołania do klasy. Metody instancji lub metody niestatyczne są wywoływane przy użyciu odwołania do obiektu.
Metody statyczne nie mają 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.
Źródła : geeksforgeeks
źródło
Metody instancji => wywoływane na konkretnej instancji określonej klasy. Metoda chce wiedzieć, dla której klasy została wywołana. Sposób, w jaki to się dzieje, to niewidoczny parametr o nazwie „this”. Wewnątrz „this” mamy już ustawione elementy klasy instancji z wartościami. „To” nie jest zmienną. Jest to wartość, której nie można zmienić, a wartość odnosi się do odbiorcy połączenia. Np. Dzwonisz do mechaników (metoda instancji), aby naprawić telewizor (rzeczywisty program). Jest wyposażony w narzędzia (parametr „ten”). Jest wyposażony w specjalne narzędzia potrzebne do naprawy telewizora i może również naprawić inne rzeczy.
W metodach statycznych => nie ma czegoś takiego jak „to”. Np .: ten sam mechanik (metoda statyczna). Dzwoniąc do niego, musisz określić, do którego mechanika zadzwonić (np. Elektryka). A on przyjdzie i naprawi tylko twój telewizor. Ale nie ma narzędzi do naprawiania innych rzeczy (nie ma parametru „ten”).
Metody statyczne są zwykle przydatne w przypadku operacji, które nie wymagają żadnych danych z instancji klasy (z „this”) i mogą realizować swój zamierzony cel wyłącznie przy użyciu swoich argumentów.
źródło
Zachowanie obiektu zależy od zmiennych i metod tej klasy. Kiedy tworzymy klasę, tworzymy dla niej obiekt. W przypadku metod statycznych ich nie wymagamy, ponieważ metody statyczne oznaczają, że wszystkie obiekty będą miały tę samą kopię, więc nie ma potrzeby używania obiektu. na przykład:
W przypadku metody instancji każdy obiekt będzie zachowywał się inaczej, więc będą musieli wywołać metodę za pomocą instancji obiektu. na przykład:
Myclass x = new Myclass(); x.get();
źródło
Jeśli stan metody nie ma zostać zmieniony lub nie będzie używała żadnych zmiennych instancji.
Chcesz wywołać metodę bez instancji.
Jeśli działa tylko na dostarczonych argumentach.
Funkcje narzędziowe są dobrym przykładem metod statycznych. tj. math.pow (), ta funkcja nie zmieni stanu dla różnych wartości. Więc to jest statyczne.
źródło
Krótko mówiąc, metody statyczne i zmienne statyczne są na poziomie klasy, podczas gdy metody instancji i zmienne instancji są na poziomie instancji lub obiektu.
Oznacza to, że za każdym razem, gdy tworzona jest instancja lub obiekt (przy użyciu nowej ClassName ()), obiekt ten zachowa własną kopię zmiennych instancji. Jeśli masz pięć różnych obiektów tej samej klasy, będziesz mieć pięć różnych kopii zmiennych instancji. Ale statyczne zmienne i metody będą takie same dla wszystkich pięciu obiektów. Jeśli potrzebujesz czegoś wspólnego dla każdego utworzonego obiektu, ustaw go jako statyczny. Jeśli potrzebujesz metody, która nie wymaga do działania danych specyficznych dla obiektu, uczyń ją statyczną. Metoda statyczna zadział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 przekazanych przez określony obiekt. Jednak metoda statyczna może służyć do uzyskania sumy z dowolnej klasy, która nie jest niezależna od konkretnego wystąpienia lub obiektu. W związku z tym dla metod ogólnych, które potrzebują tylko argumentów do działania, można ustawić je jako statyczne, aby zachować je wszystkie jako SUCHE.
źródło
Metoda instancji a metoda statyczna
Metoda instancji może uzyskać bezpośredni dostęp do metod instancji i zmiennych instancji.
Metoda instancji może uzyskać bezpośredni dostęp do zmiennych statycznych i metod statycznych.
Metody statyczne mogą uzyskiwać bezpośredni dostęp do zmiennych statycznych i metod statycznych.
Metody statyczne nie mają bezpośredniego dostępu do metod instancji i zmiennych instancji. Muszą używać odniesienia do obiektu. Metoda statyczna nie może używać tego słowa kluczowego, ponieważ nie ma instancji „this”, do której można by się odwołać.
źródło
Modyfikator static umieszczony przed funkcją oznacza, że istnieje tylko jedna kopia tej funkcji. Jeśli modyfikator statyczny nie jest umieszczony przed funkcją, to dla każdego obiektu lub instancji tej klasy tworzona jest nowa kopia tej funkcji. :) Tak samo jest ze zmiennymi.
źródło