Metody statyczne
Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 16 z 87.
Podobnie jak zmienne statyczne należą do klasy, a nie do jej instancji, metody statyczne również należą do samej klasy. Możesz je wywoływać bez tworzenia obiektu.
Zadeklaruj metodę statyczną, dodając słowo kluczowe static:
public class MathHelper {
public static int add(int a, int b) {
return a + b;
}
public static int multiply(int a, int b) {
return a * b;
}
}
// Wywołaj bez tworzenia obiektu
int sum = MathHelper.add(5, 3); // 8
int product = MathHelper.multiply(4, 2); // 8Metody statyczne mają jedno ważne ograniczenie: nie mogą bezpośrednio uzyskiwać dostępu do zmiennych instancji ani metod instancji. Ponieważ metody statyczne istnieją bez obiektu, nie ma odwołania this, z którego mogłyby korzystać.
public class Counter {
private int count; // Zmienna instancji
private static int total; // Zmienna statyczna
public static void incrementTotal() {
total++; // OK - dostęp do zmiennej statycznej
// count++; // Błąd! Nie można uzyskać dostępu do zmiennej instancji
}
}Metody statyczne idealnie nadają się do operacji narzędziowych, które nie zależą od stanu obiektu — pomyśl o metodach takich jak Math.sqrt() czy Integer.parseInt(). Zapewniają funkcjonalność, która ma sens na poziomie klasy, a nie poszczególnych obiektów.
Wyzwanie
ŁatwyZbudujmy klasę narzędziową StringUtils, która udostępnia przydatne metody do manipulowania ciągami znaków bez konieczności tworzenia obiektów — idealną do zademonstrowania metod statycznych!
Utworzysz dwa pliki, aby uporządkować swój kod:
StringUtils.java: Utwórz klasę narzędziową z metodami statycznymi wykonującymi typowe operacje na ciągach znaków:- Metodę statyczną
countVowels(String text), która zwraca liczbę samogłosek (a, e, i, o, u — zarówno wielkich, jak i małych liter) w podanym ciągu znaków - Metodę statyczną
reverse(String text), która zwraca odwrócony ciąg znaków - Metodę statyczną
isPalindrome(String text), która zwracatrue, jeśli ciąg znaków czytany od przodu i od tyłu jest taki sam (bez rozróżniania wielkości liter), a w przeciwnym raziefalse
- Metodę statyczną
Main.java: Użyj swojej klasy narzędziowej, aby przetworzyć ciąg znaków. Otrzymasz jedno wejście: ciąg tekstowy. Wywołaj każdą metodę statyczną bezpośrednio przez nazwę klasy i wypisz trzy wiersze:Vowels: [count]Reversed: [reversed string]Palindrome: truelubPalindrome: false
Otrzymasz jedno wejście: ciąg tekstowy do analizy.
Pamiętaj, że metody statyczne wywołuje się za pomocą nazwy klasy (na przykład StringUtils.countVowels(text)), zamiast najpierw tworzyć jej instancję. Dzięki temu klasy narzędziowe są wygodne w przypadku operacji, które nie muszą zachowywać żadnego stanu między wywołaniami.
Spróbuj swoich sił
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine();
// TODO: Użyj metod statycznych StringUtils do analizy tekstu
// Wywołaj StringUtils.countVowels(text), aby uzyskać liczbę samogłosek
// Wywołaj StringUtils.reverse(text), aby uzyskać odwrócony tekst
// Wywołaj StringUtils.isPalindrome(text), aby sprawdzić, czy tekst jest palindromem
// TODO: Wypisz wyniki w formacie:
// Samogłoski: [liczba]
// Odwrócony tekst: [odwrócony tekst]
// Palindrome: true/false
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe thisMetodyPola (atrybuty)Metoda konstruktoraPrzeciążanie konstruktoraPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawy dziedziczenia (extends)Słowo kluczowe superPrzesłanianie metod (@Override)Łańcuch wywołań konstruktorówKlasa ObjectDziedziczenie jedno- i wielopoziomoweDlaczego Java nie obsługuje wielodziedziczenia klasPodsumowanie – hierarchia pracowników7Metody specjalne i klasa Object
Metoda toString()equals() i hashCode()Metoda clone()compareTo() i ComparableInterfejs ComparatorPodsumowanie — własne sortowanie10Obsługa wyjątków w programowaniu obiektowym
Hierarchia klas wyjątkówWłasne wyjątkiBłędy sprawdzane a niesprawdzaneWzorzec try-with-resourcesPodsumowanie – zweryfikowany użytkownik2Modyfikatory dostępu i enkapsulacja
Przegląd poziomów dostępuMetody pobierające i ustawiająceUkrywanie informacjiSłowo kluczowe finalPodsumowanie — menedżer kont bankowych5Polimorfizm
Podstawy przeciążania metodPrzesłanianie metod (w czasie wykonywania)Rzutowanie w górę i w dółOperator instanceofKlasy i metody abstrakcyjnePowtórka — kalkulator figur8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieAgregacja a kompozycjaKlasy wewnętrzne, zagnieżdżone i anonimoweEnumy i metody enumówRekordy (Java 16+)Klasy zapieczętowane (Java 17+)11Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec BuilderWzorzec ObserverWzorzec Strategy3Właściwości klas i składowe statyczne
Zmienne instancji a zmienne statyczneMetody statyczneBloki statyczneStałe (static final)Powtórka – Counter i Utility6Interfejsy i klasy abstrakcyjne
Wprowadzenie do interfejsówImplementowanie interfejsówImplementacja wielu interfejsówMetody domyślne i statyczne w interfejsieKlasy abstrakcyjne a interfejsyInterfejsy funkcyjnePodsumowanie — system płatnościPoćwicz samodzielnie: Kompilator Java online