Aprenda Java em 10 minutos
Java é uma linguagem de programação orientada a objetos de alto nível conhecida por seu princípio “escreva uma vez, execute em qualquer lugar”. Este tutorial cobre recursos do Java 21+, ajudando você a aprender rapidamente os fundamentos do Java.
1. Escrevendo seu primeiro programa Java
Os programas Java são organizados em classes. Vamos começar com um programa simples. Crie um arquivo chamado HelloWorld.java
:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Compile e execute o programa:
javac HelloWorld.java
java HelloWorld
A saída será:
Hello, World!
Este programa simples demonstra a estrutura básica do Java. Todo programa Java deve ter pelo menos uma classe, e o método main
é o ponto de entrada.
2. Sintaxe Básica
A sintaxe Java é estruturada e segue regras específicas:
// Este é um comentário de linha única
/* Este é um
comentário multilinha */
public class BasicSyntax {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
Regras básicas de sintaxe em Java:
- Sensibilidade a maiúsculas: Java é sensível a maiúsculas.
Variable
evariable
são diferentes. - Nomes de classes: Devem começar com uma letra maiúscula e seguir a convenção CamelCase.
- Nomes de métodos: Devem começar com uma letra minúscula e seguir a convenção camelCase.
- Ponto e vírgula: Toda instrução deve terminar com ponto e vírgula
;
. - Chaves: Blocos de código são definidos usando chaves
{}
. - Comentários: Comentários de linha única usam
//
, comentários multilinha usam/* */
.
3. Variáveis e Tipos de Dados
Java é uma linguagem estaticamente tipada, o que significa que você deve declarar os tipos de variáveis explicitamente.
Regras de nomenclatura de variáveis:
- Deve começar com uma letra, sublinhado
_
, ou sinal de dólar$
. - Pode conter letras, dígitos, sublinhados e sinais de dólar.
- Não pode ser palavras-chave do Java.
- Deve seguir a convenção camelCase.
Tipos de dados primitivos do Java:
- byte: inteiro com sinal de 8 bits (-128 a 127)
- short: inteiro com sinal de 16 bits (-32,768 a 32,767)
- int: inteiro com sinal de 32 bits (-2^31 a 2^31-1)
- long: inteiro com sinal de 64 bits (-2^63 a 2^63-1)
- float: ponto flutuante de 32 bits
- double: ponto flutuante de 64 bits
- boolean: true ou false
- char: caractere Unicode de 16 bits
public class DataTypes {
public static void main(String[] args) {
// Tipos inteiros
byte age = 25;
short year = 2024;
int population = 1000000;
long distance = 93000000L; // sufixo L para long
// Tipos de ponto flutuante
float temperature = 36.5f; // sufixo f para float
double pi = 3.14159265359;
// Booleano e caractere
boolean isActive = true;
char grade = 'A';
// String (tipo de referência)
String name = "Alice";
System.out.println("Name: " + name + ", Age: " + age);
}
}
3.1 Operações com Strings
Strings em Java são objetos, não tipos primitivos:
public class StringExample {
public static void main(String[] args) {
String text = "Java Programming";
System.out.println("Length: " + text.length());
System.out.println("Uppercase: " + text.toUpperCase());
System.out.println("Lowercase: " + text.toLowerCase());
System.out.println("Character at index 0: " + text.charAt(0));
System.out.println("Substring: " + text.substring(0, 4));
System.out.println("Contains 'Java': " + text.contains("Java"));
// Concatenação de strings
String greeting = "Hello, " + "World!";
System.out.println(greeting);
// Formatação de strings
String formatted = String.format("Pi is approximately %.2f", 3.14159);
System.out.println(formatted);
}
}
4. Arrays e Coleções
4.1 Arrays
Arrays armazenam múltiplos valores do mesmo tipo:
public class ArrayExample {
public static void main(String[] args) {
// Declaração e inicialização de array
int[] numbers = {1, 2, 3, 4, 5};
String[] fruits = new String[3];
fruits[0] = "apple";
fruits[1] = "banana";
fruits[2] = "orange";
// Acessando elementos do array
System.out.println("First number: " + numbers[0]);
System.out.println("Array length: " + numbers.length);
// Iterando através de arrays
for (int i = 0; i < numbers.length; i++) {
System.out.println("Number " + i + ": " + numbers[i]);
}
// Loop for aprimorado (for-each)
for (String fruit : fruits) {
System.out.println("Fruit: " + fruit);
}
// Arrays multidimensionais
int[][] matrix = {{1, 2}, {3, 4}, {5, 6}};
System.out.println("Matrix element [1][1]: " + matrix[1][1]);
}
}
4.2 Coleções
O Java Collections Framework fornece estruturas de dados dinâmicas:
import java.util.*;
public class CollectionsExample {
public static void main(String[] args) {
// ArrayList (array dinâmico)
ArrayList<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
names.remove("Bob");
System.out.println("Names: " + names);
// HashMap (pares chave-valor)
HashMap<String, Integer> ages = new HashMap<>();
ages.put("Alice", 25);
ages.put("Bob", 30);
ages.put("Charlie", 35);
System.out.println("Alice's age: " + ages.get("Alice"));
// HashSet (elementos únicos)
HashSet<Integer> uniqueNumbers = new HashSet<>();
uniqueNumbers.add(1);
uniqueNumbers.add(2);
uniqueNumbers.add(2); // Duplicado, não será adicionado
uniqueNumbers.add(3);
System.out.println("Unique numbers: " + uniqueNumbers);
// Iterando através de coleções
for (String name : names) {
System.out.println("Name: " + name);
}
for (Map.Entry<String, Integer> entry : ages.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
5. Operações e Operadores
Java fornece vários operadores para diferentes operações:
- Operadores Aritméticos:
+
,-
,*
,/
,%
(módulo),++
(incremento),--
(decremento) - Operadores de Comparação:
==
,!=
,>
,<
,>=
,<=
- Operadores Lógicos:
&&
(e),||
(ou),!
(não) - Operadores Bit a Bit:
&
,|
,^
,~
,<<
,>>
,>>>
- Operadores de Atribuição:
=
,+=
,-=
,*=
,/=
,%=
public class OperatorsExample {
public static void main(String[] args) {
int a = 10, b = 3;
// Operações aritméticas
System.out.println("Addition: " + (a + b));
System.out.println("Subtraction: " + (a - b));
System.out.println("Multiplication: " + (a * b));
System.out.println("Division: " + (a / b));
System.out.println("Modulus: " + (a % b));
// Incremento e decremento
System.out.println("Pre-increment: " + (++a));
System.out.println("Post-decrement: " + (b--));
// Operações de comparação
System.out.println("Equal: " + (a == b));
System.out.println("Not equal: " + (a != b));
System.out.println("Greater than: " + (a > b));
// Operações lógicas
boolean x = true, y = false;
System.out.println("AND: " + (x && y));
System.out.println("OR: " + (x || y));
System.out.println("NOT: " + (!x));
// Operações de atribuição
int c = 5;
c += 3; // c = c + 3
System.out.println("After += 3: " + c);
}
}
6. Fluxo de Controle
6.1 Declarações Condicionais
public class ConditionalExample {
public static void main(String[] args) {
int score = 85;
// declaração if-else
if (score >= 90) {
System.out.println("Grade: A");
} else if (score >= 80) {
System.out.println("Grade: B");
} else if (score >= 70) {
System.out.println("Grade: C");
} else {
System.out.println("Grade: F");
}
// Operador ternário
String result = (score >= 60) ? "Pass" : "Fail";
System.out.println("Result: " + result);
// declaração switch
char grade = 'B';
switch (grade) {
case 'A':
System.out.println("Excellent!");
break;
case 'B':
System.out.println("Good!");
break;
case 'C':
System.out.println("Average");
break;
default:
System.out.println("Invalid grade");
}
}
}
6.2 Loops
public class LoopExample {
public static void main(String[] args) {
// loop for
System.out.println("For loop:");
for (int i = 0; i < 5; i++) {
System.out.println("Iteration: " + i);
}
// Loop for aprimorado (for-each)
System.out.println("\nFor-each loop:");
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println("Number: " + num);
}
// loop while
System.out.println("\nWhile loop:");
int count = 0;
while (count < 3) {
System.out.println("Count: " + count);
count++;
}
// loop do-while
System.out.println("\nDo-while loop:");
int x = 0;
do {
System.out.println("X: " + x);
x++;
} while (x < 3);
// break e continue
System.out.println("\nBreak and continue:");
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // Sair do loop
}
if (i % 2 == 0) {
continue; // Pular números pares
}
System.out.println("Odd number: " + i);
}
}
}
7. Métodos (Funções)
Métodos em Java são funções que pertencem a classes:
public class MethodExample {
// Método sem parâmetros e sem valor de retorno
public static void greet() {
System.out.println("Hello, World!");
}
// Método com parâmetros e valor de retorno
public static int add(int a, int b) {
return a + b;
}
// Método com múltiplos parâmetros
public static String formatName(String firstName, String lastName) {
return firstName + " " + lastName;
}
// Sobrecarga de método (mesmo nome, parâmetros diferentes)
public static int multiply(int a, int b) {
return a * b;
}
public static double multiply(double a, double b) {
return a * b;
}
// Argumentos variáveis (varargs)
public static int sum(int... numbers) {
int total = 0;
for (int num : numbers) {
total += num;
}
return total;
}
public static void main(String[] args) {
greet();
int result = add(5, 3);
System.out.println("Addition result: " + result);
String fullName = formatName("John", "Doe");
System.out.println("Full name: " + fullName);
System.out.println("Multiply integers: " + multiply(4, 5));
System.out.println("Multiply doubles: " + multiply(2.5, 3.0));
System.out.println("Sum of multiple numbers: " + sum(1, 2, 3, 4, 5));
}
}
8. Programação Orientada a Objetos
8.1 Classes e Objetos
public class Person {
// Variáveis de instância (campos)
private String name;
private int age;
private String email;
// Construtor
public Person(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
// Construtor padrão
public Person() {
this("Unknown", 0, "");
}
// Métodos getter
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getEmail() {
return email;
}
// Métodos setter
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
if (age >= 0) {
this.age = age;
}
}
public void setEmail(String email) {
this.email = email;
}
// Método de instância
public void introduce() {
System.out.println("Hi, I'm " + name + ", " + age + " years old.");
}
// Método com lógica
public boolean isAdult() {
return age >= 18;
}
// Método toString (sobrescrevendo o toString do Object)
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + ", email='" + email + "'}";
}
public static void main(String[] args) {
// Criando objetos
Person person1 = new Person("Alice", 25, "[email protected]");
Person person2 = new Person();
// Usando métodos
person1.introduce();
System.out.println("Is adult: " + person1.isAdult());
person2.setName("Bob");
person2.setAge(17);
person2.setEmail("[email protected]");
System.out.println(person1.toString());
System.out.println(person2.toString());
}
}
Este tutorial Java abrangente cobre os conceitos essenciais necessários para começar com programação Java. A tipagem forte da linguagem, recursos orientados a objetos e extensa biblioteca padrão a tornam poderosa para construir aplicações robustas. Pratique esses exemplos e experimente com o código para aprofundar sua compreensão dos conceitos de programação Java.