Giter Site home page Giter Site logo

algaworks-especialista-java's Introduction

algaworks-especialista-java 🎓☕️

Repositório do curso Especialista Java da Algaworks. https://www.algaworks.com/

1. Introdução 👩‍🏫

1.5 Plataformas Java

Um software deveria ser capaz de rodar em diferentes máquinas.

As plataformas incluem um mecanismo de execução de programas (VM), um compilador, um conjunto de bibliotecas e ferramentas. As principais são o Java SE, Jakarta EE, Java ME e Java Card.

Java SE -> conjunto de apis, desenvolvimento da maior parte das aplicações desktop e servidores Jakarta EE -> plataforma guarda-chuva (jakarta servlet, JPA, bean validation, CDI)

Especificação: documentação detalhada de como uma tecnologia deve funcionar - blueprint, padrão Implementação: tecnologia de fato que implementa um especificação (ex: hibernate é a implementação do jakarta persistence)

1.6 JVM

Software que roda o código pré-compilado (traduz para a linguagem nativa de máquina).

Um programa escrito em C: Código-fonte -> Binário -> Sistema Operacional (binários diferentes para cada sistema operacional)

A JVM emula uma máquina física e permite executar códigos pré-compilados (não compilado nativamente). Independe do sistema operacional e arquitetura do sistema.

Código-fonte -> ByteCode -> Binário -> Sistema Operacional

ByteCode: não é legível para humanos e nem interpretável pela máquina, apenas a JVM consegue entender e traduzir as instruções. É necessário possuir a JVM compatível com o sistema operacional.

O formato do arquivo bytecode é .class, e pode ser gerado através do comando javac em uma classe .java.

Não há relação entre a linguagem Java e o Bytecode. Pode ser escrito em qualquer linguagem (por exemplo, Kotlin).

Mas a interpretação dos programas não torna lenta a execução? R: Sim, quando comparado com a compilação para código nativo. Mas isso é minimizado pelo JIT (Just In Time compiler), que pode transformar código em código nativo se achar necessário em tempo de execução, melhorando a velocidade.

1.7 JRE/JDK

JRE (Java Runtime Environment) Ambiente de execução Java completo, que contém a JVM, Class Loader, bibliotecas padrão.

JDK (Java Development Kit) Inclui o compilador, ferramentas, utilitário e a JRE.

JDK(JRE(JVM))

1.8 Versões do Java

Feature release -> versão que dura 6 meses e tem suporte por tempo curto (ideal atualização imediata) LTS -> Long Term Support: atualizações gratuitas por um longo período.

Java 17: setembro/2021 (atualizações gratuitas até, no mínimo, 2029).

1.9 Distribuições JDK e licenças de uso

JCP - Java Community Process Comunidade de desenvolvimento de Java. Não implementa o produto, só define como vai funcionar, e uma empresa ou instuição fará a implementação.

JSR - Java Specification Request Define especificações que as implementações devem seguir. Java SE reúne várias JSRs.

OpenJDk: prova conceito, mostra uma exemplo de implementação - e pode ser usada em produção.

ESPECIFICAÇÃO JAVA SE (JSRs)
            |  
            V
         OPEN JDK
(implementação de referência) - não é a distribuição
            |  
            V
Fornecedores fazem build do OpenJDK e criam uma distribuição
Oracle OpenJDK, Oracle JDK, Amazon Corretto, Eclipse Temurin    

OpenJDK Oracle -> evitar usar em produção pela falta de suporte a longe prazo.

Neste projeto, será usada a distribuição Eclipse Temurin 17.0.2.

2. Fundamentos Java 💻

2.2 Compilando e executando um programa

javac Classe.java Dará origem a um arquivo com extensão .class.

java Classe ou java Classe.java, caso não tenha sido compilada de antemão, executa a classe.

2.12 Tipos primitivos

Tipo Bits Mínimo Máximo
boolean 1 false true
char 16 0 2^16 - 1
byte 8 -2^7 2^7 - 1 (127)
short 16 -2^15 2^15 - 1 (32_767)
int 32 -2^31 2^31 - 1 (2_147_483_647)
long 64 -2^63 -2^63 - 1
float 32 - -
double 64 - -
  • o literal numérico inteiro é sempre int, a não ser que seja declaradamente long (L).
  • o literal numérico decimal é sempre double, a não ser que seja declaradamente float (f).

2.15 Conversão de tipos primitivos

A conversão de um tipo maior para um menor, mesmo de um número que caiba, estoura o seguinte erro:

error: incompatible types: possible lossy conversion from long to int

É possível forçar o casting:

long x = 10;
int y = (int) x; //casting

Entre ponto flutuante e inteiro também é necssário deixar explícito o casting:

double x = 100;
int y = (int) x; //casting

2.17 Promoção Aritmética

Operações aritméticas entre variáveis de tipos diferentes, o resultado sempre será igual ao tipo maior.

long x = 10;
int y = 5;
long resultado = x*y; // será do tipo long

Para operações entre inteiros e ponto flutuante (ex. long x float), o resultado vai ser sempre o ponto flutuante.

long x = 10;
float y = 5f;
float resultado = x*y; // será do tipo float

Para operações usando inteiros que resultem em pontos flutuantes:

int x = 10;
int y = 3;
float resultado = x/y; // resultado 3.0

Compila normalmente, resultado é um número inteiro. A operação é feita usando tipos int, então o resultado é um int, ainda que colocado numa variável tipo float. A atribuição é feita depois do cálculo.

Se eu quiser que seja dividido como um número de ponto flutuante, devo dividir por float:

int x = 10;
float resultado = x/3f; // resultado 3.333

2.24 JShell

Basta digitar jshell no terminar e assim é possível utilizar comandos java. É possível declarar variáveis, ver valor de variáveis (/vars) e realizar operações aritméticas.

jshell

3. Estruturas de Controle e Operadores 🔁

3.10 Escopo e Inicialização de Variáveis

Quando falamos em tipos primitivos, as variáveis SEMPRE precisam ter valor. O código não compila. Erro variable might not have been initilized.

3.12 Cláusulas break e continue

Funcionamento do switch: um case encontrado, executa a instrução encontrada e todas as seguintes. Para sair após encontrar um caso é necessário usar a expressão break.

Interrompe a execução -> sai do switch.

  • Break: interrompe totalmente a execução de uma estrutura de repetição.

  • Continue: interrompe a atual iteração, iniciando a repetição seguinte.

3.13 Switch Expressions

Atribuição de variáveis diretamente através do switch:

     String horarioFuncionamento = switch (diaSemana) {
            case "seg", "ter", "qua", "qui", "sex" -> "Fechado";
            case "sab", "dom" -> "09:00 às 16:00";
            default -> "fechado";
        };

Utilização de lógica dento do case:

    System.out.printf("Horário de funcionamento: %s%n", switch (diaSemana) {
        case "seg" -> {
            if (mes == 12) {
                yield "08:00 às 16:00";
            }
            yield "Fechado";
        }
        case "sab", "dom" -> "08:00 às 12:00";
        default -> "Dia inválido";
    });

4. Produtividade com o IntelliJ Idea 🔁

4.6 Atalhos

option + ↑ > aumenta a seleção de código a partir da linha

option + ↓ > diminui a seleção de código

cmd + d > duplica o código selecionado

cmd + delete > deleta a linha inteira

option + delete > deleta à esquerda do ponto da palavra

shift + enter > cria uma nova linha sem quebrar a que você está

shift + cmd + U > toggle case

4.10 Debugger

Watches

Clicando no + no debugger, é possível acompanhar (watch) uma expressão para monitorar alteração de valor, por exemplo. (shift+command+enter) ou botão direito > new watch. 👓

🚨 Os watches ficam entre execuções do debugger.

Loggers

É possível alterar um breakpoint para que ele crie logs durante a execução.

Botão direito no breakpoint >> tirar a marcação 'Suspend' para não parar a exec >> Log 'evaluate and log' e podemos colocar uma expressão

5. Progrmação Orientada a Objetos

5.1 Paradigmas de Programação

Classificam as linguagens pela sua forma de funcionar

IMPERATIVA - muda o estado através de comandos passo a passo

PROCEDURAL: especifica as instruções passo a passo, executadas em ordem
* suporte a procedimentos
* variáveis
* (Java também é procedural)
		
ORIENTADA A OBJETOS: 
* Simula o mundo real dentro do mundo computacional
* Estruturas reais ou abstratas
* diversas linguagem usam o paradigma da POO

DECLARATIVA - declara a lógica do processamento, sem descrever o como

FUNCIONAL:
* função é uma expressão que tem entrada e saída
* a partir do java 8 temos muito suporte à prog. funcional

REATIVA:
* foco no desenvolvimento de código assíncrono e não-bloqueante

teste

algaworks-especialista-java's People

Contributors

ghbalbuquerque avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.