Czym jest Java?
Java to obiektowy język programowania ogólnego przeznaczenia, wykorzystywany do tworzenia aplikacji desktopowych, webowych, mobilnych (m.in. Android) oraz systemów backendowych. To jeden z najczęściej egzaminowanych języków w kwalifikacji INF.04 (Projektowanie, programowanie i testowanie aplikacji).

Najważniejsze cechy Javy:
- jest językiem obiektowym (OOP),
- kod źródłowy zapisuje się w plikach
.java, - jest kompilowany do bytecode'u (kod pośredni
.class), a nie do kodu maszynowego, - bytecode uruchamiany jest przez JVM — Java Virtual Machine,
- jest wieloplatformowy — ten sam plik
.classdziała wszędzie, gdzie jest JVM (Windows, Linux, macOS, Android), - jest silnie typowany — każda zmienna ma jawnie określony typ,
- pamięcią zarządza garbage collector.
Java a kompilacja — bytecode kontra kod maszynowy
W odróżnieniu od języków takich jak C czy C++, w których kod musi zostać skompilowany do kodu maszynowego konkretnej architektury procesora przed uruchomieniem, Java działa inaczej:
- kod
.javajest kompilowany do bytecode'u (.class), - bytecode jest interpretowany / kompilowany w locie (JIT) przez JVM podczas wykonania.
Dzięki temu jeden plik .class działa na każdej platformie, na której zainstalowano JVM — to filozofia „write once, run anywhere".
Środowiska programistyczne (IDE)
Do programowania w Javie najczęściej wykorzystuje się:
- IntelliJ IDEA — popularne IDE firmy JetBrains,
- Eclipse — rozbudowane, darmowe środowisko,
- NetBeans — IDE silnie kojarzone z Javą i projektami edukacyjnymi,
- Android Studio — IDE do aplikacji mobilnych na Android (oparte na IntelliJ).
Jeżeli w pytaniu pojawiają się nazwy IntelliJ IDEA, Eclipse, NetBeans — z dużym prawdopodobieństwem chodzi o Javę. Android Studio też jest oparte na Javie (i Kotlinie). Visual Studio kojarzy się głównie z C# i platformą .NET.
Przykład prostego programu
public class Main {
public static void main(String[] args) {
System.out.println("Witaj, Java!");
}
}
Metoda main jest punktem startowym programu konsolowego w Javie. Sygnatura public static void main(String[] args) jest stała — żeby program się uruchomił, musi mieć dokładnie taką metodę.
Komentarze w Javie
Java obsługuje trzy rodzaje komentarzy:
// komentarz jednoliniowy
/* komentarz
wieloliniowy */
/**
* komentarz dokumentacyjny (Javadoc)
*/
Komentarz wieloliniowy oznacza się znakami /* … */ — to ta sama składnia co w C, C++ i wielu innych językach.
Typy danych
Java jest silnie typowana. Najczęściej używane typy podstawowe (prymitywne) to:
| Typ | Co przechowuje | Przykład |
|---|---|---|
int | liczby całkowite | int wiek = 12; |
short | krótkie całkowite | short s = 100; |
long | długie całkowite | long l = 1_000_000L; |
float | liczby rzeczywiste (zmiennoprzecinkowe) | float x = 3.14f; |
double | liczby rzeczywiste wyższej precyzji | double d = 3.14; |
char | pojedynczy znak w apostrofach | char plec = 'K'; |
boolean | wartość logiczna true / false | boolean ok = true; |
Dodatkowo String (obiekt, nie typ prymitywny) — łańcuch znaków w cudzysłowach.
Pojedynczy znak — typ char
Aby przechować pojedynczy znak (np. 'T', 'K', 'A') używa się typu char:
int zm1;
float zm2;
char zm3; // tu można przechować 'T'
boolean zm4;
Znak zapisuje się w apostrofach ('T'), a nie cudzysłowach ("T" to już String).
Typowa deklaracja w Javie
String imie = "Anna";
short wiek = 12;
int i = 0;
char plec = 'K';
boolean jestUczniem = true;
Pole formularza typu „Dostępne środki" (wartość rzeczywista, np. 1234.56) najlepiej obsłużyć typem double lub float — typami zmiennoprzecinkowymi.
Tablice
Tablicę w Javie deklaruje się przez typ[] nazwa = new typ[rozmiar]:
int[] tablica = new int[10];
Wypełnianie tablicy w pętli for
Typowy fragment kodu wypełniający tablicę:
int[] tablica = new int[10];
int j = 2;
for (int i = 0; i < tablica.length; i++) {
tablica[i] = j;
j += 2;
}
Tablica zostaje wypełniona kolejnymi liczbami parzystymi: 2, 4, 6, 8, 10, 12, 14, 16, 18, 20. To popularny wzorzec — pętla for z licznikiem + wartość rosnąca z określonym krokiem.
Wyjątki — try / catch
Java wymusza obsługę wyjątków dla wielu operacji. Sekcja, która obsługuje wyjątek wygenerowany przez aplikację, znajduje się w bloku catch (po try):
try {
int wynik = 10 / 0; // może rzucić wyjątek
} catch (ArithmeticException e) {
System.out.println("Błąd: " + e.getMessage());
}
Najczęstsze wyjątki na egzaminie
ArrayIndexOutOfBoundsException — występuje, gdy następuje próba dostępu do elementu tablicy, którego indeks jest poza dopuszczalnym zakresem (mniejszy od 0 lub większy/równy długości tablicy). Przykład:
int[] t = new int[5];
t[10] = 1; // ArrayIndexOutOfBoundsException
ArithmeticException: / by zero — pojawia się przy próbie dzielenia przez zero (dla liczb całkowitych). Komunikat:
Exception in thread "main" java.lang.ArithmeticException: / by zero
dotyczy kodu, który wykonał dzielenie typu int / 0.
OOP w Javie
Java jest językiem w pełni obiektowym — cały kod musi znaleźć się w klasach. Wszystkie filary OOP są dostępne natywnie. Szczegóły opisuje hasło klasa i obiekt oraz programowanie obiektowe.
Dziedziczenie — słowo kluczowe extends
W Javie dziedziczenie zapisuje się słowem extends:
public class Owoc { }
public class Truskawka extends Owoc { }
Klasa Truskawka dziedziczy po klasie Owoc — to jeden z fundamentów OOP.
Klasa abstrakcyjna i konkretna implementacja
Klasę abstrakcyjną oznacza się słowem abstract. Klasa pochodna musi zaimplementować wszystkie odziedziczone metody abstrakcyjne. Przykład:
abstract class Figura {
abstract double pole();
}
class Prostokat extends Figura {
double a, b;
Prostokat(double a, double b) {
this.a = a;
this.b = b;
}
@Override
double pole() {
return a * b;
}
}
Minimalna implementacja Prostokat musi zawierać konstruktor oraz nadpisaną metodę abstrakcyjną pole().
GUI — okna i kontrolki (Swing/AWT)
Klasyczne aplikacje desktopowe w Javie tworzy się przy użyciu bibliotek Swing (lub starszej AWT). Główne okno aplikacji to obiekt klasy JFrame.
class Okno extends JFrame
Zapis:
public class Okno extends JFrame {
public Okno() {
// konfiguracja okna i kontrolek
}
}
oznacza, że klasa Okno dziedziczy po JFrame, czyli jest oknem aplikacji. Dziedziczenie pozwala dostać „za darmo" obsługę paska tytułu, zamykania, rozmiaru itd.
Najczęstsze kontrolki Swing
JTextField— pole tekstowe (np. wpisywanie kwoty „Dostępne środki"),JLabel— etykieta,JButton— przycisk,JCheckBox— pole wyboru,JComboBox— lista rozwijana,JRadioButton— przycisk opcji,JPanel— kontener grupujący inne kontrolki.
W pytaniach z obrazkiem (strzałka na pole jednowierszowego wpisywania tekstu) szukaną kontrolką jest najczęściej JTextField.
Element zaznaczony w kodzie extends JFrame / WPF
Jeśli w pytaniu pojawia się obok siebie kod Java (extends JFrame) i WPF/XAML (<Window ...>), wyróżnione elementy mają na celu utworzenie okna głównego aplikacji — w obu technologiach.
Wyrażenia regularne — Pattern.compile
Java obsługuje wyrażenia regularne przez klasę java.util.regex.Pattern i metodę compile:
Pattern p = Pattern.compile("^abc");
Matcher m = p.matcher(tekst);
Najczęstsze symbole:
| Symbol | Znaczenie |
|---|---|
^ | początek linii / ciągu |
$ | koniec linii / ciągu |
. | dowolny znak |
* | zero lub więcej powtórzeń |
+ | jeden lub więcej powtórzeń |
\d | cyfra |
\s | biały znak |
Aby znaleźć dopasowanie na początku linii, używa się symbolu ^.
Algorytm odwracania ciągu znaków
Pętla iterująca od ostatniego znaku do pierwszego i dopisująca znaki do nowego stringa to klasyczny algorytm odwracania ciągu:
public static String fun1(String str) {
String output = "";
for (var i = (str.length() - 1); i >= 0; i--) {
output += str.charAt(i);
}
return output;
}
Dla wejścia "abc" metoda zwróci "cba". Klucz: pętla od length-1 do 0 + sklejanie znaków po jednym → odwracanie stringa.
Częste pomyłki — nie myl tego!
- Java ≠ JavaScript — to dwa różne języki, o podobnej nazwie i zupełnie innej składni/zastosowaniach.
- Java kompiluje się do bytecode'u, nie do kodu maszynowego — kod maszynowy generują m.in. C/C++.
char≠String—charto pojedynczy znak w apostrofach ('T'),Stringto tekst w cudzysłowach ("T").ArrayIndexOutOfBoundsException≠NullPointerException— pierwszy to zły indeks tablicy, drugi to próba użycia obiektu, który ma wartośćnull./* */≠//—/* */to komentarz wieloliniowy,//jednoliniowy.extends JFrameto dziedziczenie, a nie tylko „import" okna — klasa staje się oknem.- IntelliJ/Eclipse/NetBeans → Java, Android Studio → Java/Kotlin (Android), Visual Studio → C#/.NET — typowe skojarzenia w pytaniach.
^w regex to początek linii, nie negacja (negacja występuje w klasie znaków:[^abc]).
Najważniejsze do zapamiętania
Java to obiektowy język programowania kompilowany do bytecode'u uruchamianego przez JVM — dzięki temu jest wieloplatformowy. Klasycznie wybierane IDE to IntelliJ IDEA, Eclipse, NetBeans (mobilnie — Android Studio). Typ char przechowuje pojedynczy znak ('T'), double/float — liczby rzeczywiste. Komentarz wieloliniowy: /* */. Tablica poza zakresem rzuca ArrayIndexOutOfBoundsException, dzielenie przez zero — ArithmeticException. Wyjątki obsługuje się w bloku catch. GUI w Swing buduje się przez JFrame (class Okno extends JFrame) i kontrolki typu JTextField. Dziedziczenie zapisuje się słowem extends.