Guia essencial de Java em português para iniciantes. Conceitos fundamentais com exemplos práticos de programação orientada a objetos.
1// Comentários de uma linha começam com duas barras inclinadas 2 3/* 4 Comentários de múltiplas linhas usam barra-asterisco 5 e terminam com asterisco-barra 6*/ 7 8
1public class TiposDados { 2 public static void main(String[] args) { 3 // Byte - inteiro de 8 bits (-128 até 127) 4 byte idade = 25; 5 6 // Short - inteiro de 16 bits (-32,768 até 32,767) 7 short populacao = 10000; 8 9 // Integer - inteiro de 32 bits (padrão para números inteiros) 10 int salario = 50000; 11 12 // Long - inteiro de 64 bits (use 'L' no final) 13 long populacaoMundial = 8000000000L; 14 15 // Float - número em ponto flutuante de 32 bits (use 'f' no final) 16 float altura = 1.75f; 17 18 // Double - número em ponto flutuante de 64 bits (padrão) 19 double pi = 3.14159; 20 21 // Boolean - verdadeiro ou falso 22 boolean ativo = true; 23 boolean inativo = false; 24 25 // Character - um caractere Unicode de 16 bits 26 char letra = 'A'; 27 28 // String - sequência de caracteres 29 String nome = "João Silva"; 30 31 // Final - torna a variável imutável (constante) 32 final int VELOCIDADE_LUZ = 299792458; 33 34 // Concatenação de strings 35 String mensagem = nome + " tem " + idade + " anos"; 36 System.out.println(mensagem); 37 } 38}
1public class Operadores { 2 public static void main(String[] args) { 3 // Operadores aritméticos 4 int a = 10, b = 3; 5 6 System.out.println("Adição: " + (a + b)); // => 13 7 System.out.println("Subtração: " + (a - b)); // => 7 8 System.out.println("Multiplicação: " + (a * b)); // => 30 9 System.out.println("Divisão: " + (a / b)); // => 3 (inteira) 10 System.out.println("Módulo: " + (a % b)); // => 1 11 System.out.println("Potência: " + Math.pow(a, 2)); // => 100.0 12 13 // Operadores de comparação 14 System.out.println("10 == 10: " + (10 == 10)); // => true 15 System.out.println("10 != 5: " + (10 != 5)); // => true 16 System.out.println("10 > 5: " + (10 > 5)); // => true 17 System.out.println("10 <= 10: " + (10 <= 10)); // => true 18 19 // Operadores lógicos 20 System.out.println("true && false: " + (true && false)); // => false 21 System.out.println("true || false: " + (true || false)); // => true 22 System.out.println("!true: " + (!true)); // => false 23 24 // Operador ternário (condicional em uma linha) 25 int numero = 10; 26 String resultado = (numero > 5) ? "Maior que 5" : "Menor ou igual a 5"; 27 System.out.println(resultado); // => "Maior que 5" 28 29 // Incremento e decremento 30 int contador = 5; 31 System.out.println(contador++); // imprime 5, depois incrementa 32 System.out.println(++contador); // incrementa, depois imprime 7 33 System.out.println(contador--); // imprime 7, depois decrementa 34 System.out.println(--contador); // decrementa, depois imprime 5 35 } 36}
1import java.util.ArrayList; 2 3public class ArraysEColecoes { 4 public static void main(String[] args) { 5 // Array de tipo primitivo (tamanho fixo) 6 int[] numeros = new int[5]; 7 numeros[0] = 10; 8 numeros[1] = 20; 9 10 // Array inicializado com valores 11 String[] frutas = {"maçã", "banana", "laranja"}; 12 13 // Acessar elementos 14 System.out.println("Primeira fruta: " + frutas[0]); // => "maçã" 15 System.out.println("Tamanho do array: " + frutas.length); // => 3 16 17 // Iterar sobre array 18 for (int i = 0; i < frutas.length; i++) { 19 System.out.println(frutas[i]); 20 } 21 22 // For-each (mais simples) 23 for (String fruta : frutas) { 24 System.out.println(fruta); 25 } 26 27 // ArrayList - array dinâmico (tamanho variável) 28 ArrayList<String> cores = new ArrayList<>(); 29 cores.add("vermelho"); 30 cores.add("azul"); 31 cores.add("verde"); 32 33 // Acessar elemento 34 System.out.println("Primeira cor: " + cores.get(0)); // => "vermelho" 35 36 // Remover elemento 37 cores.remove(1); 38 39 // Tamanho 40 System.out.println("Quantidade de cores: " + cores.size()); 41 42 // Iterar sobre ArrayList 43 for (String cor : cores) { 44 System.out.println(cor); 45 } 46 } 47}
1public class EstruturasControle { 2 public static void main(String[] args) { 3 // Condicional if/else 4 int idade = 18; 5 6 if (idade >= 18) { 7 System.out.println("Você é maior de idade"); 8 } else if (idade >= 13) { 9 System.out.println("Você é adolescente"); 10 } else { 11 System.out.println("Você é criança"); 12 } 13 14 // Switch 15 int dia = 3; 16 String nomeDia; 17 18 switch (dia) { 19 case 1: 20 nomeDia = "Segunda"; 21 break; 22 case 2: 23 nomeDia = "Terça"; 24 break; 25 case 3: 26 nomeDia = "Quarta"; 27 break; 28 default: 29 nomeDia = "Outro dia"; 30 } 31 System.out.println("Dia: " + nomeDia); 32 33 // Loop while 34 int contador = 0; 35 while (contador < 3) { 36 System.out.println("Contador: " + contador); 37 contador++; 38 } 39 40 // Loop do-while (sempre executa pelo menos uma vez) 41 int i = 0; 42 do { 43 System.out.println("i = " + i); 44 i++; 45 } while (i < 2); 46 47 // Loop for 48 for (int j = 0; j < 5; j++) { 49 System.out.println("j = " + j); 50 } 51 } 52}
1public class Metodos { 2 3 // Método simples sem parâmetros 4 public static void saudacao() { 5 System.out.println("Olá!"); 6 } 7 8 // Método com parâmetros 9 public static void saudar(String nome) { 10 System.out.println("Olá, " + nome + "!"); 11 } 12 13 // Método com retorno 14 public static int somar(int a, int b) { 15 return a + b; 16 } 17 18 // Método com múltiplos parâmetros 19 public static double calcularMedia(double nota1, double nota2, double nota3) { 20 return (nota1 + nota2 + nota3) / 3; 21 } 22 23 // Método com parâmetros variáveis (varargs) 24 public static int somarMultiplos(int... numeros) { 25 int total = 0; 26 for (int num : numeros) { 27 total += num; 28 } 29 return total; 30 } 31 32 // Método void (sem retorno) 33 public static void imprimirSequencia(int inicio, int fim) { 34 for (int i = inicio; i <= fim; i++) { 35 System.out.print(i + " "); 36 } 37 System.out.println(); 38 } 39 40 public static void main(String[] args) { 41 saudacao(); // => "Olá!" 42 saudar("Maria"); // => "Olá, Maria!" 43 System.out.println(somar(5, 3)); // => 8 44 System.out.println(somarMultiplos(1, 2, 3, 4, 5)); // => 15 45 } 46}
1public class Veiculo { 2 // Atributos (propriedades) 3 private String marca; 4 private String modelo; 5 private int ano; 6 protected int velocidade; // acessível em subclasses 7 public String cor; // acessível em qualquer lugar 8 9 // Construtor padrão (sem parâmetros) 10 public Veiculo() { 11 this.marca = "Genérico"; 12 this.modelo = "Modelo X"; 13 this.ano = 2020; 14 this.velocidade = 0; 15 this.cor = "Branco"; 16 } 17 18 // Construtor com parâmetros 19 public Veiculo(String marca, String modelo, int ano) { 20 this.marca = marca; 21 this.modelo = modelo; 22 this.ano = ano; 23 this.velocidade = 0; 24 } 25 26 // Getters (métodos para obter valores) 27 public String getMarca() { 28 return marca; 29 } 30 31 public int getAno() { 32 return ano; 33 } 34 35 // Setters (métodos para definir valores) 36 public void setMarca(String marca) { 37 this.marca = marca; 38 } 39 40 public void setAno(int ano) { 41 if (ano > 1900) { 42 this.ano = ano; 43 } 44 } 45 46 // Método de instância 47 public void acelerar(int incremento) { 48 velocidade += incremento; 49 System.out.println("Velocidade agora é: " + velocidade + " km/h"); 50 } 51 52 // Método sobrescrito (override) 53 @Override 54 public String toString() { 55 return marca + " " + modelo + " (" + ano + ")"; 56 } 57 58 public static void main(String[] args) { 59 // Criar instância (objeto) 60 Veiculo carro = new Veiculo("Toyota", "Corolla", 2022); 61 62 System.out.println(carro); // => "Toyota Corolla (2022)" 63 System.out.println(carro.getMarca()); // => "Toyota" 64 65 carro.acelerar(50); // => "Velocidade agora é: 50 km/h" 66 carro.acelerar(30); // => "Velocidade agora é: 80 km/h" 67 } 68}
1// Classe pai (superclasse) 2public class Animal { 3 protected String nome; 4 5 public Animal(String nome) { 6 this.nome = nome; 7 } 8 9 public void fazerSom() { 10 System.out.println("Som genérico de animal"); 11 } 12 13 public void comer() { 14 System.out.println(nome + " está comendo"); 15 } 16} 17 18// Classe filha (subclasse) 19public class Cachorro extends Animal { 20 21 public Cachorro(String nome) { 22 super(nome); // chama construtor da classe pai 23 } 24 25 // Sobrescrita de método (override) 26 @Override 27 public void fazerSom() { 28 System.out.println(nome + " faz: Au au!"); 29 } 30 31 // Método específico da classe Cachorro 32 public void buscar() { 33 System.out.println(nome + " buscou a bolinha!"); 34 } 35} 36 37// Outra classe filha 38public class Gato extends Animal { 39 40 public Gato(String nome) { 41 super(nome); 42 } 43 44 @Override 45 public void fazerSom() { 46 System.out.println(nome + " faz: Miau!"); 47 } 48} 49 50public class TesteHeranca { 51 public static void main(String[] args) { 52 // Polimorfismo - referência de tipo pai aponta para objeto do tipo filho 53 Animal cachorro = new Cachorro("Rex"); 54 Animal gato = new Gato("Garfield"); 55 56 cachorro.fazerSom(); // => "Rex faz: Au au!" 57 gato.fazerSom(); // => "Garfield faz: Miau!" 58 59 // Casting de volta para tipo específico 60 if (cachorro instanceof Cachorro) { 61 Cachorro c = (Cachorro) cachorro; 62 c.buscar(); // => "Rex buscou a bolinha!" 63 } 64 } 65}
1// Interfaces - contratos que devem ser implementados 2public interface Academico { 3 void estudar(); 4 void fazerProva(); 5} 6 7public interface Profissional { 8 void trabalhar(); 9} 10 11// Classe abstrata - pode ter métodos concretos e abstratos, e não pode ser instanciada 12public abstract class SerVivo { 13 protected String nome; 14 15 public SerVivo(String nome) { 16 this.nome = nome; 17 } 18 19 // Método abstrato - deve obrigatoriamente ser implementado nas subclasses 20 public abstract void respirar(); 21 22 // Método concreto - já tem implementação e pode ser usado ou sobrescrito 23 public void apresentar() { 24 System.out.println("Olá, meu nome é " + nome); 25 } 26} 27 28// Uma classe pode estender apenas uma classe (abstrata ou não), mas implementar várias interfaces 29public class Pessoa extends SerVivo implements Academico, Profissional { 30 31 public Pessoa(String nome) { 32 super(nome); 33 } 34 35 @Override 36 public void respirar() { 37 System.out.println(nome + " está respirando fundo."); 38 } 39 40 @Override 41 public void estudar() { 42 System.out.println(nome + " está estudando programação em Java."); 43 } 44 45 @Override 46 public void fazerProva() { 47 System.out.println(nome + " está fazendo a prova de certificação."); 48 } 49 50 @Override 51 public void trabalhar() { 52 System.out.println(nome + " está desenvolvendo software na empresa."); 53 } 54} 55 56public class TesteInterface { 57 public static void main(String[] args) { 58 Pessoa maria = new Pessoa("Maria"); 59 maria.apresentar(); // => "Olá, meu nome é Maria" 60 maria.respirar(); // => "Maria está respirando fundo." 61 maria.estudar(); // => "Maria está estudando programação em Java." 62 maria.trabalhar(); // => "Maria está desenvolvendo software na empresa." 63 } 64}
1// Enum - tipo que contém constantes predefinidas (sem uso de acentos ou cedilha) 2public enum DiaDaSemana { 3 SEGUNDA, TERCA, QUARTA, QUINTA, SEXTA, SABADO, DOMINGO 4} 5 6public enum Estacao { 7 PRIMAVERA("março a maio"), 8 VERAO("junho a agosto"), 9 OUTONO("setembro a novembro"), 10 INVERNO("dezembro a fevereiro"); 11 12 private String periodo; 13 14 Estacao(String periodo) { 15 this.periodo = periodo; 16 } 17 18 public String getPeriodo() { 19 return periodo; 20 } 21} 22 23public class TesteEnum { 24 public static void main(String[] args) { 25 // Usando Enum DiaDaSemana 26 DiaDaSemana hoje = DiaDaSemana.QUINTA; 27 28 switch (hoje) { 29 case SEGUNDA: 30 System.out.println("Que a semana comece!"); 31 break; 32 case SEXTA: 33 System.out.println("Chegou o fim de semana!"); 34 break; 35 case SABADO: 36 case DOMINGO: 37 System.out.println("É fim de semana!"); 38 break; 39 default: 40 System.out.println("Dia comum de trabalho/estudo."); 41 } 42 43 // Usar Enum com atributos 44 Estacao estacao = Estacao.VERAO; 45 System.out.println("Estação: " + estacao); 46 System.out.println("Período: " + estacao.getPeriodo()); 47 48 // Conversão de tipos (Parse e String.valueOf) 49 String numero = "123"; 50 int num = Integer.parseInt(numero); // String para int 51 System.out.println("Número inteiro: " + num); 52 53 int valor = 456; 54 String texto = String.valueOf(valor); // int para String 55 System.out.println("Texto: " + texto); 56 57 // Casting explícito (narrowing) - pode haver perda de dados (casas decimais) 58 double decimal = 3.14; 59 int inteiro = (int) decimal; 60 System.out.println("Inteiro: " + inteiro); // => 3 61 62 // Conversão automática (widening) - sem perda de dados 63 int x = 100; 64 double y = x; // int cabe com folga dentro de um double 65 System.out.println("y = " + y); // => 100.0 66 } 67}