Metodi statici
Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 16 di 87.
Proprio come le variabili statiche appartengono alla classe anziché alle istanze, anche i metodi statici appartengono alla classe stessa. Puoi chiamarli senza creare un oggetto.
Dichiara un metodo statico aggiungendo la parola chiave 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;
}
}
// Chiama senza creare un oggetto
int sum = MathHelper.add(5, 3); // 8
int product = MathHelper.multiply(4, 2); // 8I metodi statici hanno una limitazione importante: non possono accedere direttamente alle variabili o ai metodi di istanza. Poiché i metodi statici esistono senza un oggetto, non c'è alcun riferimento a this con cui lavorare.
public class Counter {
private int count; // Variabile di istanza
private static int total; // Variabile statica
public static void incrementTotal() {
total++; // OK - accesso alla variabile statica
// count++; // Errore! Impossibile accedere alla variabile di istanza
}
}I metodi statici sono ideali per le operazioni di utilità che non dipendono dallo stato dell’oggetto: pensa a metodi come Math.sqrt() o Integer.parseInt(). Forniscono funzionalità che hanno senso a livello di classe anziché per i singoli oggetti.
Sfida
FacileCreiamo una classe di utilità StringUtils che fornisce metodi utili per manipolare le stringhe senza dover creare oggetti: perfetta per mostrare i metodi statici!
Creerai due file per organizzare il codice:
StringUtils.java: crea una classe di utilità con metodi statici che eseguono operazioni comuni sulle stringhe:- Un metodo statico
countVowels(String text)che restituisce il numero di vocali (a, e, i, o, u, sia maiuscole che minuscole) presenti nella stringa data - Un metodo statico
reverse(String text)che restituisce la stringa invertita - Un metodo statico
isPalindrome(String text)che restituiscetruese la stringa si legge allo stesso modo in avanti e all'indietro (senza distinzione tra maiuscole e minuscole),falsealtrimenti
- Un metodo statico
Main.java: usa la classe di utilità per elaborare una stringa. Riceverai un input: una stringa di testo. Chiama ciascun metodo statico direttamente tramite il nome della classe e stampa tre righe:Vowels: [count]Reversed: [reversed string]Palindrome: trueoppurePalindrome: false
Riceverai un input: una stringa di testo da analizzare.
Ricorda che i metodi statici si chiamano usando il nome della classe (come StringUtils.countVowels(text)) invece di creare prima un'istanza. Questo rende le classi di utilità pratiche per le operazioni che non devono mantenere uno stato tra una chiamata e l'altra.
Provalo tu
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine();
// TODO: Usa i metodi statici di StringUtils per analizzare il testo
// Chiama StringUtils.countVowels(text) per ottenere il numero di vocali
// Chiama StringUtils.reverse(text) per ottenere la stringa invertita
// Chiama StringUtils.isPalindrome(text) per verificare se il testo è palindromo
// TODO: Stampa i risultati nel seguente formato:
// Vocali: [conteggio]
// Invertita: [stringa invertita]
// Palindrome: true/false
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione a oggetti
File esterniIntroduzione alla programmazione a oggettiClassi e oggettiLa parola chiave thisMetodiCampi (attributi)Metodo costruttoreSovraccarico dei costruttoriRipasso - Calcolatrice semplice4Ereditarietà
Ereditarietà di base (extends)La parola chiave superSovrascrittura dei metodi (@Override)Concatenamento dei costruttoriLa classe ObjectEreditarietà singola e multilivelloPerché non esiste l'ereditarietà multipla delle classiRiepilogo: gerarchia dei dipendenti7Metodi speciali e classe Object
Metodo toString()equals() e hashCode()Metodo clone()compareTo() e ComparableInterfaccia ComparatorRiepilogo - Ordinamento personalizzato2Modificatori di accesso e incapsulamento
Panoramica dei livelli di accessoMetodi getter e setterNascondimento delle informazioniLa parola chiave finalRiepilogo - Gestore di conti bancari5Polimorfismo
Nozioni di base sull'overloading dei metodiOverride dei metodi (a runtime)Upcasting e downcastingL'operatore instanceofClassi e metodi astrattiRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàAggregazione vs composizioneClassi interne, annidate e anonimeEnum e metodi degli EnumRecord (Java 16+)Classi sealed (Java 17+)11Modelli di progettazione Parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern BuilderPattern ObserverPattern Strategy3Proprietà di classe e membri statici
Variabili di istanza e staticheMetodi staticiBlocchi staticiCostanti (static final)Riepilogo - Contatore e utility6Interfacce e classi astratte
Introduzione alle interfacceImplementazione delle interfacceImplementazione di più interfacceMetodi default e static nelle interfacceClassi astratte e interfacce a confrontoInterfacce funzionaliRiepilogo: sistema di pagamento9Tipi generici
Introduzione ai tipi genericiClassi genericheMetodi genericiParametri di tipo con limitiCaratteri jolly (?, extends, super)Riepilogo - Contenitore generico12Modelli di progettazione – Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern IteratorEsercitati da solo: Compilatore Java online