Jason. Cała informatyka w jednym miejscu!

Zabieram się za kolejną porcję obfitego redagowania na własnej stronie. Znowu Java bez zmian i opowiem czym jest import statyczny w języku Java oraz czym się on różni od zwykłego. To również stanowi jedynie element poboczny i może pomóc lub zaszkodzić w zależności od tego, kto czyta nasz kod. Nie migajcie się, poznajcie kolejny element o którym się mało mówi.

IMPORT STATYCZNY W JĘZYKU JAVA. PIERWSZE SKOJARZENIE?

Czy to ma coś wspólnego z poznanym inicjalizatorem statycznym? Nie, w żaden sposób. Niczego nie planowałem, pomysł aby o tym napisać przyszedł do głowy dzisiaj. Być może zastanawiacie się nad tym, czym się może różnić import statyczny od zwykłego. Uspokoję Was na wstępie, że tym razem nie ma żadnych nowych słów kluczowych, jedynie dorzucacie "static" na "dokładkę". Następnie podajecie ciąg przestrzeni nazw odwołujących się do określonej klasy poczynając od "Java" (pisane wielką literą z tych samych problemów technicznych opisanych poprzednio).

Import statyczny w języku Java pozwala uniknąć pisania długich nazw których zapis jest wymagany, aby odwołać się do danej metody. Za przykład podam słynne "System.out.println". Wielokrotnie pisanie tego samego może być uciążliwie, nie? Przyznajcie się. Właśnie w takich sytuacjach nadarza się wspaniała okazja do zawarcia importu statycznego tak, aby ominąć to odwoływanie się do przestrzeni nazw i po prostu pisać krócej. Traktujcie to jak "namespace" w C#, to również skraca pisanie, aczkolwiek nie działa to identycznie.

"Kodowo" to wygląda w taki sposób:

import static [dowolna biblioteka];

To może być naprawdę ciekawe, że nawet importowanie bibliotek może kryć jeszcze jakiś zapis, o którym możecie nie mieć bladego pojęcia. Sugerując się tym samym przykładem, możemy podstawić taki zapis:

Import statyczny w języku Java

Joomla tworzy problem przy zapisie powyższych słów kluczowych, co zmusiło mnie do wszczepienia obrazka z programu "Intellij IDEA". Przepraszam z góry za niemożność skopiowania.

Przyniesie to taki efekt, że będziemy mogli od teraz pisać instrukcje bez tego członu "System.out". Import statyczny w języku Java łatwo jest odróżnić od zwykłego importu przez dodatkowe słowo "static" i więcej filozofii w tym nie ma. Dzięki temu możemy w tym samym pliku umieścić samo "out.println" co zostanie udowodnione w poniższym przykładzie. Dlaczego mimo wszystko musi być "out" na początku? Gdyż "out" to kopia obiektu "PrintStream" i za jej pośrednictwem wywołujemy metody, w tym również nałogowo wykorzystywaną "println". To nie jest metoda statyczna, tylko zwykła publiczna metoda globalnej kopii klasy "PrintStream" o nazwie "out". Zapamiętane raz na zawsze? To przechodzimy do przykładu kodu źródłowego.

PRZYKŁAD KODU ŹRÓDŁOWEGO

Oto mały kodzik na podsumowanie:

KLASA "MAIN"

public class Main {
	public static void main(String[] args) {
		new StaticImport();
	}
}

KLASA "STATICIMPORT"

import static java. lang.Math.sqrt;
import static java. lang.System.out;

public class StaticImport {
	public StaticImport() {
		int n = 25;
		int squareRoot = (int)sqrt(n);

		out.println("Pierwiastek z liczby " + n + " wynosi " + squareRoot + ".");
	}
}

Jak widzicie, mamy dwa importy statyczne, jeden dla "System.out", drugi dla "Math". W przeciwieństwie do wyżej opisanej sytuacji, "Math" to sama w sobie klasa z globalnymi metodami i nie korzysta z żadnych pośrednich instancji. Dlatego w przypadku metod matematycznych, piszemy od razu "sqrt" bez żadnych przedrostków, zamiast ciągu "Math.sqrt".

WCALE TO NIE MUSI BYĆ ZALETA

Na koniec jeszcze jedno: dlaczego stwierdziłem że to może zarówno pomóc, jak i zaszkodzić? Bo to jest kwestia gustu połączona z przyzwyczajeniem. Wy możecie mieć chęć skracania tych długich nazw, ale ktoś kto będzie sprawdzał Wasz kod może chcieć usunąć import statyczny i zamienić na zapis tradycyjny. Po prostu można łatwo się przyzwyczaić do wielokrotnego pisania na piechotę i zdziwić się widząc takie skróty. Gdyby trafił się ktoś taki uparty, to możecie się jeszcze wybronić dorzucając instancję klasy "PrintStream", przypisać do niej "System.out" i za jej pomocą odwoływać się krócej do metod:

PrintStream ps = System.out;
		
ps.println("Tekst #1");
ps.println("Tekst #2");
ps.println("Tekst #3");

Ponadto, nie możecie przesadzać, gdyż może powstać kolizja nazw w przypadku, gdy dwie skrócone nazwy posiadają tę samą nazwę wykorzystywanej metody, bądź instancji.


Za uwagę dziękuję po raz enty. Import statyczny traktujcie jako alternatywę szybszego pisania i stosujcie ją naprawdę sporadycznie (jeśli nie w ogóle).

PODOBNE ARTYKUŁY