Dzień zaczyna dobiegać końca, a ja na zachętę przynoszę Wam następne akapity kręcące się wokół języka Java. Opiszemy sobie czym jest statyczność. Wiele osób ma problemy z przyswojeniem sobie tematu, który również jest często spotykany i wykorzystywany w praktyce. To brzmi na tyle poważnie, że postanowiłem zabrać się i za zmienne, i za metody statyczne. Nie uciekajcie od tego z krzykiem! To trzeba wreszcie zrozumieć!

STATYCZNOŚĆ SAMA W SOBIE

Słownik języka polskiego twierdzi, iż "statyczność" oznacza coś nieulegającego zmianom lub stojącego w bezruchu. Zostawmy ojczysty język w spokoju i skupmy się na dopasowaniu definicji do programowania. Zacznijmy od informacji, że obejmuje to zmienne i funkcje. Od tej chwili będę określał to zmiennymi "zwykłymi" i zmiennymi "statycznymi". To samo tyczy się metod. W Javie, statyczność zmienia punkt widzenia w zależności od tego, w którym miejscu umieszczamy modyfikator "static".

W obu przypadkach, statyczność wpływa na miejsce przechowywania takiej danej. Tam, gdzie dotychczas do tworzonych zmiennych i metod uzyskiwało się dostęp poprzez instancję (kopię) klasy (pod warunkiem, że modyfikator ustawiono na "publiczny"), tak dana statyczna znajduje się bezpośrednio w KLASIE i za jej pomocą można dostać się do danych statycznych. W poniższym kodzie źródłowym zostało to przedstawione.

Jeżeli zmienna jest statyczna, to zachowuje ona tę samą wartość niezależnie od klasy w której się znajduje. Staje się to przydatne gdy chcemy, aby wartość nie została utracona w wyniku "posprzątania" obiektu przez wbudowany odśmiecacz pamięci. Statyczność zmiennej powoduje jej "przetrzymanie" dopóty dopóki proces programu nie zostanie zakończony. Z kolei jeśli metoda jest statyczna, to staje się niezależna od tworzonych instancji i pozwala na wykonywanie instrukcji z poziomu klasy z dowolnego innego miejsca. Spójrzcie chociażby na klasę "Math". Czy kiedykolwiek byliście zmuszeni do utworzenia zmiennej typu "Math"? NIE! Właśnie dlatego, że są to metody statyczne, których zadaniem jest "przyniesienie" rozwiązania w zębach z dowolnego miejsca.

KOD ŹRÓDŁOWY Z PRZYKŁADEM

Spróbujmy obu tych rzeczy w praktyce. Zastosujemy statyczność dla zmiennej i dla funkcji. Ta sama klasa "Point" tylko już bez metody "toString". Oto kod źródłowy:

  • KLASA "Main"
public class Main
{
	public static void main(String[] args)
	{
		Point pa, pb;

		System.out.println(Point.addedPoints());

		pa = new Point(5, 7);
		pb = new Point(2, 78);

		System.out.println(Point.addedPoints());
	}
}
  • KLASA "Point"
public class Point
{
	private static int pointsInWorld = 0;
	private int x, y;

	public Point(int x, int y)
	{
		this.x = x;
		this.y = y;
		++pointsInWorld;
	}

	public static int addedPoints()
	{
		return pointsInWorld;
	}
}

Zmienna statyczna "pointsInWorld" przechowuje wartość liczbową dla wykrywania utworzonych punktów przez konstruktor. Normalnie, to każda instancja otrzymywałaby wartość 1. Dodając statyczność do zmiennej, jesteśmy w stanie wpłynąć na sposób przechowywania. Metoda statyczna "addedPoints" też zmienia zwyczajny przepływ programu. Tradycyjnie musielibyśmy odwołać się do którejś z dwóch instancji i po kropce podać nazwę. W powyższym przykładzie jesteśmy zwolnieni z tego obowiązku i odwołaliśmy się poprzez KLASĘ, nie obiekt!

Statyczność i modyfikator "static"

Modyfikator "static" umożliwia traktowanie zmiennej lub metody jako statycznej, co ma duży wpływ na przebieg programu.


Kończymy na dzisiaj, posiedźcie przy tym i prześledźcie wszystko jeszcze raz na spokojnie.

PODOBNE ARTYKUŁY