O metodă de programare a computerului orientată pe obiect, care este declarată într-o clasă, dar care nu depinde de nicio instanțiere specială a acelei clase, se numește metodă statică. Majoritatea limbajelor de programare includ cuvântul cheie static în declarația unei metode pentru a face o metodă statică. Aceste metode aparțin strict clasei în care sunt conținute și nu oricărui obiect instanțiat din acea clasă. Ele sunt adesea denumite metode de clasă.
Numele literal al clasei este folosit în mod normal pentru a accesa o metodă statică în loc să se refere la ea cu numele unui obiect instanțiat. Este permis în Java să folosiți nume de obiecte pentru a face referire la aceste metode, dar este puternic descurajat. Dacă se folosește un nume de obiect, o persoană care citește codul poate confunda una dintre aceste metode cu o metodă de instanță.
Metodele statice sunt adesea folosite în clasele de utilitate care nu depind de variabilele de instanță dintr-o anumită clasă. Ele sunt, de asemenea, folosite atunci când un programator trebuie să acceseze metoda, dar nu este nevoie să instanțieze clasa în care este conținută. Clasele de utilitate nu sunt instanțiate în mod normal în obiecte. Ar fi neobișnuit ca o metodă de utilitate să aibă nevoie de modificarea informațiilor despre obiect. O metodă din clasa java.lang.math, cum ar fi pow(), ar fi un exemplu despre modul în care acest tip de metodă ar fi utilizat într-o clasă de utilitate.
Metodele de instanță pot accesa direct variabile de instanță, variabile statice, metode de instanță și metode statice. Metodele statice nu pot accesa direct variabilele de instanță și metodele de instanță. Datorită naturii metodelor de instanță care au acces mai bun la membrii clasei decât metodele statice, metodele de instanță sunt tipurile de metode utilizate în mod normal în clasele obișnuite.
Un dezavantaj major al metodelor statice apare în timpul moștenirii când se utilizează polimorfismul. Atâta timp cât metoda statică părinte nu este declarată finală, aceeași metodă statică copil poate fi codificată în clasa copil ca și cum ar fi fost suprascrisă. Acest lucru se numește tehnic ascundere în loc de suprascrie deoarece o metodă statică nu poate fi suprascrisă.
Când se folosește ascunderea, dacă metoda statică părinte este accesată folosind numele clasei, se va folosi metoda părinte. Dacă metoda static child suprascrisă este accesată folosind numele obiectului, va fi utilizată metoda child suprascrisă. Problema apare atunci când un obiect copil este ridicat ca părinte. În acest caz, un apel la metoda static child upcast va folosi metoda părinte în loc de metoda child așteptată. Cu polimorfism adevărat, metoda child ar fi cea activată după un upcast.