Buscar

[Dio]_Desenvolvimento_Basico_em_Java

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 35 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 35 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 35 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Desenvolvimento Básico em Java 1
Desenvolvimento Básico em Java
Descrição
A linguagem Java é orientada a objetos e uma das mais usadas por desenvolvedores no mundo. Aprenda
desde os conceitos e instalação até a execução de projetos em Java.
Formação com esse curso:
 Inter Java Developer
Professor:
André Gomes
Marco Ollivier
Gabriel Beck
Augusto Júlio
Alex Duarte
Aulas:
Matéria
Capitulo 1 - Preparando o ambiente para programar em Java
Java - Instalação e Ambiente
Instalação de ambiente
Instalando o Java Linux)
sudo add -apt-repository ppa:linuxuprising/java 
sudo apt update
sudo apt install oracle-java10-installer
java --version (para verificar a versão instalada)
Instalando o Java Windows)
https://www.oracle.com/br/java/ 
Entre no site e vá na aba "Faça o Download do Java" , depois desça a tela e vá na opção "JDK Download" e 
escolha a versão referente ao seu sistema operacional.
Após baixar o arquivo, faça a instalação do mesmo e estará pronto.
Ferramentas de build
Gradle Linux)
https://www.oracle.com/br/java/
Desenvolvimento Básico em Java 2
https://gradle.org 
Versão 4.7 - Ganhando popularidade Android Studio)
Usa linguagem de programação Groovy
mkdir /opt/gradle
cd Global\ labs\ Academy
unzip -d /opt/gradle gradle-7.7-bin.zip
ls /opt/gradle/gradle-4.7
export PATH$PATH/opt/gradle/gradle-4.7/bin 
sudo apt purge gradle //old versions
gradle -v
Gradle Windows)
https://gradle.org/ 
Entre no site e vá na seção "1.Install Gradle" , depois desça a tela e vá na opção "Installing manually" e escolha 
a versão referente ao seu sistema operacional.
Cria uma nova Pasta em C\Gradle
Dezipe o arquivo baixado dentro da pasta C\Gradle
Agora configure o Gradle no seu Sistema Operacional com as seguintes passos:
Dê um clique direito com o mouse em no ícone (seu computador) e vá em Propriedades → Configurações 
avançadas do sistema → Variáveis de Ambiente
Em Variáveis do Sistema selecione PATH e clique em Editar.
Adicione a entrada C\Gradle\gradle-6.8.2\bin e clique em salvar.
Para verificar a versão instalada, abra o seu command prompt e digite = gradle -v
Maven Linux)
https://maven.apache.org/ 
Versão 3.5.3 - Legados do ANT
Baseado em XML
unzip -d /opt/maven apache-maven-3.5.3-bin.zip
ls /opt/maven/apache-maven-3.5.3
sudo apt purge maven //old versions
export PATH$PATH/opt/maven/apache-maven-3.5.3/bin 
mvn -v
Maven Windows)
https://maven.apache.org/ 
Entre no site e vá na seção "Download" , "Files" e escolha o Link referente ao seu sistema de Zip.
Cria uma nova Pasta em C\Apache-Maven
Dezipe o arquivo baixado dentro da pasta C\Apache-Maven
Agora configure o Gradle no seu Sistema Operacional com as seguintes passos:
Dê um clique direito com o mouse em no ícone (seu computador) e vá em Propriedades → Configurações 
avançadas do sistema → Variáveis de Ambiente
Em Variáveis do Sistema selecione PATH e clique em Editar.
Adicione a entrada C\Apache-Maven\apache-maven-3.6.3\bin e clique em salvar.
https://gradle.org/
https://gradle.org/
https://maven.apache.org/
https://maven.apache.org/
Desenvolvimento Básico em Java 3
A mesma caixa de diálogo pode ser usada para definir JAVA_HOME para a localização de seu JDK, por 
exemplo, C \ Arquivos de programas \ Java \ jdk1.7.0_51
Para verificar a versão instalada, abra o seu command prompt e digite = mvn -v
IntelliJ IDEA Linux)
https://www.jetbrains.com/pt-br/idea/download/ 
Escolha a versão referente ao seu sistema operacional e baixe a versão Community que é grátis.
cd ~/firefox 
./firefox --new-instance --safe-mode
https://www.jetbrains.com/idea/ 
cd Global\ Labs\ Academy
sudo tar -xzf ideaIC2018.1.4.tar.gz
cd idea-IC181.5087.20/bin/ 
./idea.sh 
IntelliJ IDEA Windows)
https://www.jetbrains.com/pt-br/idea/download/
Escolha a versão referente ao seu sistema operacional e baixe a versão Community que é grátis.
Após baixar o arquivo, faça a instalação do mesmo e estará pronto.
Observação: Ferramentas de Build
Garante a mesma versão para todos os desenvolvedores
Wrapper
https://github.com/takari/maven-wrapper 
https://docs.gradle.org/current/userguide/gradele_wrapper.html 
Gradle Wrapper
./gradlew -v
mvn N io.takari:maven:wrapper 
./mvnw -v 
Java - Criação de Projetos
Criação de Projeto via Spring Initializr = https://start.spring.io/ 
Gerar um projeto via Mavem com Java e Gradle com Java
No campo Group = Nome da empresa (br.com.globallabs)
Artifacts = Nome do projeto (exemplo-maven)
Escolher Java Version = Colocar a versão que você instalou)
Packaging = Escolher a opção Jar
Description = Colocar descrição do projeto Primeiro exemplo usando Maven)
Colocar Dependencies = Web
Clicar em Generate Project e Salvar o arquivo
Repetir esse processo, porém agora com a opção Gradle.
Fazer Importação do Projeto Maven no IntelliJ IDEA
Abrir o aplicativo do IDEA
Import Project = Selecionar o diretório onde foi extraindo os download dos projetos criados no site da 
Spring Initializr e selecionar o arquivo pom.xml
https://www.jetbrains.com/pt-br/idea/download/#section=windows
https://www.jetbrains.com/idea/
https://www.jetbrains.com/pt-br/idea/download/#section=windows
https://github.com/takari/maven-wrapper
https://docs.gradle.org/current/userguide/gradele_wrapper.html
https://start.spring.io/
Desenvolvimento Básico em Java 4
Marcar opção de Import projects automatically
Detalhes arquivo pom.xml
Arquivo que trás todas informações de configuração do projeto, tais como: grupo de trabalho, nome do projeto, 
versão, packaging, descrição do projeto, propriedades, linguagem e dependências.
Instalar Projeto
Basta clicar na opção "Install" no campo direito do IDEA no menu Profiles(Maven)
Rodar Projeto via IDEA
Basta clicar na opção "Spring-boot-run" no campo direito do IDEA no menu Plugins(Maven)
Vai ser gerado um endereço localhost, basta abrir esse endereço no seu navegador
Rodar Projeto via Terminal
No terminal, basta ir na pasta do projeto e entrar dentro da pasta target
Executar o arquivo exemplo-maven-0.0.1SNAPSHOT.jar com o comando = java .jar target/exemplo-maven-
0.0.1SNAPSHOT.jar
Fazer Importação do Projeto Gradle no IntelliJ IDEA
Abrir o aplicativo do IDEA
Import Project = Selecionar o diretório onde foi extraindo os download dos projetos criados no site da Spring 
Initializr e selecionar o arquivo build.gradle
Marcar opção de use auto-import
Escolher a versão da sua instalação do Java JVM
Detalhes arquivo build-gradle
Arquivo que trás todas informações de configuração do projeto, tais como: grupo de trabalho, nome do projeto, 
versão, packaging, descrição do projeto, propriedades, linguagem e dependências.
Instalar Projeto
Basta clicar na opção "Build" no campo direito do IDEA no menu Profiles(Gradle)
Rodar Projeto via IDEA
Basta clicar na opção "bootrun" no campo direito do IDEA no menu Tasks(Gradle)
Vai ser gerado um endereço localhost, basta abrir esse endereço no seu navegador
Rodar Projeto via Terminal
No terminal, basta ir na pasta do projeto e entrar dentro da pasta build
Executar o arquivo exemplo-maven-0.0.1SNAPSHOT.jar com o comando = java .jar build/libs/exemplo-gradle-
0.0.1SNAPSHOT.jar
Capitulo 2 - O que precisamos saber sobre Java
O que precisamos saber sobre Java
O que é Java?
Já é uma linguagem de programação e plataforma computacional lançada em 1995 pela Sun Microsystems, por um 
time comandado por James Gosling. Anos depois foi adquirida pela Oracle.
Diferente de outras linguagens de programação, que são compiladas para código nativo, o Java é compilado para 
um bytecode que é interpretado por uma máquina virtual.
O que é o compilador?
Um compilador é um programa que, a partir de um código fonte, cria um programa semanticamente equivalente, 
porém escrito em outra linguagem, código objeto. Um compilador traduz um programa de uma linguagem textual 
para uma linguagem de máquina, específica para um processador e sistema operacional.
Desenvolvimento Básico em Java 5
O nome compilador éusado principalmente para os programas que traduzem o código fonte de uma linguagem de 
programação de alto nível para uma linguagem de programação de baixo nível (por exemplo, Assembly ou código 
de máquina).
O que é o bytecode?
É o código originado da compilação de programas Java.
O bytecode é o programa interpretado e executado pela Máquina Virtual Java, JVM.
O que é a JVM?
Primeiramente explicar o que é uma VM.
Uma Máquina Virtual, ou Virtual Machine, é um software que simula uma máquina física e consegue executar vários 
programas, gerenciar processos, memória e arquivos. Tudo isso faz parte de uma plataforma com memória, 
processador e outros recursos totalmente virtuais, sem dependência do hardware.
A JVM é uma máquina virtual que executa programas Java, executando os bytecodes em linguagem de máquina 
para cada sistema operacional.
Em linguagens compiladas diretamente para um sistema operacional SO específico, esse programa não irá 
executar em outro SO, havendo a necessidade de compilar uma versão do software para cada SO.
Com o Java, compilamos para a JVM, o bytecode será executado pela máquina virtual, e não diretamente pelo SO, 
assim, o software escrito em Java possui portabilidade para qualquer sistema operacional, porém, cada JVM deve 
ser construída para um SO específico.
O que é a JRE?
JRE significa Java Runtime Envirnment, ou Ambiente de Execução do Java, é composto pela Java Virtual Machine 
JVM, bibliotecas e APIs da linguagem Java e outros componentes para suporte da plataforma Java.
Ele represente a parte responsável pela execução do software Java.
Exemplo: sudo apt-get install openjdk-8-jre
O que é a JDK?
Java Development Kit JDK, Kit de Desenvolvimento Java, é um conjunto de utilitários que permitem criar software 
para a plataforma Java. É composto pelo compilador Java, bibliotecas da linguagem, ferramentas e a JRE.
Exemplo: sudo apt-get install openjdk-8-jdk
O que é a Java SE?
Java Standard Edition SE, é a distribuição mínima da plataforma de desenvolvimento de aplicações Java.
OpenJDK é a implementação de referência opensource da Plataforma Java, JavaSE, que ainda é mantida pela 
Oracle.
O que é a Java EE?
Java Enterprise Edition, é uma extensão da Java SE que possui suporte a desenvolvimento de sistemas 
corporativos.
Além do mínimo da plataforma, o Java EE possui diversas especificações de partes da infra estrutura de 
aplicações, como acesso a banco de dados, mensageria, serviços web, parser de arquivos e outras.
Servidores de Aplicações JavaEE, sabem seguir essas especificações e implementar os recursos para os usuários.
Exemplo: JBoss RedHat), Weblogic Oracle), WebSphere IBM 
Glassfish = Implementação de Referência Opensource: https://javaee.github.io/glassfish 
O que é a Jakarta EE?
Com a falta de investimento da Oracle no Java, ela cedeu todo o código, implementações e especificações do 
JavaEE para a Eclipse Foundation, mas como o nome JavaEE é uma marca registrada, foi escolhido o nome 
JakartaEE.
Agora a evolução da especificações e padrões do Java será feito sobre o nome JakartaEE, com compatibilidade 
com o JavEE.
https://javaee.github.io/glassfish
Desenvolvimento Básico em Java 6
Capitulo 3 - Características da linguagem
Iniciando um Projeto Java
Projeto - IntelliJ 2019.1 / Java 11 / Gradel 5.3.1
Criando o Projeto:
Abrir IntelliJ - Criar novo Projeto - Java - Gradle
GroupId = one.innovation.digital
ArtifactId = caracteristicas-da-linguagem
Selecionar "use auto-import" , "use default gradlw wrapper(recommended)"
Selecionar Gradle JVM = A versão instalada do seu Java
Verificando o Projeto:
Ir em File → Project Structure → Project
Verificar se está usando a versão correta do Java, e Project Language level
Verificar no build.gradle se a sourceCompatibility está no 1.11 (java)
Assuntos:
Classes, Tipos, Modificadores de acesso, Interfaces, Enums
Classes:
Main
Atributos
Métodos Retornos, Parâmetros, Assinatura)
Construtores
Tipos:
Primitivos
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 
Não aceitam NULL
Possuem valores default
Valores Default: 
Data type: byte - Default Value: 0
Data type: short - Default Value: 0
Data type: int - Default Value: 0
Data type: long - Default Value: 0L
Data type: float - Default Value: 0.0f
Data type: double - Default Value: 0.0d
Data type: char - Default Value: '\u0000'
Data type: String (or any object) - Default Value: null
Data type: boolean - Default Value: false
Wrappers
São objetos que representam os primitivos
Auto-boxing e Unboxing
Não Primitivos
http://docs.oracle.com/javase/8/docs/api/java/lang/String.html 
String
Number
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
http://docs.oracle.com/javase/8/docs/api/java/lang/String.html
Desenvolvimento Básico em Java 7
Object
Qualquer outros objetos
Tipagem forte e estática
Forte e estática
var - Inferência de tipo
Modificadores de acesso:
public
public pode ser acessado de qualquer lugar por qualquer entidade que possa visualizar a classe a que ela 
pertence.
private
Os métodos e atributos da classe definidos como privados não podem ser acessados ou usados por 
nenhuma outra classe. Esses atributos e métodos também não podem ser visualizados pelas classes 
herdadas.
protected
Torna o membro acessível às classes do mesmo pacote ou através de herança, seus membros herdados 
não são acessíveis a outras classes fora do pacote em que foram declarados.
default (padrão)
A classe e/ou seus membros são acessíveis somente por classes do mesmo pacote, na sua declaração não 
é definido nenhum tipo de modificador, sendo este identificado pelo compilador.
abstract
Esse modificador não é aplicado nas variáveis, apenas em classes e métodos. Uma classe abstrata não 
pode ser instanciada. Se houver alguma declaração de um método como abstract (abstrato), a classe 
também deve ser marcada como abstract.
static
É usado para a criação de uma variável que poderá ser acessada por todas as instâncias de objetos desta 
classe como uma variável comum, ou seja, a variável criada será a mesma em todas as instâncias e quando 
seu conteúdo é modificado numa das instâncias, a modificação ocorre em todas as demais. E nas 
declarações de métodos ajudam no acesso direto à classe, portanto não é necessários instanciar um 
objeto para acessar o método.
final
Quando é aplicado na classe, não permite estender, nos métodos impede que o mesmo seja sobrescrito 
(overriding) na subclasse, e nos valores de variáveis não pode ser alterado depois que já tenha sido 
atribuído um valor.
Interfaces:
Métodos abstratos
Devem ser implementados por todos
Novos métodos quebram as implementações
Métodos default
São herdados a todos que implementam
Novo métodos não quebram as implementações
Herança múltipla***
Enums:
Basicamente é dicionários de dados imutável.
Não é permitido criar novas instâncias.
O construtor é sempre declarado como private.
Desenvolvimento Básico em Java 8
Por convenção, por serem objetos constantes e imutáveis (static final), os nomes são em MAIÚSCULOS.
GitHub do Professor:
https://github.com/andrelugomes
Link Projeto da Aula:
https://github.com/andrelugomes/digital-innovation-one/tree/master/caracteristicas-da-linguagem-java
Capitulo 4 - Características da linguagem II
Strings e o pacote java.lang
Objetivos da aula: String, Laços, condições e Operadores, Convenções
Requisitos Básicos: Java 11, IntelliJ 2019.1, Gradel 5.3.1
Strings:
É uma sequência de caracteres
Pacote java.lang
Introdução a condicionais:
Laços, Condicionais e Operadores
IF e IF Ternário, For, While e Do/While, Operadores Igualdade, Lógicos, Incremento, Matemáticos, 
Relacionais)
IF e IF Ternário
IF = Uma palavra reservada do Java, usado para fazer condições do código.
IF Ternário = Forma de fazer todo o if e else em uma condição.
Operadores
Operadores de Igualdade = Pode usar o operador de igualdade ==
Operadores de não igualdade = Pode usar o operadorde não igualdade ! ou ! na String
Operadores Matemáticos = + (soma), - (subtração), * (multiplicação), / (divisão), % (módulo)
Operadores Relacionais = > (maior que), < (menor que), >= (maior ou igual), <= ( menor ou igual)
Operadores Lógicos = && (significa e), || (significa ou)
Operadores de Incremento = + 1 ou ++ ou - 1 ou --
Laços de repetição:
For = Forma de fazer interações
Estrutura for = ( ; ; ) {}
Exemplo: for (int i = 0; i <= 10; i = i 1 {}
While = Significa a expressão enquanto, a verificação é feita antes.
Estrutura while = while (x < 1 {}
Do/While = Significa a expressão, faço uma coisa enquanto eu verifico a condição, a verificação e feito depois.
Estrutura do = do{} while (y++ 1
Convenções de nomes:
Nomes de Classes, Nomes de Métodos, Nomes de Variáveis
Nomes de classes
Primeira letra maiúscula e demais minúsculas
https://github.com/andrelugomes
https://github.com/andrelugomes/digital-innovation-one/archive/master.zip
Desenvolvimento Básico em Java 9
Classes com nomes compostos, primeira letra de cada nome sempre maiúscula
Nomes de Métodos
Sempre minúsculos.
Quando for nomes compostos, primeiro nome sempre será todo minúsculo, e os compostos com a primeira 
letra maiúscula.
Nomes de Variáveis
Usar nomes mais sucintos.
Sempre minúsculos.
Code Style
Checkstyle Gradle Plugin - Plugin para verificar pequenas checks do código.
https://docs.gradle.org/current/userguide/checkstyle_plugin.html 
https://github.com/checkstyle/checkstyle 
PMD Gradle Plugin - Plugin para fazer analisar mais profunda no código
https://docs.gradle.org/current/userguide/pmd_plugin.html 
Adicionar Plugins no Projeto:
Ir no arquivo build.gradle
Adicionar no código plugins = id 'checkstyle' , id 'pmd'
Configuração dos Plugins:
Checktyle:
toolVersion = (colocar a versão mais atual do site)
configFile = (caminho do arquivo xml do plugin baixado)
pmd:
ruleSetFiles = (caminho do arquivo xml do plugin baixado)
toolVersion = (colocar a versão mais atual do site)
Capitulo 5 - Debug de código
Debug de código
Debug usando IDEA IntelliJ
Primeiro é colocar o break no ponto desejado e logo depois rodar o debug ao invés do Run
Botão Resume vai até o próximo break-point, caso não tenha um break-point, ele vai ate encerrar.
Opção Step-Over faz o debug linha a linha.
Opção Step-Int entra dentro de algum método.
Opção Step-Out sai de algum método.
Opção Evaluete executa um código sem precisar executar a sua linha.
Capitulo 6 - Orientação a Objetos com Java
Introdução à aula
Paradigma Orientado a Objetos com Java:
Entender os principais conceitos de O.O.
https://docs.gradle.org/current/userguide/checkstyle_plugin.html
https://github.com/checkstyle/checkstyle
https://docs.gradle.org/current/userguide/pmd_plugin.html
Desenvolvimento Básico em Java 10
Aplicar os conceitos apresentandos.
Ver características particulares ao Java.
Requisitos Básicos:
Noções básicas de lógica de programação
Noções básicas da sintaxe do Java
Agenda:
O Paradigma OO
Construtores
Encapsulamento, Herança e Polimorfismo
This, Super, Equals e HashCode
Material da Aula:
https://github.com/marcopollivier/DigitalInnovationOne-CursoBasicoJava 
Parte 1 O Paradigma Orientação a Objetos):
"A programação Orientada a Objetos impõe disciplina sobre a transferência indireta do Controle" - Robert "Uncle 
Bob" Martin - Livro Arquitetura Limpa
"... a pilha de chamada funções... poderia ser movida para HEAP (área de memória não necessariamente ordenada 
- diferente da stack) possibilitando que as variáveis locais declaradas por uma função existissem muito depois que 
a função retornasse..." - Robert "Uncle Bob" Martin - Livro Arquitetura Limpa
"A diferença entre um Código Procedural e um O.O é bem simples. Em códigos procedurais (...) escolher o melhor 
algoritmo é o mais importante (...) Já em linguagens orientado a objetos (...) pensar no projeto (...) como se 
encaixam (...) e como serão estendidas é o que mais importa." - Maurício Aniche - Livro Orientação a Objetos e 
SOLID para Ninjas
Classe: 
Vamos entender uma classe como modelo a ser seguido. 
Uma classe vai funcionar como uma espécie de molde que nos servirá como base para construir algo.
Por exemplo. Quando pensamos em construir uma casa, nós fazemos uma planta baixa. Ela será o modelo que 
utilizaremos para construir algo concreto.
As classes funcionam de forma parecida.
Vamos a um exemplo prático.
Objeto:
Agora que entendemos que temos um modelo que podemos seguir, O que podemos fazer com esse modelo?
https://github.com/marcopollivier/DigitalInnovationOne-CursoBasicoJava
Desenvolvimento Básico em Java 11
Bom.. Nós fizemos a analogia da casa, certo ?
Depois de termos a planta baixa, nós começamos a construir.
E o resultado do que nós construímos, vamos chamar de objeto.
Quando nós utilizamos a nossa classe Pessoa - mostrada no código anterior - para criar um objeto, nós diremos 
que estamos instanciando um objeto da classe Pessoa.
E esse termo é bem simples de entender. O que acontece é que podemos criar vários objetos de uma mesma 
classe, ou seja, várias instâncias de objetos.
Atributos:
Agora vamos pensar no que nos definimos como nome. Foi tão intuitivo nós pensarmos que uma pessoa teria um 
nome que nem demos importância a ele.
O nome é uma característica de uma Pessoa e pode ser diferente de pessoa para pessoa.
O nome é um atributo da pessoa.
Métodos:
Agora vamos pensar que uma pessoa pode ter ações. Por exemplo, uma pessoa pode falar.
Pensando em um cenário mais específico, uma pessoa pode falar o seu nome.
As ações que nós definimos que uma classe pode ter, nós chamamos de métodos.
Desenvolvimento Básico em Java 12
Parte 2 Construtores
Podemos entender o termo construtor no sentido literal, afinal vamos construir um objeto.
Por meio de um construtor, criamos um objeto baseado em uma Classe e assim o alocamos em memória.
Ao criarmos um objeto dizemos que estamos instanciando um objeto.
Esse exemplo que acabamos de ver é o exemplo mais comum quando começamos a estudar construtores em Java.
E para instanciar essa classe (criar um objeto dela) fazemos o seguinte: 
Pessoa pessoa = new Pessoa();
Também podemos criar construtores parametrizados. 
Dessa forma, conseguimos definir um contrato onde sempre será obrigatório passar alguma informação na hora de 
instanciar a classe.
No exemplo abaixo temos dois construtores. Um com passagem de parâmetro e outro sem. Isso garante que 
possamos instanciar duas duas maneiras.
E existe um destrutor ?
Em Java não existe o conceito de destrutor explícito.
Lembra que falamos que quando instanciamos, estamos, na verdade, alocando o objeto em memória ?
Pois bem... Desalocar esse objeto fica por conta do GC.
Parte 3 Encapsulamento, Herança e Polimorfismo
Encapsulamento:
Desenvolvimento Básico em Java 13
Mais uma vez vamos entender o termo que estamos trabalhando ao pé da letra.
Quando falamos de encapsulamento, estamos falando efetivamente em proteger alguma informação de alguma 
forma, ou seja, com uma cápsula.
Vamos ver como podemos trabalhar com o encapsulamento nos nossos exemplo anterior da Classe Pessoa.
Na nossa classe, vamos manipular basicamente 2 atributos: (nome) (data de nascimento)
Queremos garantir a nossa implementação e que o acesso a determinados dados estão realmente protegidos do 
acesso externo.
Para esse exemplo específico:
Queremos que o nome possa ser alterado. (vamos pensar que uma pessoa pode casar e mudar seu nome)
Não queremos alterar a data de nascimento. (a pessoa nasce com ela e não pode mudar)
Queremos de alguma forma retornar a idade da pessoa.
Desenvolvimento Básico em Java 14
Herança:
Vamos agora falar de outro pilar importante da Orientação Objetos: a Herança
Como o próprio nome já diz, essa é a capacidade de uma Classe herdar o comportamento de outra.
Exemplo:
Vamos pensar em um cenário onde queremos informações de diversos tipos de veículos.
Por exemplo: quero colocar a quantidade de portas para o casode carros e as cilindradas em casos de 
motocicletas.
Desenvolvimento Básico em Java 15
Desenvolvimento Básico em Java 16
Herança vs. Composição:
Existe um vasto e antigo debate em relação a utilização de herança. Algumas bibliografias inclusive defendem que 
ela nunca deve ser utilizada.
E o grande problema tem relação com o nosso tópico anterior: o encapsulamento.
Polimorfismo:
Quando falamos em herança, o verbo ser é mandatório na nossa forma de falar sobre a classe.
Entendemos, portanto, que um carro é um veículo e uma motocicleta também é um veículo.
Agora no nosso exemplo, nós queremos colocar mais uma característica e uma ação que podem ser comuns aos 
dois, mas com algumas peculiaridades.
Agora vamos querer calcular o valor aproximado do IPVA dos nosso diferentes tipos de veículos.
Tanto carros quanto motos pagam IPVA, certo ? E o cálculo é baseado no valor venal do veículo.
Portanto a primeira conclusão que chegamos é que temos uma característica nova na nossa Classe de Veículos, 
agora temos o valor venal, portanto:
Desenvolvimento Básico em Java 17
Mas precisamos calcular a nossa precisão de imposto.
Vamos partir do princípio que (valores hipotéticos):
Um veículo teria que pagar, no mínimo, 0,01% do valor venal de IPVA
Um carro teria que pagar, no mínimo, 0,07% do valor venal de IPVA
Uma moto teria que pagar, no mínimo, 0,03% do valor venal de IPVA
Para isso precisaremos definir implementações diferentes de acordo com a classe que estamos trabalhando.
E é onde entraria o Polimorfismo.
Ele nos garantirá a capacidade de um objeto ser referenciado de múltiplas formas.
O Java será capaz de identificar qual objeto foi instanciado e, assim, escolher qual método será utilizado.
Desenvolvimento Básico em Java 18
Parte 4 Aprenda as características específicas em orientação a objetos
This, Super, Equals e HashCode
This:
Quando estamos trabalhando com o termo this, no Java, estamos, na verdade, fazendo uma auto referência.
Esse conceito faz mais sentido quando estamos falando de construtores e métodos, exemplo:
Desenvolvimento Básico em Java 19
Super:
Analogamente ao This, quando falamos no Super, também estamos fazendo uma referência, mas dessa vez 
estamos fazendo referência a superclasse em um cenário de herança.
Atenção! - Como em Java, todas as nossas classes herdam de Object, se usamos o super em uma classe que não 
tem um extends explícito, estamos fazendo referência ao Object.
Vamos mudar um pouco o nosso exemplo.
Primeiro vamos transformar a nossa classe veículo.
Ela vai passar a ser uma classe abstrata e, portanto, não poderá mais ser instanciada.
E também vamos definir que o construtor dessa classe sempre irá esperar o modelo, a marca e o valor venal.
Desenvolvimento Básico em Java 20
Equals:
Como sabemos, todas as classes em Java herdam de Object. E, portanto, tem por padrão alguns métodos.
Um deles é o equals que serve para fazer comparações entre objetos.
Entretanto esse método possui algumas peculiaridades.
Por padrão, quando estamos comparando dois objetos, estamos comparando a referência deles.
Então se instanciarmos dois carros, por mais que eles tenham exatamente as mesmas informações, o Java não é 
capaz de identificar.
Mas poderíamos sobrescrever o método equals() para que nossa lógica funcione do jeito que gostaríamos.
Tenha em mente que é uma boa prática sobrescrever este método.
Desenvolvimento Básico em Java 21
HashCode:
Quando falamos em hashCode, precisamos pensar em um código gerado que garanta um caráter único ao nosso 
objeto. 
Essa pode ser uma forma muito interessante para que possamos comparar se realmente um objeto é igual ao 
outro.
Capitulo 7 - Aprenda sobre S.O.L.I.D com Java
Objetivos da Aula:
Entender os motivos da utilização
Desenvolvimento Básico em Java 22
Apresentar os Princípios do SOLID
Apresentar Exemplos
Requisitos Básicos:
Lógica de Programação
Java e IDE de sua preferência Eclipse, IntelliJ..)
Orientação a Objetos Básico
Parte 1 O que é SOLID?
SOLID é um acrônimo dos princípios da programação orientada a objetos descritas por Robert C. Martin ("Uncle 
Bob")
Auxiliam o programador a escrever códigos mais limpos, facilitando a refatoração e estimulando o 
reaproveitamento do código.
SOLID
S.R.P Princípio da Responsabilidade Única)
O.C.P Princípio Aberto Fechado)
L.S.P Princípio da Substituição de Liskov)
I.S.P Princípio da Segregação da Interface)
D.I.P Princípio da Inversão da Dependência)
 
Parte 2 Conceito Single Responsibility Principle S.R.P
"A class should have one, and only one, reason to change." Uma classe deve ter um, e somente um, motivo para 
mudar)
A classe deve possuir uma única responsabilidade dentro do software.
Parte 3 Conceito Open Closed Principle O.C.P
"You should be able to extend a classes behavior, without modifying it." Você deve poder estender um 
comportamento de classe, sem modificá-lo.)
Desenvolvimento Básico em Java 23
Objetos devem estar abertos para extensão, mas fechados para modificação.
Quando novos comportamentos precisam ser adicionados no software, devemos estender e não alterar o código 
fonte original.
Parte 4 Conceito Liskov Substitution Principle L.S.P
"Derived classes must be substitutable for their base classes." Classes derivadas devem ser substituíveis por suas 
classes base.)
O princípio da substituição de Liskov foi introduzido por Barbara Liskov em 1987 "Se para cada objeto o1 do tipo S 
há um objeto o2 do tipo T de forma que, para todos os programas P, o comportamento de P é inalterado quando o1 
é substituído por o2, então S é um subtipo de T."
Parte 5 Conceito Interface Segregation Principle I.S.P
"Make fine grained interfaces that are cliente specific." Faça interfaces refinadas que são específicas do cliente.)
Uma classe não deve ser forçada a implementar interfaces e métodos que não serão utilizados.
É melhor criar interfaces mais específicas ao invés de termos uma única interface genérica.
 
Parte 6 Conceito Dependency Inversion Principle D.I.P
"Depende on astractions, not on concretions." Dependa de abstrações e não de implementações.)
Um módulo de alto nível não deve depender de módulos de baixo nível, ambos devem depender da abstração.
PS Inversão de Dependência não é igual a Injeção de Dependência.
Capitulo 8 - Trabalhando com Datas
Objetivos da aula:
Aprender a manipular datas
Aprender a formatar datas
Entender a evolução do tratamento de datas no Java
Requisitos Básicos:
Lógica de programação
Sintaxe da linguagem
Material da Aula:
https://github.com/marcopollivier/DigitalInnovationOne-AulaJava 
Parte 1 O java.util.Date
Antes de qualquer coisa, vamos definir aqui o ponto que estamos.
A implementação do java.util.Date está na JDK desde sua versão 1.0
Ou seja... É de se esperar que algumas coisas não se mostrem tão interessantes nos dias atuais, dado a sua idade.
Nesse primeiro momento, vamos ver como podemos trabalhar com a manipulação de datas a Classe java.util.Date 
do Java.
E o nosso primeiro passo é dar uma olhada na documentação oficial.
Vamos usar como referência o Java 8.
https://docs.oracle.com/javase/8/docs/api/java/util/Date.html 
https://github.com/marcopollivier/DigitalInnovationOne-AulaJava
http://java.util.date/
http://java.util.date/
https://docs.oracle.com/javase/8/docs/api/java/util/Date.html
Desenvolvimento Básico em Java 24
Date( )
Este construtor vai alocar um objeto da classe Date e o inicializará com o milissegundo mais próximo do período da 
sua execução.
Date (long date)
Diferente do construtor anterior, esse construtor espera que você passe os milissegundos com base padrão de 
tempo (epoch) que usa como referência 1 de janeiro de 1970 000000.
O que é o Epoch ? - "O epoch timestamp é um padrão largamente aceito para representar uma data como um 
inteiro 32-bits a partir do início do Unix Epoch..."
Vamos testar como base no System.currentTimeMillis( )
Esse método estático vai nos retornar o milissegundomais próximo de sua execução com base no Sistema 
Operacional.
Desenvolvimento Básico em Java 25
Métodos úteis
Alguns métodos da classe Date são muito úteis e serão usados com frequência durante a manipulação de datas. 
São eles:
Método: after(Date) - Retorno: boolean - Descrição: Checa se o objeto Data de referêmcia é posterior ao 
comparado
Método: before(Date - Retorno: boolean - Descrição: Checa se o objeto de referência é anterior ao comparado
Método: compareTo(Date) - Retorno: int - Descrição: Compara dois objetos Data
Método: equals(Date) - Retorno: boolean - Descrição: Checa se os objetos são iguais
Método: getTime( ) - Retorno: long - Descrição: Retorna a data em milissegundos
Método: setTime(long) - Retorno: void - Descrição: Define uma data com basae em milissegundos
Método: from(Instante) - Retorno: static Date - Descrição: Define uma data com base em um Instant
Método: toInstant( ) - Retorno: Instant - Descrição: Retorna um instant com base em um Date
Desenvolvimento Básico em Java 26
Classe Instant
Surgiu na JDK 1.8
Imutável e Thread safe.
Modela um ponto instantâneo de uma linha do tempo.
Indicado para gravar marcações temporais em eventos da sua aplicação.
Referências:
https://docs.oracle.com/javase/8/docs/api/java/util/Date.html 
https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#currentTimeMillis-- 
https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html 
https://javatpoint.com/java-util-date 
Parte 2 O java.util.Calendar
https://docs.oracle.com/javase/8/docs/api/java/util/Date.html
https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#currentTimeMillis--
https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html
https://javatpoint.com/java-util-date
Desenvolvimento Básico em Java 27
Já na JDK 1.1 foi observada a necessidade de facilitar alguns recursos que a class Date oferecia.
Sendo assim, a classe Calendar foi criada.
Com isso uma série de métodos e construtores da classe Date foi depreciada. Por exemplo o contrutor Date(int 
year, int month, int date).
Calendar é uma classe abstrata que provê métodos para converter data entre um instante específico.
O Calendar possui alguns campos específicos para manipulação como MONTH, YEAR, HOUR etc.
Imprimindo datas e horas
Aqui vão algumas maneiras de se converter o resultado de um objeto Calendar
Desenvolvimento Básico em Java 28
Referências:
https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html 
https://www.javatpoint.com/java-util-calendar 
https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
Parte 3 O java.text.DateFormat
Nesse ponto em que estamos existem, basicamente, duas classes para formatação de datas. O DateFormat e o 
SimpleDateFormat.
Ambos oferecem maneiras de formatar e parsear a saída das datas.
SimpleDateFormat
Traz uma grande facilidade que é definir um padrão de formatação para a saída de data que você deseja.
https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html
https://www.javatpoint.com/java-util-calendar
https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
Desenvolvimento Básico em Java 29
Referências:
https://docs.oracle.com/javase/8/docs/api/java/text/DateFormat.html 
https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html 
Parte 4 Datas no Java 8
O Java 9 veio com uma série de novidades para facilitar o trabalho com Datas.
E a grande melhoria está no pacote java.time que foi herdado do projeto Joda Time.
https://www.joda.org/joda-time/ 
Trabalhar com datas nunca foi tão fácil com esse novo pacote.
Nele destacam-se três classes: LocalDate, LocalTime, LocalDateTime
Basicamente, o que tínhamos até então eram as classes que vimos até agora: Date e Calendar.
Com o uso constante, elas se mostram confusas e trabalhosas.
Além de serem mutáveis.
LocalDate
É uma classe imutável para representar uma data. 
Seu formato padrão é yyyy-MM-dd
 LocalTime 
É uma classe imutável que representa um padrão de hora-minuto-segundo
Pode ser representado até o nível de nanosegundos. 122210123212345
Sua utilização é similar ao LocalDate
LocalDateTime
Funciona como uma espécie de junção entre o LocalTime e o LocalDate.
Também é uma classe imutável e você consegue trabalhar com dia e hora de uma só vez.
Você pode manipular a data e hora com precisão de nanosegundos. 2nd October 2007 at 
1345.30.123456789
Referências:
https://docs.oracle.com/javase/8/docs/api/java/text/DateFormat.html
https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html
https://www.joda.org/joda-time/
Desenvolvimento Básico em Java 30
https://docs.oracle.com/javase/8/docs/api/java/time/LocalTime.html 
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html 
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html 
Capitulo 9 - Trabalhando com Arrays
Objetivos da Aula:
O que é um array?
Declaração de arrays
Coprimento do array
Percorrendo arrays
Arrays multidimensionais
O que é um array?
Arrays ou Matriz, é uma estrutura de dados que nos permite organizar valores na memória
Fazem parte da biblioteca java.util que é nativa do Java.
Armazenam elementos do mesmo tipo.
Podem ser unidimensionais ou multidimensionais.
Detalhamento de um Array
Cada item em um array é chamado de elemento.
Cada elemento é acessado pela posição numérica (índice).
O índice inicia a partir de 0.
Ao se declarar um array, todos índices são inicializados em 0.
Arrays não podem mudar de tamanho, a partir do momento que um array foi criada, ela não pode mudar de 
tamanho.
Se você precisar de mais espaço, será necessário criar uma nova array e, antes de se referir ela, copie os 
elementos da array velha.
Declaração de arrays
Utilizando o operador "new"
Exemplo1 dataType[ ] arrayName = new dataType[arraySize];
int [ ] meuArray = new int[7];
Exemplo2 dataType[ ] arrayName = {value0, value1, ..., valueN;
int [ ] meuArray = 12,32,54,6,8,89,64;
Para alterar o valor de um elemento específico, coloque o índice desse elemento
Exemplo1 meuArray[0] = 50;
Comprimento do array
Para descobrir quantos elementos um array possui, use a propriedade length.
Exemplo1 System.out.println(meuArray.length);
https://docs.oracle.com/javase/8/docs/api/java/time/LocalTime.html
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html
Desenvolvimento Básico em Java 31
Percorrendo arrays
Para processar um array, devemos usar um laço de repetição (for, for each, etc)
Exemplo com for: Utilizamos uma variável de controle (contador), que vai de 0 até o número de posições do array.
public class MyClass {
public static void main(String[ ] args) {
int [ ] meuArray = 12,32,54,6,8,89,64;
for (int i=0; i<7; i++){
System.out.println(meuArray[i]);
}
 }
 }
Arrays multidimensionais
Um array multidimensional é um array contendo um ou mais arrays internos.
Exemplo1 int[ ] [ ] meuArrayMulti = { { 1,2,3,4, 5,6,7 };
meuArrayMulti é um array com dois arrays como seus elementos.
Processando um array multidimensional
public class MyClass {
public static void main(String[ ] args) {
int [ ] [ ] meuArrayMulti = { 1,2,3,4, 5,6,7 };
for (int i=0; i< meuArrayMulti.length; ++i) {
 for (int j= 0; j < meuArrayMulti[i].length; ++j) {
System.out.println(meuArrayMulti[i][j]);
}
 }
 }
 }
Capitulo 10 - Tratamento de Exceções
Objetivos da Aula:
Entender o funcionamento de Exceções em Java
Aprender quando usar exceções em Java
Qualificar seu conhecimento
Requisitos Básicos:
Básico de Orientação a Objeto
Básico de métodos encadeados
Básico de algoritmos
Parte 1 Tratamento de Exceções
Exceções são todos os erros que ocorrem durante o processamento de um método que podem ser esperados ou 
não esperados. Como o termo já diz, "Exceptions" são exceções. Falhas que não devem ocorrer rotineiramente no 
Desenvolvimento Básico em Java 32
fluxo de um sistema.Parte 2 Tratamento de Exceções
Checked Exceptions
São exceções esperadas, cujo fluxo ou método de um sistema foi preparado para receber. Um Bom exemplo é uma 
exceção de negócio, onde se deseja informar um erro caso a exceção esperada ocorra.
Desenvolvimento Básico em Java 33
Unchecked Exceptions
São exceções não esperadas para o fluxo ou método de um sistema, um bom exemplo é a famosa 
NullPointException que ocorre quando se tenta acessar uma referência de memória vazia, ou recuperar uma 
instância que não existe, dentre outros motivos.
Bloco Try catch
O bloco try catch sempre é utilizado quando no processo que será executado dentro de um método é esperado um 
erro, então cria-se um bloco "protegido" onde qualquer erro que ocorra dentro do trecho "try" é direcionado para o 
trecho "catch" e sofrerá o devido tratamento de erro.
Desenvolvimento Básico em Java 34
Parte 3 Tratamento de Exceções
Finally
O finally é um bloco de código que pode ou não ser utilizado junto ao try catch, estre trecho de código sempre será
executado independente se ocorrer erro ou não dentro do fluxo onde existe o try catch. Normalmente o finally é 
usado para liberar recursos ou para dar continuidade em um fluxo que deve ocorrer independente de erro.
Throw e Throws
Throws - É a assinatura do método que será retornado caso ocorra erro para o método que fez a chamada, dentro 
de um fluxo encadeado.
Throw - É usado para lançar a exceção desejada, juntamente com a mensagem de erro, para o método que fez a 
chamada.
Desenvolvimento Básico em Java 35

Outros materiais