> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/exercicios-java/ud3-solucions/atributos-e-metodos-estaticos.md).

# Atributos e métodos estáticos

1. Contador Global

```java
public class ContadorGlobal {
    // Atributos estáticos
    private static int contador = 0;
    private static final String NOME_APLICACION = "MiApp 1.0";
    
    // Métodos estáticos
    
    // Incrementar o contador en 1
    public static void incrementar() {
        contador++;
    }
    
    // Resetear o contador a 0
    public static void resetear() {
        contador = 0;
    }
    
    // Obter o valor actual do contador
    public static int getValor() {
        return contador;
    }
    
    // Mostrar información do contador
    public static void mostrarInfo() {
        System.out.println(NOME_APLICACION + " - Contador actual: " + contador);
    }
}
```

```java
public class App {
    public static void main(String[] args) {
        System.out.println("=== PROBA DA CLASE CONTADORGLOBAL ===");
        System.out.println();
        
        // Mostrar información inicial
        System.out.println("Estado inicial:");
        ContadorGlobal.mostrarInfo();
        System.out.println();
        
        // Probar incrementar varias veces
        System.out.println("Incrementando o contador...");
        ContadorGlobal.incrementar();
        System.out.println("Despois do primeiro incremento:");
        ContadorGlobal.mostrarInfo();
        
        ContadorGlobal.incrementar();
        ContadorGlobal.incrementar();
        System.out.println("Despois de dous incrementos máis:");
        ContadorGlobal.mostrarInfo();
        
        // Probar getValor()
        System.out.println("\nObtendo valor con getValor():");
        int valorActual = ContadorGlobal.getValor();
        System.out.println("Valor actual: " + valorActual);
        System.out.println();
        
        // Probar resetear()
        System.out.println("Resetando o contador...");
        ContadorGlobal.resetear();
        System.out.println("Despois do reset:");
        ContadorGlobal.mostrarInfo();
        System.out.println();
        
        // Máis operacions
        System.out.println("Realizando máis operacions:");
        for (int i = 0; i < 5; i++) {
            ContadorGlobal.incrementar();
        }
        ContadorGlobal.mostrarInfo();
        
        // Verificar que non se pode instanciar (comentado porque daría error)
        /*
        // Esto daría error de compilación:
        // ContadorGlobal contador = new ContadorGlobal();
        */
        
        System.out.println("\n=== FIN DA PROBA ===");
    }
}
```

2. Productos

```java
public class Producto {
    // Atributos de instancia
    private String nome;
    private double prezo;
    
    // Atributos de clase (estáticos)
    private static int totalProductos = 0;
    private static final double IVA = 0.21; // 21% constante
    
    // Constructor con todos os atributos
    public Producto(String nome, double prezo) {
        this.nome = nome;
        this.prezo = prezo;
        incrementarTotalProductos();
    }
    
    // Constructor só con nome (prezo por defecto 10€)
    public Producto(String nome) {
        this(nome, 10.0);
    }
    
    // Getters
    public String getNome() {
        return nome;
    }
    
    public double getPrezo() {
        return prezo;
    }
    
    // Setters
    public void setNome(String nome) {
        this.nome = nome;
    }
    
    public void setPrezo(double prezo) {
        this.prezo = prezo;
    }
    
    // Método toString
    @Override
    public String toString() {
        return "Producto: " + nome + " | Prezo: " + prezo + "€";
    }
    
    // Método para calcular prezo con IVA
    public double calculaPrezoConIva() {
        return prezo * (1 + IVA);
    }
    
    // Métodos de clase (estáticos)
    public static void incrementarTotalProductos() {
        totalProductos++;
    }
    
    public static int getTotalProductos() {
        return totalProductos;
    }
    
    // Método estático para obter o IVA (opcional)
    public static double getIVA() {
        return IVA;
    }
}
```

```java
public class App {
    public static void main(String[] args) {
        System.out.println("=== APLICACIÓN DE XESTIÓN DE PRODUCTOS ===");
        System.out.println();
        
        System.out.println("Estado inicial:");
        System.out.println("Total productos creados: " + Producto.getTotalProductos());
        System.out.println("IVA: " + (Producto.getIVA() * 100) + "%");
        System.out.println();
        
        // Crear primeiro producto (Pan) con constructor completo
        System.out.println("1. Creando producto PAN (constructor completo):");
        Producto pan = new Producto("Pan", 1.20);
        System.out.println(pan.toString());
        System.out.println("Prezo con IVA: " + String.format("%.2f", pan.calculaPrezoConIva()) + "€");
        System.out.println("Total productos agora: " + Producto.getTotalProductos());
        System.out.println();
        
        // Crear segundo producto (Leite) con constructor simplificado
        System.out.println("2. Creando producto LEITE (constructor só con nome):");
        Producto leite = new Producto("Leite");
        System.out.println(leite.toString());
        System.out.println("Prezo con IVA: " + String.format("%.2f", leite.calculaPrezoConIva()) + "€");
        System.out.println("Total productos agora: " + Producto.getTotalProductos());
        System.out.println();
        
        // Resumen final
        System.out.println("=== RESUMEN FINAL ===");
        System.out.println("Produto 1:");
        System.out.println("  " + pan.toString());
        System.out.println("  Prezo con IVA: " + String.format("%.2f", pan.calculaPrezoConIva()) + "€");
        
        System.out.println("\nProduto 2:");
        System.out.println("  " + leite.toString());
        System.out.println("  Prezo con IVA: " + String.format("%.2f", leite.calculaPrezoConIva()) + "€");
        
        System.out.println("\nTotal de productos na clase: " + Producto.getTotalProductos());
        System.out.println("IVA aplicado: " + (Producto.getIVA() * 100) + "%");
        
        // Probar cambio de prezo nun produto
        System.out.println("\n=== PROBA DE MODIFICACIÓN ===");
        System.out.println("Cambiando prezo do Leite a 1.50€:");
        leite.setPrezo(1.50);
        System.out.println("Novo prezo do Leite: " + leite.getPrezo() + "€");
        System.out.println("Novo prezo con IVA: " + String.format("%.2f", leite.calculaPrezoConIva()) + "€");
        
        // Crear un terceiro produto para verificar o contador
        System.out.println("\nCreando terceiro produto:");
        Producto queixo = new Producto("Queixo", 5.75);
        System.out.println(queixo.toString());
        System.out.println("Total FINAL de productos: " + Producto.getTotalProductos());
    }
}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/exercicios-java/ud3-solucions/atributos-e-metodos-estaticos.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
