Explicações
Conteúdos
Introduction to Java
String & StringBuilder
Classes Empacotadoras
Datas e tempo
Localização (múltiplos idiomas)

UML
Local Variable Type Inferance
Static
Constructors
Enums

Java Memory

Herança

Interfaces

Functional Interfaces

Generics
Arrays & Loops
Collections

Classes Aninhadas

Lambda Expressions

Streams

Java Logging API

Exceptions

Assertions

Program Flow Examples

Java IO
Serialização

Trabalhando com Filesystems

Acesso HTTP

Annotations
Java Concurrency
Segurança
Java Modules

Bancos de dados em Java

Código Thread-Safe
- Packages utilizam o seu domínio por convenção para garantir que um nome de classe seja único e possibilitar que o código seja utilizado por terceiros quando for o caso
- É possível rodar um código fonte de arquivo único como se fosse um
.class
através do comandojava <path class with method main>
- Method Chaining consiste em chamar um método de um objeto retornado por outro método diretamente após a chamada desse outro método. (e.g.
price.add(5.0).setScale(2, RoundingMode.HALF_UP)
)
- Utilizar
static final
para definir uma variável é preferível à apenasfinal
, já que uma variável ou métodostatic
ocupara apenas um espaço em memória, e sem essa palavra reservada o dado seria replicado em cada instância
- Se uma comparação entre dois objetos resultar em verdadeiro, o
hashCode
desses deve ser idêntico
- O método
hashCode()
gera a identidade de uma instância, e é utilizada por coleções hash (como HashSet, HashMap, ...) para otimização de busca.
- Todas classes estende, em último nível, a classe
Object
- O método utilizado para gerar o hash está em
Objects
e não garante segurança.
- Devido a maneira como Java armazena Strings, comparar duas Strings inicializadas com o mesmo valor e com aspas duplas (e.g.
x = "Hello"
) utilizandox == y
irá retornar verdadeiro, por mais que se esteja comparando a referência para o objeto em Heap, já que ambas apontam para o mesmo endereço de Heap.
- Herança múltipla não é permitida em Java devido ao possível problema de uma subclasse, que estenda duas superclasses, tente chamar um método que possuí a exata mesma assinatura em ambas superclasses
- Todo objeto mutável em heap não é thread-safe; apenas objetos imutáveis são seguros em cenários multi-thread
- Tornar uma coleção imutável, não garante segurança de processos concorrentes para os objetos que ela contêm; apenas objetos que sejam imutáveis são seguros nesse cenário
- Heap Pollution ocorre ao atribuir uma instância do tipo X a uma variável do tipo Y, onde X e Y não são compatíveis
- Uma ação atômica é uma ação que é garantida de ser executada em uma thread sem interrupção;
- operações que a CPU consegue executar em um único ciclo são atómicas, por definição
- atribuição de variáveis são ações atômicas, exceto para os tipos
long
edouble
— são valores de 64 bits que levariam duas operações em uma plataforma 32 bits - operações como
+ - / * % ++ —
não são atômicas
- O termo paralelismo implica que dois fluxos de processamento estão ocorrendo ao mesmo tempo. O termo concorrência implica que dois fluxos podem estar ocorrendo ao mesmo tempo.
- em Java paralelismo não é garantido, pois isso depende do hardware que está executando a aplicação e das tarefas que estão sendo agendadas no processador