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ść w języku Java. 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ŚĆ W JĘZYKU JAVA OD STRONY TEORETYCZNEJ

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ść w języku Java 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 z dowolnego miejsca.

PRZYKŁAD KODU ŹRÓDŁOWEGO

Spróbujmy obu tych rzeczy w praktyce. Zastosujemy statyczność w języku Java 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ść w języku Java 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.

"static" w języku Java

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ść w języku Java też wymaga rozumienia.

PODOBNE ARTYKUŁY