Java Básico
Plataforma independente: Java é compilado para bytecode, e este não está vinculado a nenhuma plataforma
Portátil: Conceito WORA (Write Once Run Anywhere) e recurso independente de plataforma tornam o Java portátil; JVM e bytecode
Robusta: Capaz de lidar com o encerramento inesperado de um programa; gerenciamento de memória forte; garbage collection automática; tratamento de exceção e mecanismo de verificação de tipo em Java
Compilada/Intepretada: Os programas Java são compilados para gerar arquivos de bytecode e são interpretados, durante a execução, pelo sistema operacional do dispositivo ou pela JVM (Java Virtual Machine)
Multi-thread: Subprocesso leve e independente de um processo que compartilha recursos; alta performance de execução
JVM - Java Virtual Machine: Responsável pela interpretação dos bytecodes, a execução do código; consiste em um conjunto de instruções, conjunto de registradores, a pilha (stack) , garbage-collected heap e a área de memória (armazenamento de métodos)
Compilação
javac HelloWorld.java # compilar
java HelloWorld # executar
javac <opção> Arquivo.java
-d dir # caminho onde as classes compiladas são armazenadas
-deprecation # compilação de código em desuso (versões anteriores)
-g # gera tabelas de debugging
-verbose # exibe informações adicionais sobre a compilação
-O # otimização de código
-depend # compilação de todos os arquivos que dependem do arquivo que está sendo compilado
java <opção> Arquivo.java <lista de argumentos>
-debug # inicia o interpretador no modo debug
-D # redefinição de valores de propriedades
ex = java -D nome=“Meu Nome” Hello
-jar # indica o nome do arquivo .jar que contém a classe a ser executada
-verbose # exibe informações adicionais sobre a execução
Pacotes
Recurso que organiza classe, agrupamento de classes relacionadas em um único namespace Packages: São subdiretórios, a partir da pasta src do projeto, onde estão localizadas as classes Nome Simples: Nome do arquivo (Usuario) Nome Qualificado: Nome do pacote + nome do arquivo (com.controle.acesso.model.Usuario)
Organização de Classes
Por camada
Model: Representam estrutura de domínio da aplicação (Cliente, Pedido, Nota Fiscal etc)
Service: Contém regras de negócio e validação de nosso sistema
Repository: Contém uma integração com banco de dados
Controller: Possuem a finalidade de disponibilizar alguma comunicação externa à aplicação, como http web ou webservices
Util: Contém recursos comuns à toda a aplicação, utilitários
Por feature
Sintaxe
Nome do arquivo
.javadeve ser o mesmo nome da Classes e deve sempre começar com letra maiúsculaUtilizar o padrão "camelCase" em nomes de variáveis e métodos
Variáveis dentro de um método devem ser inicializadas explicitamente para serem utilizadas
Valores default: Para boolean é false; para os tipos numéricos é 0 e tipo referencia é null
Tipos de Dados Primitivos
Todo número Inteiro é tratado como int, desde que seu valor esteja na faixa de valores do int
Classe Executável: Classe com capacidade de inicializar o projeto
Possui método
main()com visibilidadepublic, definida comostatic, do tipovoid, pois não deve retornar nenhum valor, e deve ter como parâmetros um array de stringString[]Variáveis: Iniciar com letra minúsculaDeve conter apenas letras, _ , $ ou os números de 0 a 9
Constantes são representadas pela palavra
final, deve ser escrita em caixa alta e a divisão de palavras utilizando underlinefinal double PI_VALUE = 3.14;
Métodos: Devem ser nomeados como verbo Indentação: Escrever o código de forma hierárquica, facilitando a visualização e entendimento
Construtor: Método que é unicamente invocado no momento da criação (instanciação) do objeto por meio do operador new; sua função é criar (alocar memória) e inicializar as instâncias de uma classe; deve ter o mesmo nome da classe; uma classe pode ter um ou mais construtores (diferenciados pelos parâmetros)
Instanciação: Operação de atribuição; objeto recebe espaço na memória reservado pelo construtor (new)
Atributo (variável) Estático: Valores compartilhados por todos os objetos
private static double notaMinAprovacao
Classes/Objetos anônimos: Instância de classe que é utilizada uma única vez, enquanto estiver na memória
new ClasseAnon();
Modificadores de acesso
Visibilidade
(-) private: Somente a classe pode ver o valor do atributo
(+) public: Qualquer classe pode ver o valor do atributo
(#) protected: Somente a própria classe ou suas filhas por herança podem ver o valor
(~) package: Somente classes do mesmo pacote podem ver o valor do atributo
Membros da mesma classe
sim
sim
sim
sim
Membros de classes derivadas
sim
não
sim
sim
Membros de qualquer outra classe
sim
não
não
no mesmo pacote
Argumentos
Quando uma classe que contenha o método main é executada, pode-se passar um array de argumentos, do tipo String
Os parâmetros podem ser informados via linha de comando após a especificação da classe a ser executada
java MyClass argument1 argument2
Também é possível passar argumentos pré-definidos via IDE, através do documento
launch.json
Classes
Scanner (Input)
Date
Random
Enums: Tipo especial de classe (conjunto de objetos), onde os objetos são previamente criados, imutáveis e disponíveis por toda aplicação
As opções (objetos), devem ser descritos em caixa alta separados por underline
Após as opções, deve-se encerrar com ponto e vírgula ";"
Um enum é como uma classe, logo, poderá ter atributos e métodos
Os valores dos atributos devem já ser definidos após cada opção, dentro de parênteses como se fosse um new
O construtor deve ser privado
Não é comum um enum possuir o recurso setter, somente os getters correspondentes
Não é possível instanciar um Enum
Strings
Comparação de Strings
Formatação de números com ponto flutuante
Palavras Reservadas
Modificadores de classes, variáveis ou métodos
abstract: classe que não pode ser instanciada ou método que precisa ser implementado, por uma subclasse não abstrata
extends: indica a superclasse que a subclasse está estendendo
final: impossibilita que uma classe seja estendida, que um método seja sobrescrito ou que uma variável seja reinicializada
implements: indica as interfaces que uma classe irá implementar
native: indica que um método está escrito em uma linguagem dependente de plataforma
static: faz um método ou variável pertencer à classe ao invés de às instâncias
strictfp: usado em frente a um método ou classe para indicar que os números de ponto flutuante seguirão as regras de ponto flutuante, em todas as expressões
synchronized: indica que um método só pode ser acessado por uma thread de cada vez
transient: impede a serialização de campos
volatile: indica que uma variável pode ser alterada durante o uso de threads
Tratamento de erros
assert: testa uma expressão condicional
try: bloco de código que tentará ser executado, mas que pode causar uma exceção
catch: declara o bloco de código usado para tratar uma exceção
finally: bloco de código, após um try-catch, que é executado independentemente do fluxo de programa seguido ao lidar com uma exceção
throw: usado para passar uma exceção para o método que o chamou
throws: indica que um método pode passar uma exceção para o método que o chamou
Variáveis de referência
super: superclasse imediata
this: instância atual do objeto
const: não utilizar para declarar constantes; usar public static final
Escopo de uso
Arquivo
package, import, static.
Classe
public/protected/private + final/ abstract + extends/implements
Método
public/protected/private + static/final/abstract + void/return
Atributo
public/protected/private + static/final + tipo primitivo
package
import
package determina o diretório real da classe; import informa de onde será importada a classe; devido a possibilidade de classes de mesmo nome
extends
implements
extends determina que uma classe estende outra classe; implements determina que uma classe implementa uma interface, porém nunca o contrário
final
abstract
final determina fim de alteração de valor ou lógica comportamental; abstract em métodos, exige que sub-classes precisarão definir comportamento e um método abstrato
throws
throw
throws determina que um método pode lançar uma exceção; throw é a implementação que dispara a exceção
Atualizado