Menu
Coddy logo textTech

Métodos estáticos

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 16 de 87.

Al igual que las variables estáticas pertenecen a la clase en lugar de a las instancias, los métodos estáticos también pertenecen a la propia clase. Puedes llamarlos sin crear un objeto.

Declara un método estático añadiendo la palabra clave 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;
    }
}

// Call without creating an object
int sum = MathHelper.add(5, 3);      // 8
int product = MathHelper.multiply(4, 2);  // 8

Los métodos estáticos tienen una restricción importante: no pueden acceder directamente a variables de instancia o métodos de instancia. Dado que los métodos estáticos existen sin un objeto, no hay una referencia this con la que trabajar.

public class Counter {
    private int count;              // Variable de instancia
    private static int total;       // Variable estática
    
    public static void incrementTotal() {
        total++;      // OK - accediendo a una variable estática
        // count++;   // ¡Error! No se puede acceder a una variable de instancia
    }
}

Los métodos estáticos son ideales para operaciones de utilidad que no dependen del estado del objeto; piense en métodos como Math.sqrt() o Integer.parseInt(). Proporcionan funcionalidad que tiene sentido a nivel de clase en lugar de para objetos individuales.

challenge icon

Desafío

Fácil

¡Vamos a construir una clase de utilidad StringUtils que proporcione métodos útiles de manipulación de cadenas sin necesidad de crear ningún objeto, lo cual es perfecto para demostrar los métodos estáticos!

Crearás dos archivos para organizar tu código:

  • StringUtils.java: Crea una clase de utilidad con métodos estáticos que realicen operaciones comunes de cadenas:
    • Un método estático countVowels(String text) que devuelva el número de vocales (a, e, i, o, u - tanto en mayúsculas como en minúsculas) en la cadena dada.
    • Un método estático reverse(String text) que devuelva la cadena invertida.
    • Un método estático isPalindrome(String text) que devuelva true si la cadena se lee igual de adelante hacia atrás que de atrás hacia adelante (insensible a mayúsculas y minúsculas), y false en caso contrario.
  • Main.java: Utiliza tu clase de utilidad para procesar una cadena. Recibirás una entrada: una cadena de texto. Llama a cada método estático directamente a través del nombre de la clase e imprime tres líneas:
    • Vowels: [count]
    • Reversed: [reversed string]
    • Palindrome: true o Palindrome: false

Recibirás una entrada: una cadena de texto para analizar.

Recuerda que los métodos estáticos se llaman utilizando el nombre de la clase (como StringUtils.countVowels(text)) en lugar de crear una instancia primero. Esto hace que las clases de utilidad sean convenientes para operaciones que no necesitan mantener ningún estado entre llamadas.

Hoja de referencia

Los métodos estáticos pertenecen a la propia clase y pueden llamarse sin crear un objeto. Decláralos usando la palabra clave static:

public class MathHelper {
    public static int add(int a, int b) {
        return a + b;
    }
}

// Llamada sin crear un objeto
int sum = MathHelper.add(5, 3);  // 8

Restricción importante: Los métodos estáticos no pueden acceder directamente a variables de instancia o métodos de instancia, ya que existen sin un objeto y no tienen referencia this:

public class Counter {
    private int count;              // Variable de instancia
    private static int total;       // Variable estática
    
    public static void incrementTotal() {
        total++;      // Correcto - accediendo a una variable estática
        // count++;   // ¡Error! No se puede acceder a una variable de instancia
    }
}

Los métodos estáticos son ideales para operaciones de utilidad que no dependen del estado del objeto, como Math.sqrt() o Integer.parseInt().

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String text = scanner.nextLine();
        
        // TODO: Usar los métodos estáticos de StringUtils para analizar el texto
        // Llamar a StringUtils.countVowels(text) para obtener el recuento de vocales
        // Llamar a StringUtils.reverse(text) para obtener la cadena invertida
        // Llamar a StringUtils.isPalindrome(text) para comprobar si es un palíndromo
        
        // TODO: Imprimir los resultados en el formato:
        // Vowels: [count]
        // Reversed: [reversed string]
        // Palindrome: true/false
        
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos