Java + VS Code • Exemplos práticos e exercícios
Prof. José Rodolfo Beluzo
public class Contador {
private static int totalObjetos = 0; // compartilhado
public Contador(){
totalObjetos++; // incrementa a cada novo objeto
}
public static int getTotalObjetos(){
return totalObjetos; // acesso estático
}
}
public class Main {
public static void main(String[] args) {
new Contador();
new Contador();
System.out.println("Objetos criados: " + Contador.getTotalObjetos());
}
}
public class Matematica {
public static int soma(int a, int b) { return a + b; }
public static double media(double... valores) {
double s = 0; for(double v: valores) s += v; return s/valores.length;
}
}
int r1 = Matematica.soma(3,4); // Classe.metodo
double m = Matematica.media(7.0, 8.5); // sem instanciar
Em tipos primitivos, final torna o valor imutável após a primeira atribuição.
//Final.java//
public class Final {
final int porta = 8080;
public void tentaAlterarFinal(){
//this.porta++;
}
}
///////////////////////
//App.java//
public class App {
public static void main(String[] args) throws Exception {
Final f = new Final();
System.out.println(f.porta);
//f.porta++;
}
}
public class Circulo {
public static final double PI = 3.141592653589793;
private double raio;
public Circulo(double raio) { this.raio = raio; }
public double area() { return PI * raio * raio; }
}
class Carro {
private final String modelo;
public Carro(String modelo) { this.modelo = modelo; }
public String getModelo() { return modelo; }
}
class Motorista {
private final String nome;
public Motorista(String nome) { this.nome = nome; }
// associação simples: o motorista usa um Carro passado por parâmetro (não o "possui")
public void dirigir(Carro c) {
System.out.println(nome + " está dirigindo o " + c.getModelo());
}
}
public class Ex1Associacao {
public static void main(String[] args) {
Carro carro = new Carro("Sedan X");
Motorista motorista = new Motorista("Alice");
motorista.dirigir(carro); // vínculo momentâneo/uso
}
}
import java.util.ArrayList;
import java.util.List;
class Livro {
private final String titulo;
public Livro(String titulo) { this.titulo = titulo; }
public String getTitulo() { return titulo; }
}
class Biblioteca {
private final String nome;
private final List acervo; // agregação: "todo/parte" fraca
public Biblioteca(String nome) {
this.nome = nome;
this.acervo = new ArrayList<>(); // inicializa a lista concreta
}
// recebe livros criados fora (ciclo de vida independente)
public void adicionarLivro(Livro livro) { acervo.add(livro); }
public void listar() {
System.out.println("Acervo da biblioteca " + nome + ":");
for (Livro l : acervo) System.out.println("- " + l.getTitulo());
}
}
public class Ex2Agregacao {
public static void main(String[] args) {
// livros existem independentemente
Livro l1 = new Livro("POO em Java");
Livro l2 = new Livro("Estruturas de Dados");
Biblioteca b = new Biblioteca("Central");
b.adicionarLivro(l1);
b.adicionarLivro(l2);
b.listar();
// Mesmo se a biblioteca 'sumir', l1 e l2 ainda fazem sentido (agregação).
}
}
public class Motor {
private int potencia;
public Motor(int potencia){ this.potencia = potencia; }
public void ligar(){ System.out.println("Motor " + potencia + "cv ligado"); }
}
public class Carro {
private final Motor motor; // parte essencial
public Carro(){ this.motor = new Motor(100); } // cria e gerencia
public void ligar(){ motor.ligar(); System.out.println("Carro ligado!"); }
}
public class Processador { public void iniciar(){ System.out.println("CPU pronta"); } }
public class Memoria { public void carregar(){ System.out.println("Memória ok"); } }
public class Computador {
private final Processador cpu; // composição
private final Memoria ram; // composição
public Computador(){ this.cpu = new Processador(); this.ram = new Memoria(); }
public void ligar(){ cpu.iniciar(); ram.carregar(); System.out.println("Computador ligado!"); }
}