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, zmienia to 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 tworzonych obiektów. 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! Spójrzcie jeszcze uważnie na modyfikator "static" wyżej wymienionej metody, jest on obowiązkowy do prawidłowego skompilowania programu.

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. Statyczność też wymaga rozumienia.

PODOBNE ARTYKUŁY