Statische Methoden
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 16 von 87.
Genauso wie statische Variablen zur Klasse gehören und nicht zu Instanzen, gehören auch statische Methoden zur Klasse selbst. Sie können sie aufrufen, ohne ein Objekt zu erstellen.
Deklarieren Sie eine statische Methode, indem Sie das Schlüsselwort static hinzufügen:
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;
}
}
// Aufruf ohne Erstellung eines Objekts
int sum = MathHelper.add(5, 3); // 8
int product = MathHelper.multiply(4, 2); // 8Statische Methoden haben eine wichtige Einschränkung: sie können nicht direkt auf Instanzvariablen oder Instanzmethoden zugreifen. Da statische Methoden ohne ein Objekt existieren, gibt es keine this-Referenz, mit der man arbeiten könnte.
public class Counter {
private int count; // Instanzvariable
private static int total; // Statische Variable
public static void incrementTotal() {
total++; // OK - Zugriff auf statische Variable
// count++; // Fehler! Zugriff auf Instanzvariable nicht möglich
}
}Statische Methoden sind ideal für Hilfsoperationen, die nicht vom Objektzustand abhängen – denken Sie an Methoden wie Math.sqrt() oder Integer.parseInt(). Sie bieten Funktionen, die eher auf Klassenebene als für einzelne Objekte sinnvoll sind.
Aufgabe
EinfachLassen Sie uns eine StringUtils-Hilfsklasse erstellen, die hilfreiche Methoden zur String-Manipulation bereitstellt, ohne dass Objekte erstellt werden müssen – perfekt, um statische Methoden zu demonstrieren!
Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:
StringUtils.java: Erstellen Sie eine Hilfsklasse mit statischen Methoden, die gängige String-Operationen ausführen:- Eine statische Methode
countVowels(String text), die die Anzahl der Vokale (a, e, i, o, u – sowohl Groß- als auch Kleinschreibung) in der angegebenen Zeichenfolge zurückgibt - Eine statische Methode
reverse(String text), die die Zeichenfolge umgekehrt zurückgibt - Eine statische Methode
isPalindrome(String text), dietruezurückgibt, wenn die Zeichenfolge vorwärts und rückwärts gleich gelesen wird (unabhängig von der Groß-/Kleinschreibung), andernfallsfalse
- Eine statische Methode
Main.java: Verwenden Sie Ihre Hilfsklasse, um eine Zeichenfolge zu verarbeiten. Sie erhalten eine Eingabe: eine Textzeichenfolge. Rufen Sie jede statische Methode direkt über den Klassennamen auf und geben Sie drei Zeilen aus:Vowels: [count]Reversed: [reversed string]Palindrome: trueoderPalindrome: false
Sie erhalten eine Eingabe: eine zu analysierende Textzeichenfolge.
Denken Sie daran, dass statische Methoden über den Klassennamen aufgerufen werden (wie StringUtils.countVowels(text)), anstatt zuerst eine Instanz zu erstellen. Dies macht Hilfsklassen praktisch für Operationen, die keinen Zustand zwischen den Aufrufen beibehalten müssen.
Spickzettel
Statische Methoden gehören zur Klasse selbst und können aufgerufen werden, ohne ein Objekt zu erstellen. Deklarieren Sie diese mit dem Schlüsselwort static:
public class MathHelper {
public static int add(int a, int b) {
return a + b;
}
}
// Aufruf ohne Erstellung eines Objekts
int sum = MathHelper.add(5, 3); // 8Wichtige Einschränkung: Statische Methoden können nicht direkt auf Instanzvariablen oder Instanzmethoden zugreifen, da sie ohne ein Objekt existieren und keine this-Referenz haben:
public class Counter {
private int count; // Instanzvariable
private static int total; // Statische Variable
public static void incrementTotal() {
total++; // OK - Zugriff auf statische Variable
// count++; // Fehler! Zugriff auf Instanzvariable nicht möglich
}
}Statische Methoden sind ideal für Hilfsoperationen, die nicht vom Objektzustand abhängen, wie Math.sqrt() oder Integer.parseInt().
Probier es selbst
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine();
// TODO: Verwenden Sie statische Methoden von StringUtils, um den Text zu analysieren
// Rufen Sie StringUtils.countVowels(text) auf, um die Anzahl der Vokale zu erhalten
// Rufen Sie StringUtils.reverse(text) auf, um die umgekehrte Zeichenfolge zu erhalten
// Rufen Sie StringUtils.isPalindrome(text) auf, um zu prüfen, ob es ein Palindrom ist
// TODO: Geben Sie die Ergebnisse in folgendem Format aus:
// Vowels: [Anzahl]
// Reversed: [umgekehrte Zeichenfolge]
// Palindrome: true/false
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenFelder (Attribute)Konstruktor-MethodeKonstruktor-ÜberladungRückblick – Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (extends)Das super-SchlüsselwortMethoden überschreiben (@Override)Konstruktor-VerkettungDie Object-KlasseEinfache & mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-InterfaceZusammenfassung – Benutzerdefiniertes Sortieren2Zugriffsmodifikatoren & Kapselung
Überblick über ZugriffsebenenGetter- und Setter-MethodenInformation HidingDas final-SchlüsselwortRückblick – Bankkonto-Manager5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenZusammenfassung – Formenrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, geschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Sealed Classes (Java 17+)11Design Patterns Teil 1
Einführung in Design PatternsSingleton-PatternFactory-PatternBuilder-PatternObserver-PatternStrategy-Pattern14Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung3Klasseneigenschaften & Statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Zusammenfassung – Zähler & Utility6Interfaces & Abstrakte Klassen
Einführung in InterfacesInterfaces implementierenImplementierung mehrerer InterfacesDefault- & statische Methoden in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesZusammenfassung - Zahlungssystem