Você está na página 1de 92

Java Platform

Parte 01

Sintaxe, OOP,
Encapsulamento e IDE
Esta unidade contém 7 exercícios:
● HelloWorld
● Variáveis e tipos primitivos
● Controles de Fluxo
● Orientação a Objetos
● Encapsulamento TEMPLATE 2
● Eclipse
● Pacotes e JavaDoc

Exercícios
Introdução a Linguagem Java
Objetivos

• O que é Java

• Vantagens e desvantagens

• Máquina Virtual

• Compilar e executar programas Java

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Breve Histórico

J2SE 5 (1.5)
JDK 1.1 J2SE 1.3 Generics
Inner classes HotSpot JVM Metadata
Java Beans JNDI Interface Enumerations
JDBC Java Sound API Variable
RMI Debugging Arguments
Primeira Reflection Architecture For-Each
Versão (Oak) 1997 2000 2004
1995

1996 1998 2002


JDK 1.0 J2SE 1.2 J2SE 1.4
Swing API Regular Expressions
Compilador JIT IPV6
Java Plug-In Logging API
Collections XML/XSLT
Framework Security/Criptography
Java Web Start

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Breve Histórico

J2SE 8
Lambda
Oracle compra Streams
a Sun NIO
2010 2013

2006 2011 21/09/2017


J2SE 6 J2SE 7 J2SE 9
Performance Strings in Switch Logging Unificado
JDBC 4.0 Melhorias Try Catch Reactive Streams
Melhorias GUI Simplificações de REPL
Argumentos
Underscore in
Numerais Literais

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Java Release Train

Update-releases a cada trimestre, feature-releases a cada semestre e long-


term support releases a cada 3 anos.

J2SE 11 J2SE 13
Dynamic class-file constants Switch Expressions
Nest-based Access Control Text Blocks
Dynamic class-file constants Dynamic CDS Archives
10-2018 09-2019

03-2018 04-2019
J2SE 10 J2SE 12
var Constant API
Garbage Colector

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


A Plataforma Java

Java Standard Java Enterprise


JavaCard Java Micro Edition
Edition Edition
JC J2ME
J2SE J2EE

JCVM KVM JVM JVM HotSpot VM

Java ME e Raspberry PI https://www.youtube.com/watch?v=CuTZ5xIjBKI


VM Proprietária JRockit: https://en.wikipedia.org/wiki/JRockit

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Características

Simples: sintaxe baseada no C


Orientada a Objetos: baseada em objetos, interfaces, heranças e todos demais
conceitos.
Distribuída: facilidade no acesso a implementações remotas.
Suporte a Concorrência: threads com poder de sincronização.
Dinâmica: adaptável ao meio.
Independente de Plataforma: bytecode interpretado pela máquina virtual.
Portável: arquitetura neutra e interface para bibliotecas de SO
Alta Performance: bytecodes já fazem parte do início do sistema Máquinas
virtuais otimizadas oferecem maior desempenho.
Robusta: fortemente tipada e compilação criteriosa.
Segura: criptografia e implementações nos containers.

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Funcionamento

Código Java

Ambiente de
Desenvolvimento

Compilador

Distribuição Bytecode Java

Máquina Virtual (Core Runtime + Libraries)

Windows Linux Mac

Execução

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Graal VM

Execução de várias linguagens de programação em uma mesma plataforma,


permitindo compartilhar recursos entre si. Conta com ferramentas de
desempenho.

https://imasters.com.br/desenvolvimento/graalvm-todas-as-linguagens-em-um-lugar-so/?trace=1519021197&source=single

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Graal VM

JAVA R

const express = require('express');


const app = express();
app.listen(3000);
app.get('/', function(req, res) {
var text = 'Hello World!';
const BigInteger = Java.type('java.math.BigInteger');
text += BigInteger.valueOf(2).pow(100).toString(16);
text += Polyglot.eval('R', 'runif(100)')[0];
res.send(text);
});

JAVASCRIPT

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Conceitos

Bytecode (.class): código intermediário entre o código fonte e o código de


máquina.
Compilador: Responsável pela geração do bytecode (*.class).
JVM (Java Virtual Machine): Máquina virtual do Java, responsável pela tradução
do bytecode.
Classpath: caminhos das classes especificado para a JVM.
JDK (Java Development Kit): ferramentas necessárias para o desenvolvimento
Java.
JRE (Java Runtime Environment): provê o ambiente de execução de uma
aplicação Java.

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


TEMPLATE 2

HelloWorld

Exercício 01
Exercício Hello World em Java

public class HelloWorld {

public static void main(String[] args) {

System.out.println("Hello World");

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Rodando seu programa

// compilador
> javac HelloWorld.java
// Gera HelloWorld.class

// virtual machine (JVM)


TEMPLATE 2

> java HelloWorld

// ver o bytecode
> javap -c HelloWorld
Convenção de Linguagem
Na linguagem Java é utilizada a seguinte convenção para formação de
identificadores:

Constantes com todas as letras em maiúsculo: CONSTANTE


public static final int QUANTIDADE_MAXIMA = 100;

Variáveis começam com letra minúscula:


String nomeUsuario;

Classes começam com letra maiúscula:


public class Usuario { //... }

Métodos começam com letra minúscula:


public void recuperarUsuario( int codigoUsuario ) { //...}

Para nomes compostos, cada palavra começa com letra maiúscula:


String enderecoCompleto;

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Variáveis e Tipos Primitivos
Objetivos

• Declaração e atribuição de valores

• Operadores

• Casting e comparação de variáveis

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Declaração de Atributos

[private] tipo nomeDoAtributo [= inicialização];

Padrão
Primeira letra minúscula, demais palavras com primeira letra maiúscula.

private int numero;

public final int tamanhoMaximo = 15;

private String nome ="Maria da Silva";

double raio = 6.5;

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Tipos Primitivos

Tipo Conteúdo Valor Padrão Tamanho em Bits Mínimo Máximo

boolean Valor lógico false 8 - -

char Caracter unicode \u0000 16 \u0000 \uFFFF

byte Inteiro com sinal 0 8 2-7 1-2-7

short Inteiro com sinal 0 16 2-15 2-15-1

int Inteiro com sinal 0 32 2-31 2-31-1

long Inteiro com sinal 0 64 2-63 2-63-1

float Ponto flutuante 0.0 32 IEEE 754 IEEE 754

double Ponto flutuante 0.0 64 IEEE 754 IEEE 754

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Escolha do Tipo Adequado

Gangnam Style se tornou o vídeo mais visto do YouTube, ultrapassando a


barreira de um bilhão de visualizações no final de 2012. Esse número só
cresceu desde então, até chegar a um limite que o Google não previa...
O YouTube usa uma base 32-bit para as visualizações. Nela, é possível
armazenar os números de -2.147.483.648 (valor negativo) até 2.147.483.647
(valor positivo).
http://gizmodo.uol.com.br/contador-youtube-gangnam-style/

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Operadores
Prec Operador Operando Assoc. Operação
1 ++ , -- A D In/decremento unário

+,- A D Mais/menos unário (sinal)

~ I D Complemento de 1

! B D Complemento lógico (not)

(tipo) O D Cast (Conversão)

2 *, /, % A,A E Multiplicação, divisão, modulo


3 +,- A,A E Adição, subtração

+ S,S E Concatenação de strings

4 << I,I E Shift left

>> I,I E Shift right

>>> I,I E Shift right sem sinal

5 <, <= A,A E Menor que, menor ou igual a

> , >= A,A E Maior que, maior ou igual a

instanceof O,C E Comparação de tipos

A = Aritmético; I = inteiro; B = Boolean; O = Object; S = String; C = Classe; P = Primitivo; Q = Qualquer, V = Variável


Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)
Operadores
Prec Operador Operando Assoc. Operação
6 ==, != P,P E Igual/diferente (valores)

==, != O,O E Igual/diferente (referência ao objeto)

7 & I,I E E (bits)


& B,B E E (lógico)
8 ^ I,I E XOR (bits)
^ B,B E XOR (lógico)
9 | I,I E OU (bits)
| B,B E OU (lógico)
10 && B,B E E (lógico)
11 || B,B E OU (lógico)
12 ?: B,Q,Q E Operador condicional (ternário)
13 = V,Q D Atribuição
*=, /=, %=, +=, -=,
<<=, >>=, >>>=, V,Q D Atribuição com operação
&=, ^=, |=

A = Aritmético; I = inteiro; B = Boolean; O = Object; S = String; C = Classe; P = Primitivo; Q = Qualquer, V = Variável

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Conversão de Tipos Primitivos Implícito
Conversão: modificação do tipo de uma variável de forma implícita.
Atribuições

int i;
double d;
i = 100;
d = i;

Operações Aritméticas

byte b = 2; Promoção de Tipos


int i = 5;
float f = 11.1f;
double d = b * i – f; // O resultado final desta operação é um float.
O valor é implicitamente convertido p/ double

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Conversão de Tipos Primitivos Casting

int i = 16777473;
byte b = (byte) i;

long l = 1200;
int i = (int) l;

Casting:
modificação do tipo de um variável de forma explícita.

Representação de Literais

1 inteiro
1f float
1l long
1d ou 1.0 double

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Conversão e Casting de Tipos Primitivos

char

int long float double

byte short

conversão
casting

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


TEMPLATE 2

Variáveis e tipos primitivos

Exercício 02
Exercício Variáveis e Tipos Primitivos

class MediaGastos {

public static void main(String[] args) {

int gastosP1 = 15000;


int gastosP2 = 23000,
gastosP3 = 17000;
int gastosTotal = gastosP1 + gastosP2 + gastosP3;
int media = gastosTotal / 3;

System.out.println("Total de gastos = " + gastosTotal);


System.out.println("Média de gastos = " + media);
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Exercício extra
Converta um número inteiro positivo de decimal para binário.
Ex.: 12 (decimal) = 1100 (binário)
Utilize:
% (módulo)
Integer.toString(int valor);

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Controle de Fluxo
Objetivos

• Controlar fluxo com if e else

• Loops com for e while

• Controle de fluxo com break e continue

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Estruturas de Decisão
if / else

if ( expressao_boolean ) {
//...
} else {
//...
}

switch

switch (key) {
case value:
//<bloco de comandos>
break;
default :
//<bloco de comandos>
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Estruturas de Laço
while

while(expressao_booleana) {
<bloco de comandos>
}

do / while

do {
<bloco de comandos>
} while(expressao_booleana)

for

for (<statement_inicializacao> [,<statement_inicializacao n>];


<condicao_parada>;<expressao_incremento> [,<expressao_incremento n>]) {
<bloco de comandos>
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Break e Continue
break
Comando de saída de um laço ou de um switch
continue
Comando de salto para a próxima iteração do laço.

Label Loop
for1: for(int i = 0; i < 10; i++){
for2: for(int j = 0; j < 10;j++){
if(i == 8 && j == 6)
break for1;//Nesse caso ele para o primeiro for
if( i == j)
continue for2;//Aqui ele pula uma vez no segundo for
}
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


TEMPLATE 2

Controles de Fluxo

Exercício 03
Exercício For Loop 1
class Loop1 {

public static void main(String[] args) {

for(int x = 0; x <= 10; x++){


System.out.println(x);
}

}
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Exercício For Loop 2
class Loop2 {

public static void main(String[] args) {


int total = 0;
for(int x = 1; x <= 1000; x++){
total += x;
}
System.out.println(total);
}
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Exercício For Loop 3
class Loop3 {

public static void main(String[] args) {


for(int x = 3; x <= 100; x += 3){
System.out.println(x);
}

}
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Exercício Fatorial
class FatorialLong {

public static void main(String[] args) {


long fatorial = 1;
for (int n = 1; n <=40; n++){
fatorial *= n;
System.out.println(fatorial);
}
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Orientação a Objetos
Objetivos

• O que é e para que serve orientação a objetos

• Classes, atributos e comportamentos

• Variáveis e objetos na memória

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Diagrama de Classes
• Define os recursos essenciais do sistema.
• Define o relacionamento entre os recursos.
• Insumo para geração de código.
• Representação de uma engenharia reversa.
• Provê um foco de ataque para os outros diagramas.

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Modelamento de Classes
Possui 3 compartimentos das quais podemos ter apenas o nome,
nome e atributos, nome e operações ou ainda de forma completa, isto
é, nome, atributos e operações.

Nome Nome Nome

Atributos Atributos

Operações
Nome

Operações

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Classe
É identificado por seu nome. Para evitar classes com nomes repetidos
pode-se utilizar o pacote para diferenciação:

Nome Pacote::Nome

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Declaração de Classe
[modificadores] class NomeDaClasse
{
//...
}

Padrão
Primeira letra de cada palavra em maiúsculo.

public class Curso


{
//...
}

class Turma
{
//...
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Diagrama de Classes - Atributos
Visibilidade:

•- Privado: somente dentro da própria classe


•~ Pacote: somente dentro do mesmo pacote
•+ Público: dentro do sistema
•# Protegido: dentro da herança

É possível utilizar valores padrão/inicializadores (=).

Atributos estáticos tem representação sublinhada.

Nome Física

-idade: int +Gravidade: float = 9,6

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Declaração de Métodos

[modificadores] retorno nomeDoMetodo([Argumentos]) [throws Exceções] {


//…
[retorno valorRetorno]
}

Padrão
Primeira letra minúscula, demais palavras com primeira letra maiúscula.

private int obterNumeroAlunosTurma ( long codigoTurma ) {//...}


public String getNomeAluno( int codigoAluno ) {//...}
public void inserirAluno ( String nomeAluno ) throws Exception {//...}
public static long obterNumeroInstancias () {//...}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Diagrama de Classes - Operações
Visibilidade:

•- Privado: somente dentro da própria classe


•~ Pacote: somente dentro do mesmo pacote
•+ Público: dentro do sistema
•# Protegido: dentro da herança

Nome precisa ser único ou implementar sobrecarga (assinatura da


operação diferente).

Nome Física

+getIdade(): int #getGravidade(): double

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Passagem de Parâmetros
Toda passagem de parâmetro é realizado por cópia do argumento.

Tipos Primitivos: é passado uma cópia do tipo primitivo.

Referências a Objetos: é passado uma cópia da referência.

• Caso a referência seja alterada para outro objeto, não afetará a


referência original.
• Caso o objeto apontado para referência seja alterado, essa
alteração será perpetuada.

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Passagem de Parâmetros
Exemplo:

public class Main {


public static void main(String[] args) {
int a = 10;
incrementar(a);
System.out.println("a="+a);

Cliente cliente = new Cliente();


cliente.setNome("João");
alterarNome(cliente);
System.out.println(cliente.getNome());

public static void alterarNome(Cliente cliente){


cliente.setNome("José");
}

public static void incrementar(int a){


a++;
}
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Exemplo de Classe Completa
public class Aluno {

private int codigoAluno;


private String nomeAluno;

public int getCodigoAluno() {


return codigoAluno;
}

public void setCodigoAluno( int param ) {


codigoAluno = param;
}

public String getNomeAluno() {


return nomeAluno;
}

public void setNomeAluno( String param ) {


nomeAluno = param;
}
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Referências de Objetos
Atribuições entre variáveis de um mesmo tipo não criam novos objetos,
mas sim cópias da referência para o mesmo objeto.

Cliente cliente1 = new Cliente();


cliente1.setNome("João");
Cliente cliente2 = null;
Cliente cliente3 = cliente1;

cliente1 Cliente
Nome: João
cliente2

cliente3

Memória Stack Memória Heap

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Variável This
A variável this é uma referência para a instância corrente (objeto).

Utilizado em três situações:

1. Para diferenciar um atributo (variável da classe) de uma variável local


ou de um parâmetro.
2. Para passar o objeto corrente como parâmetro.
3. Para encadear chamadas de construtores.

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Atributos e Variáveis Locais

public class Pessoa


{
private String nome; // atributo de instância

public void setNome( String nome )


{
// this.nome -> atributo da classe
// nome -> variável local ao método
this.nome = nome;
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Boas Práticas - Classes em Java

Estrutura e ordem:
▪ Pacote
▪ Importações
▪ Declaração de Classe(s)
É permitido apenas uma única classe pública por arquivo fonte.
Classe pública com o mesmo nome que o arquivo fonte.
Classe Pessoa contida no arquivo fonte Pessoa.java.

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


TEMPLATE 2

Orientação a Objetos

Exercício 04
Classe ContaBancaria
public class ContaBancaria {

protected double saldo;

public void saque(double valor){


saldo -= valor;
}

public void deposita(double valor){


saldo += valor;
}

public double getSaldo(){


return saldo;
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Classe TesteContas
public class TesteContas {

public static void main(String[] args) {

ContaBancaria conta = new ContaBancaria();


conta.deposita(100);
System.out.println(conta.getSaldo());
conta.saque(10);
System.out.println(conta.getSaldo());

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Adicionar nova ContaBancaria

ContaBancaria c2 = new ContaBancaria();


c2.saldo = 1000.0;
System.out.println(c2.getSaldo());
c1.saldo = 200.0;
System.out.println(c1.getSaldo());

c2 = c1;
System.out.println(c1.getSaldo());
System.out.println(c2.getSaldo());

if(c1 == c2){
System.out.println("iguais");
} else {
System.out.println("diferentes");
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Encapsulamento
Objetivos

• Acesso com modificadores private e public aos métodos, atributos e


construtores

• Métodos de acesso a atributos do tipo getters e setters

• Construtores para classes

• Variáveis e métodos estáticos (utilitários)

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Modificadores de Acesso
Definem o acesso que outras classes terão à classe, a seus métodos e
seus atributos.

public: visível para qualquer classe sem restrições. Pode ser usado por classes, atributos
e métodos;
protected: visível para todas as classes do mesmo pacote e para as subclasses. Pode ser
usado por atributos e métodos apenas;
Nenhum modificador definido (default): visível para todas as classes do mesmo pacote.
Pode ser usado por classes, atributos e métodos;
private: visível somente para a própria classe. Pode ser usado por classes internas,
atributos e métodos;
final: indica única atribuição sem possibilidade de alteração (constante);
static: indica que o componente é da classe e não da instância (tipos estáticos).

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Comparação de Modificadores

Modificador Classe Atributo Método Construtor Blocos livres

public sim sim sim sim não

protected não sim sim sim não

(default) sim sim sim sim sim

private não sim sim sim não

final sim sim sim não não

abstract sim não sim não não

static não sim sim não sim

synchronized não não sim não sim

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Getters and Setters
Métodos que restringem o acesso aos atributos de instância da classe.
Promovem encapsulamento.

public void setTitular(String titular) {


this.titular = titular;
}
public double getSaldo() {
return this.saldo;
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Uso do Lombok
Anotação que elimina o uso de códigos repetitivos nas construções de classes,
como os métodos getters e setters, toString, etc.

http://blog.caelum.com.br/java-menos-verboso-com-lombok/
https://projectlombok.org

Instalação simples, download lombok.jar e inclua no projeto.

@EqualsAndHashCode @ToString

public class Contato {


@Getter @Setter
private Long id;

@Getter @Setter
private String nome;

@Getter @Setter
private Calendar dataNascimento;
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Construtor
Representa a inicialização da classe que solicita à JVM a alocação de espaço
em memória.
Toda classe possui, por definição, um construtor padrão (ou construtor default),
público e sem argumentos.
Podem ser definidos vários construtores para uma classe.

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Declaração do Construtor

[modificadores] NomeDaClasse([Argumentos]) [throws Exceções] {


//…
[retorno valorRetorno]
}

Padrão
Possui o mesmo nome da classe e não possui retorno.

public Turma () {//...}

public Turma ( long codigoTurma ) {//...}

public Curso( int codigoCurso ) throws Exception {//...}

public Curso ( String nomeCurso, int codigoCurso ) {//...}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Particularidades do Construtor
O construtor default somente é criado quando nenhum outro construtor for
definido para a classe.
Uma classe pode ter quantos construtores necessitar, variando-se os
parâmetros recebidos (ou sua assinatura).
Implicitamente, ou mesmo explicitamente, o construtor sempre chama o
construtor da sua super classe.

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Modificadores Static
Variáveis: define que uma variável terá somente uma instância em toda
máquina virtual (variável de classe).

Métodos: define que o método pertence à classe, não às instâncias.

double cosseno = Math.cos( 3.14 );

Inicializadores estáticos: trecho de código executado apenas na primeira


utilização da classe.

public class ClasseQualquer {


private static String staticString = null;
private String string = null;
static {
staticString ="A classe foi carregada."
//string ="Esta linha não compila."
}
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Modificadores Final
Classe: define que uma classe não pode ser estendida.

public final class Utilitario {


// esta classe não pode ser estendida
}

Método: define que um método não pode ser sobrescrito.

public final void metodoFinal() {


// este método não pode ser sobrescrito
}

Variável: define que uma variável não pode ser modificada depois de receber
um valor (constante).

Para tipos primitivos não podem receber outro valor.


Para referências, não podem referenciar um outro objeto, mas o conteúdo do
objeto original pode ser alterado.

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


TEMPLATE 2

Encapsulamento

Exercício 05
Exercício Encapsulamento
Encapsular e adicionar atributos:

private String titular;


private double saldo;
private static int identificador;

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Exercício Encapsulamento
Adicionar Construtores:

public ContaBancaria(){ // construtor sem argumentos


ContaBancaria.identificador++; // incrementa variável estática
}

public ContaBancaria(String titular){ // construtor passando titular


this(); // chama o construtor padrão
this.titular = titular;
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Exercício Encapsulamento
Adicionar Getters and Setters:

public String getTitular() {


return titular;
}
public void setTitular(String titular) {
this.titular = titular;
}
public double getSaldo(){
return saldo;
}
public static int getIdentificador() {
return identificador;
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Exercício Encapsulamento
Manipule e acesse os dados utilizando os Getters and Setters:

public class TesteContas {

public static void main(String[] args) {

ContaBancaria c1 = new ContaBancaria();


ContaBancaria c2 = new ContaBancaria();
c1.deposita(100);
c2.deposita(100);
System.out.println(c1.getSaldo());
c1.saque(10);
System.out.println(c1.getSaldo());
System.out.println(ContaBancaria.getIdentificador());
}
}

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Utilizando a IDE
Objetivos

• Utilizar a IDE para criar rapidamente projetos Java

• Aproveitar os atalhos e Quick Fix para economizar tempo ao escrever código

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Eclipse

Estado do repositório: Outras IDES:


» NetBeans
» Intellij IDEA
» VS Code
» SublimeText

https://wiki.eclipse.org/EGit/User_Guide/State

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Atalhos Eclipse
• Ctrl + 1 Aciona o quick fixes com sugestões para correção de erros.
• Ctrl + Espaço Completa códigos
• Ctrl + 3 Aciona modo de descoberta de menu. Experimente digitar Ctrl+3 e depois
digitar ggas e enter. Ou então de Ctrl + 3 e digite new class.
• Ctrl + F11 roda a última classe que você rodou. É o mesmo que clicar no ícone verde
que parece um botão de play na barra de ferramentas.
• Ctrl + PgUp e Ctrl + PgDown Navega nas abas abertas. Útil quando estiver editando
vários arquivos ao mesmo tempo.
• Ctrl + Shift + F Formata o código segundo as convenções do Java
• Ctrl + M Expande a View atual para a tela toda (mesmo efeito de dar dois cliques no
título da View)
• Ctrl + Shift + L Exibe todos os atalhos possíveis.
• Ctrl + O Exibe um outline para rápida navegação
• Alt + Shift + X e depois J Roda o main da classe atual. Péssimo para pressionar! Mais
fácil você digitar Control+3 e depois digitar Run!. Abuse desde já do Control+3
Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)
TEMPLATE 2

IDE Eclipse

Exercício 06
Utilizando o Eclipse
1. Criar novo projeto: File > New > Project > Java Project
2. Nome do projeto: contas e dentro crie a pasta src
3. Com o botão direito sobre src, crie a classe: ContaBancaria
4. Crie os atributos:
a. saldo (double)
b. titular (String)
5. Crie os métodos saque e deposita e gere os Getters/Setters necessários
6. Crie a classe: TesteContas
7. Instanciar uma nova ContaBancaria com o new() em TesteContas no
método main()
8. Atribua valores utilizando os métodos criados e retorna a informação com
System.out.println();
9. Botão direito sobre a TesteContas > Run as > Java Application

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Distribuição
Objetivos

• Separar classes em pacotes

• Preparar arquivos para distribuição (JAR)

• Documentação

• Importar um pacote

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Pacote

Organização de grupos de classes em unidades.


Contém qualquer número de classes que se relacionam por objetivo ou escopo.
Reduz problemas de conflitos de nome.
Nome da classe = nome do pacote + nome usado na definição da classe
Permite a proteção de classes, variáveis e métodos através dos modificadores.

package com.fiap.aula;

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Importando pacotes
Com o Eclipse, acesse as propriedades do projeto e adicione em ClassPath
> Library > Dependencies o arquivo .jar necessário.

Gerando JAR para distribuição


No terminal:
java -cvf nomeArquivo.jar Conta.class TestaConta.class
java -classpath nomeArquivo.jar TestaConta // classe com Main

Rodando JAR
No terminal:
java -jar nomeArquivo.jar

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Documentação
Ferramenta do Java para geração de documentação de código.
Como exemplo de Javadoc tem-se a própria API da linguagem Java em
HTML com conteúdo originado dos arquivos fontes:

docs.oracle.com/javase/10/docs/api/

Exemplo de comentário Javadoc:

/**
* @return Nome do usuário
*/
public String getNome() {
return this.nome;
}

É possível também gerar a documentação em HTML com os comentários


previamente configurados via File > Export > Java > JavaDoc (apontar o
caminho do Javadoc Command em ”jdk/bin/javadoc”)

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


TEMPLATE 2

Pacotes e JavaDoc

Exercício 07
Pacotes e Documentação
Criar os pacotes e separar as classes:
- main
- model

Gerar JavaDoc
Conhecer a Documentação do Java na web
https://docs.oracle.com/javase/8/docs/api/

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Pesquisa de Satisfação

Por gentileza, avaliem a aula de hoje, segue o link para a pesquisa:

https://fiap.me/Pesquisa-BBrasil-Development

Muito obrigado! ☺

Copyright © 2019-2022 - Prof. Rafael Matsuyama (profrafael.matsuyama@fiap.com.br)


Copyright © 2019-2022 - Prof. Rafael Matsuyama e
Prof. Danilo Vitoriano

Todos direitos reservados. Reprodução ou divulgação


total ou parcial deste documento é expressamente
proíbido sem o consentimento formal, por escrito, do
Professor (autor).

Você também pode gostar