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