Open JayCesar opened 7 months ago
O quê eu quero? O quê dá para fazer diferente? Devo estudar para exame de proficiência?
• x == y compara x e y “diretamente” • Valores primitivos: devolve true se x e y possuem o mesmo valor; • Referência a objetos: devolve true se x e y referirem ao mesmo objeto
x.equals(y) compara valores dos objetos referenciados por x e y
• Um tipo de vetor t[] é um tipo de referência; Exemplos de variáveis com esses tipos:
String[] args
int[] listaDeInteiros = {0, 1, 2, 3, 4, 6}
double[] reais = new double[7]
• Para cada tipo primitivo, há uma classe wrapper (invólucro) correspondente que, por sua vez, é um tipo de referência • Uma instância de um objeto de uma classe wrapper contém um único valor do tipo primitivo correspondente • Um wrapper deve ser usado quando um valor de um tipo primitivo é passado para um método que espera um tipo de referência, ou quando um valor primitivo é armazenado em uma variável ou campo de um tipo de referência • Java automaticamente faz o boxing (transformação do tipo primitivo para o tipo do wrapper) e o unboxing (transformação contrária) • Você pode fazer isso explicitamente usando operações como
new Integer(i) // ou
o.intValue()
Ou seja o, o Java faz isso automaticamente para mim. -> Boxing é salvar um variável do tipo primitivo em uma variável de objeto (referência) e unboxing é o oposto.
Exemplo:
Character ch = 'a';
Boolean bb1 = false, bb2 = !bb1; // Boxing para [false] [true]
Integer bi1 = 117; // Boxing para [117]
Double bd1 = 1.2; // Boxing para [1.2]
boolean b1 = bb1; // Unboxing, resulta false
if (bb1) // Unboxing, resulta false
System.out.println("Not true");
int i1 = bi1 + 2; // Unboxing, resulta 119
// short s = bi1; // Ilegal
Integer bi2 = bi1 + 2; // Unboxing, boxing, resulta [119]
Integer[] biarr = { 2, 3, 5, 7, 11 };
int sum = 0;
for (Integer bi : biarr)
sum += bi; // Unboxing no corpo do loop
for (int i : biarr) // Unboxing no cabeçalho do loop
sum += i;
⚠️ String não é um um invólucro (wrapper)! String é objeto de tipo referência e não possui um tipo primitivo.
Um pacote é um espaço de nomes que organiza um conjunto de classes e interfaces relacionadas. _Exemplo citado sobre C: utilizar arquivo.h com mesmos nomes (gera um warning);_
•Java tem enums orientados a objeto • Na sua forma mais simples, são como enums de C:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
Ou seja, um variávei do tipo Day pode ser Sunday, Mondey, Tuesday...;
Obs: Profile (perfilamento do código) -> Análise do código para eu perceber quais trechos to código eu gasto mais tempo.
O perfilamento, em termos de programação e desenvolvimento de software, refere-se ao processo de coleta e análise de dados relacionados ao desempenho e comportamento de um programa em execução. O objetivo do perfilamento é identificar áreas do código que podem estar consumindo muitos recursos, como CPU, memória ou E/S, e otimizá-las para melhorar o desempenho geral do programa.
Em Java, existem várias ferramentas de perfilamento que podem ser utilizadas para analisar o desempenho de um programa e identificar áreas de melhoria. Algumas das ferramentas mais comuns incluem:
VisualVM: VisualVM é uma ferramenta de monitoramento e perfilamento fornecida pela Oracle como parte do JDK. Ela oferece recursos como monitoramento de uso de CPU, uso de memória, monitoramento de threads, entre outros. VisualVM também suporta plugins para estender suas funcionalidades.
Java Mission Control: Java Mission Control (JMC) é outra ferramenta fornecida pela Oracle que oferece recursos avançados de monitoramento e análise de desempenho para aplicativos Java em tempo real. Ele é geralmente utilizado em ambientes de produção para diagnóstico de problemas de desempenho.
YourKit: YourKit é uma ferramenta comercial de perfilamento para Java e .NET. Ela oferece recursos avançados de análise de desempenho, incluindo monitoramento em tempo real, análise de alocação de memória, análise de CPU e integração com várias IDEs.
JProfiler: JProfiler é outra ferramenta comercial de perfilamento para Java que oferece uma ampla gama de recursos para análise de desempenho, incluindo análise de alocação de memória, monitoramento de threads, análise de uso de CPU, entre outros.
NetBeans Profiler: NetBeans Profiler é uma ferramenta de perfilamento integrada ao ambiente de desenvolvimento NetBeans. Ela oferece recursos de análise de desempenho, incluindo monitoramento de uso de CPU, alocação de memória, entre outros.
⚠️ ~Comparação String: Comparação de String gasta muito! Pois eu analiso caractere a caractere! O Enum serve para economizar a utilização / espaço de memória.
Exemplo:
// Definição de um enum chamado DiaSemana
enum DiaSemana {
SEGUNDA, TERCA, QUARTA, QUINTA, SEXTA, SABADO, DOMINGO
}
public class ExemploEnum {
public static void main(String[] args) {
// Usando o enum DiaSemana
DiaSemana dia = DiaSemana.SEGUNDA;
// Imprimindo o valor do enum
System.out.println("Dia da semana: " + dia);
// Comparando enums
if (dia == DiaSemana.SEGUNDA) {
System.out.println("É segunda-feira!");
} else {
System.out.println("Não é segunda-feira.");
}
// Iterando sobre todos os valores do enum
System.out.println("Dias da semana:");
for (DiaSemana d : DiaSemana.values()) {
System.out.println(d);
}
}
}
Outro exemplo (da aula): Na hora que eu for instanciar eu devo fazer assim:
EnumTest enum = new EnumTest(FRIDAY); //or
EnumTest enum = new EnumTest(SUNDAY);
O main é a primeira coisa que eu vou fazer no programa, logo, não há nada para instanciar!
final // indica que é imutável
static final // indica que é imutável e compartilhado por todas as instâncias dessa classe
⚠️ DIca:: adote uma convenção de código e siga!
Métodos com @Test
pode ser utilizados depois por programas de testes
Link: https://docs.oracle.com/javase/tutorial/java/concepts/index.html
📚 Interface
Interface é como se fosse uma Api!
Em muitas linguagens de programação orientadas a objetos, uma classe pode implementar mais de uma interface. Isso é conhecido como herança de interface múltipla. Em algumas linguagens, como Java e C#, uma classe pode implementar quantas interfaces forem necessárias, permitindo assim que ela herde comportamentos e métodos de várias fontes diferentes.
Uma interface não é uma classe! Se eu não implemento ela o compilador não irá compilar ela!
Eu consigo 'instanciar' um interface a partir de uma classe que implementa ela.
Se temos 'medinho' de mudar algo, as coisas ruins não irão mudar! Medo de mudança paralisa o desenvolvedor!
Ocultação de informação de interfaces
Protected só deixa ter acesso a subclasses dentro do mesmo pacote! Private só a classse possui!
Curiosidade: existe algo chamado Programação Orientada aos métodos.
Boas práticas:
Busque fornecer apenas as funcionalidades necessárias para os clientes, todos os outros membros deve ser private; LEIA a documentação!
Tipos
Um tipo é um conjunto de valores e suas operações; Um tipo pode ser um tipo primitivo ou um tipo de referência;
Primitivo são: int, double, boolean etc..
De referência são: Classes, Interfaces, Vetores, Enums, Anotações
Lembre-se: String é tipo imutável!
Dúvidas:
Sobre a atribuição de valores