scja
DESCRIPTION
Curso preparatório para a certificação SCJA.TRANSCRIPT
1
GUIA DE ESTUDOS PARASUN CERTIFIED JAVA ASSOCIATE (SCJA)
Prof. Rafael Guimarães Sakurai
12/2009
2
Guia de Estudos para SCJA
QUEM SOU? Rafael Guimarães Sakurai
([email protected])Possui graduação em Ciência da Computação pela
Universidade Metodista de São Paulo (2005), especialista em Engenharia de Componentes com Java Enterprise e Webservices pela Faculdade de Informática e Administração Paulista (2007).
Atualmente é analista desenvolvedor de software da Virginia Surety e docente na Universidade Metodista de São Paulo. Tem experiência na área de Ciência da Computação, com ênfase em Linguagens de Programação.
Possui as seguintes certificações: SCJA 1.0, SCJP 5.0, SCWCD 1.4 e SCSNI.
3
Guia de Estudos para SCJA
AGENDA 1º Dia – Apresentação do curso
Conceitos basicos de Orientação a Objetos. 2º Dia – UML e implementação Java 3º Dia – Implementação Java (continuação) 4º Dia – Implementação de algoritmos
Principios básicos de desenvolvimento Java 5º Dia – Plataforma Java e tecnologias de integração
Tecnologia cliente 6º Dia – Tecnologia servidor e simulado
4
Guia de Estudos para SCJA
DETALHES Número de Questões: 51 Score: 68% (35 de 51 questões) Tempo: 115 minutos
5
Guia de Estudos para SCJA
SUN ACADEMIC INITIATIVE Site (https://sailearningconnection.skillport.com) Vantagens:
Cursos Materiais Simulados Desconto no voucher
6
Guia de Estudos para SCJA
OBJETIVOS DO EXAME 1- Conceitos básicos Orientados a Objetos (OO) 2- Representação UML de conceitos OO 3- Implementação Java de conceitos OO 4- Projeto e implementação de algoritmos 5- Princípios básicos do desenvolvimento em Java 6- Plataforma Java e tecnologias de integração 7- Tecnologias de cliente 8- Tecnologias de servidor
7
1- CONCEITOS BÁSICOS ORIENTADOS A
OBJETOS
8
1.1- DESCREVER, COMPARAR E CONTRASTAR PRIMITIVAS (NÚMERO INTEIRO, PONTO FLUTUANTE, BOOLEANO E CARACTERE), TIPOS DE ENUMERAÇÃO E OBJETOS.
Guia de Estudos para SCJA
TIPOS PRIMITIVOS
Os tipos primitivos são representações de dados/valores básicos. Todos são representados por letras minúsculas e estão divididos nos seguintes tipos:
Número Inteiro Número com Ponto Flutuante Caractere Booleano
9
Guia de Estudos para SCJA
TIPOS INTEIROS
Representam números inteiros em forma decimal, hexadecimal ou octal.
10
Recomendado quando o número é muito grande, capaz de armazenar 64 bits
Tipo inteiro mais utilizado, capaz de armazenar 32 bits
Valor numérico capaz de armazenar 16 bits
Utilizado para representar números pequenos, no intervalo de -128 e 127, capaz de armazenar 8 bits
11
Guia de Estudos para SCJA
TIPOS INTEIROS
11
Exemplos:
byte: 0, 1, 2
short: 1, 20, 100
int: 10, 100, 2000000
long: 1000, 21234300000, 56098001258
Guia de Estudos para SCJA
TIPOS DE PONTO FLUTUANTE
Representam valores reais, ou seja, com parte fracionária.
Exemplos:
float: 1.99, 13.14, 100.45
double: 1500.27, 409673.90, 12935878423.096675
12
13
Guia de Estudos para SCJA
TIPO CARACTERE
Representa um único caractere incluindo letras, números, caracteres especiais e outros, denominado char.
Exemplos:
char: a, b, c, 4, $, &
13
Guia de Estudos para SCJA
TIPO BOOLEANO
Representa o valor lógico true (verdadeiro) ou false (falso), denominado boolean.
Exemplos:
boolean: true, false
14
15
Guia de Estudos para SCJA
ENUMERAÇÃO
Tipo de classe com valores pré-definidos, ou seja, possui valores padrões previamente estabelecidos.
Exemplo:
15
public enum DiaSemana { SEGUNDA-FEIRA, TERÇA-FEIRA, QUARTA-FEIRA, QUINTA-FEIRA, SEXTA-FEIRA, SÁBADO, DOMINGO}
Guia de Estudos para SCJA
OBJETO
16
Características + Ações = Objeto
Guia de Estudos para SCJA
OBJETO Um objeto é a representação de um conjunto de
características e funcionalidades para representar algo do mundo real.
Podemos por exemplo representar pessoas como objetos, onde cada pessoa terá suas características próprias como nome, data de nascimento, documento de identidade e outros.
Também podemos representar as ações que uma objeto que é uma pessoa pode ter, como por exemplo andar, pensar, falar e outros.
Na OO as características são chamados de atributos e as ações são chamadas de métodos, onde todos os objetos do mesmo tipo possuem os mesmos métodos, mas cada um pode ter seus atributos com valores diferentes (estado).
17
Guia de Estudos para SCJA
OBJETO A partir de um modelo ou forma que define os atributos
e métodos dos objetos podemos criar vários objetos cada um com um estado diferente:
18
Modelo Objetos com diferentes estados
19
1.2 - DESCREVER, COMPARAR E CONTRASTAR CLASSES CONCRETAS, CLASSES ABSTRATAS E INTERFACES, E COMO A HERANÇA É APLICADA A ELAS.
Guia de Estudos para SCJA
CLASSE Uma Classe define quais as características (atributos) e
ações (métodos) para representar as “coisas” do mundo real, podemos dizer que uma classe é um modelo ou forma que define como devem ser os objetos.
Os atributos de uma classe podem ser de tipos primitivos, enumerações ou outro objeto.
Os métodos de uma classe vão representar as ações que aquela classe pode ter, dependendo do estado dos atributos os métodos podem executar de formas diferentes.
20
Guia de Estudos para SCJA
CLASSE CONCRETA
Classe concreta é uma classe que pode ser utilizada como base para a geração de objetos.
Exemplo:
public class Aluno { public String nome; public String matricula; public Aluno() { }
public Aluno(String _nome, String _matricula) { nome = _nome; matricula = _matricula; }}
21
Guia de Estudos para SCJA
CLASSE ABSTRATA
22
As classes abstratas servem como base para a criação de classes concretas mais especializadas.
A partir das classes abstratas não podemos instanciar objetos, pois ela pode ter métodos que não estão implementados.
Exemplo:public abstract class Pessoa { public String nome;
public void dizerNome() { System.out.println("Meu nome é:" + nome); }
public void estudar();}
Guia de Estudos para SCJA
INTERFACE
23
É utilizada para definir modelos de especificação de métodos. A partir de uma interface podemos ter diversas classes que seguem este modelo, sendo que obrigatoriamente todas os métodos definidos na interface deverão ser implementados pelas classes.
Exemplo:
public interface Transporte { public void entrarPessoa(Pessoa pessoa); public void sairPessoa(Pessoa pessoa); public void transportarPara(String localidade);}
Guia de Estudos para SCJA
INTERFACE
24
Guia de Estudos para SCJA
GENERALIZANDO INTERFACE
25
Guia de Estudos para SCJA
IMPLEMENTANDO MAIS DE UMA INTERFACE
26
Guia de Estudos para SCJA
HERANÇA Visando a reutilização de código, a herança permite que
classes herdem atributos e métodos de outras classes. É utilizada em objetos que possuem características e
funcionalidades semelhantes.
27
public class Pessoa { private String nome;
public void setNome(String nome) { this.nome = nome;} public String getNome() { return this.nome; }}
public class Programador extends Pessoa { public void dizerProfissao() { return "Meu nome eh " + getNome() + " eu sou Programador." }}
Guia de Estudos para SCJA
HERANÇA
28
29
1.3 - DESCREVER, COMPARAR E CONTRASTAR COMPOSIÇÕES E ASSOCIAÇÕES (INCLUINDO MULTIPLICIDADE: UM-PARA-UM, UM-PARA-VÁRIOS E VÁRIOS-PARA-VÁRIOS) DE CLASSES, BEM COMO A NAVEGAÇÃO DE ASSOCIAÇÕES.
30
Guia de Estudos para SCJA
ASSOCIAÇÃO Associação é quando uma classe pode utilizar uma
outra classe, por exemplo, um cliente possui um endereço.
A associação define que uma classe está relacionada com outra classe, mas elas podem ser utilizadas independente.
30
public class Cliente { public String nome; public Endereco endereco;}
public class Endereco { public String estado; public String cidade; public String bairro; public String logradouro;}
Guia de Estudos para SCJA
COMPOSIÇÃO Composição é quando uma classe depende de outra
classe para poder existir, por exemplo, um estado possui varias cidades.
Caso apaguem um estado do mapa, as cidades dele não devem continuar existindo.
31
public class Cidade { public String nome;}
public class Estado { public Cidade[] cidades;}
32
Guia de Estudos para SCJA
MULTIPLICIDADE Um-para-um
Um logradouro pode ter apenas um CEP.
Um-para-vários Exemplo: Um carro tem quatro pneus.
Vários-para-vários Um programador pode trabalhar em vários projetos, e um
projeto pode ter vários programadores.
33
Guia de Estudos para SCJA
NAVEGAÇÃO Navegação informa qual a direção do relacionamento
entre duas classes.
Neste exemplo através da classe Produto podemos chegar até a classe Modelo.
public class Modelo { public String nome;}
public class Produto { public Modelo modelo; public Modelo getModelo() { return this.modelo; }}
34
1.4 - DESCREVER A OCULTAÇÃO DE INFORMAÇÕES (USANDO MÉTODOS E ATRIBUTOS PRIVADOS), O ENCAPSULAMENTO E A FUNCIONALIDADE DE EXPOSIÇÃO DE OBJETOS USANDO MÉTODOS PÚBLICOS; E DESCREVER AS CONVENÇÕES DE JAVABEANS PARA OS MÉTODOS SETTER E GETTER.
35
Guia de Estudos para SCJA
OCULTAÇÃO DE INFORMAÇÕES Quando queremos restringir o acesso a atributos e
métodos dentro de uma classe, podemos definir sua visibilidade como privada utilizando a palavra-chave private, desta forma somente dentro da própria classe podem ser alterados os valores de um atributo ou chamado um método.
36
Guia de Estudos para SCJA
ENCAPSULAMENTO Quando temos uma classe com seus atributos com
visibilidade publica, esses atributos podem ser alterados a qualquer momento por qualquer outra classe.
nome
matricula
Guia de Estudos para SCJA
ENCAPSULAMENTO
O Java possui uma convenção para encapsulamento de dados onde definimos a visibilidade private para os atributos de uma classe e adicionamos métodos públicos para obter o valor do atributo e alterar o valor do atributo, que são chamados respectivamente de métodos “get” e “set”.
37
38
Guia de Estudos para SCJA
ENCAPSULAMENTO Definindo os atributos como privados e criando
métodos públicos para manipulação desses atributos podemos então restringir a manipulação desorganizada.
nome
matricula
Método Privado
Método Privado
MétodoPúblico
MétodoPúblico
Guia de Estudos para SCJA
EXEMPLO ENCAPSULAMENTO
39
public class Aluno { private String nome; private int matricula;
public void setNome(String _nome) { nome = _nome; } public String getNome() { return nome; }
public void setMatricula(int _matricula) { matricula = _matricula; } public int getMatricula() { return matricula; }}
Guia de Estudos para SCJA
CONVENÇÕES JAVABEANS As convenções Javabeans são boas práticas de programação
que definem como devem ser criadas as classes, normalmente essas convenções são seguidas pelos desenvolvedores Java. Nomes de classes são escritos com a primeira letra de cada
palavra em maiúsculo. Possuir um construtor padrão (default) Todos os atributos são privados (private) Os atributos são escritos com letras minúsculas, a menos que
ele seja composto por mais de uma palavra, a primeira palavra é toda em minúscula e as demais começam com a primeira letra em maiúsculo e o restante da palavra em minúscula.
Todos os atributos devem ser acessíveis através de métodos “get” e “set”.
Nomes de métodos seguem o mesmo padrão de escrita que atributos. 40
Guia de Estudos para SCJA
CONVENÇÕES JAVABEANS Exemplo: Precisamos desenvolver uma classe para
representar um produto que pode ter as informações nome, data de validade, preço e ativo.
public class Produto { private String nome; private String marca; private Date dataValidade; private double preco; private boolean ativo;
public void setNome(String nome) { this.nome = nome; } public String getNome() { return this.nome; }
public void setDataValidade(Date dataValidade) { this.dataValidade = dataValidade; }
41
Guia de Estudos para SCJA
CONVENÇÕES JAVABEANS
public Date getDataValidade() { return this.dataValidade; }
public void setPreco(double preco) { this.preco = preco; } public double getPreco() { return this.preco; }
public void setAtivo(boolean ativo) { this.ativo = ativo; } public boolean getAtivo() { return this.ativo; } // Quando é boolean podemos usar get ou is public boolean isAtivo() { return this.ativo; }}
42
43
1.5 - DESCREVER O POLIMORFISMO CONFORME APLICADO A CLASSES E INTERFACES, BEM COMO DESCREVER E APLICAR O PRINCÍPIO "PROGRAMA PARA UMA INTERFACE".
44
Guia de Estudos para SCJA
POLIMORFISMO O termo polimorfismo vem do grego que significa
“muitas formas”. Na Orientação a Objetos o polimorfismo é a forma de
representar um objeto de varias formas. Podemos aplicar o polimorfismo quando temos uma
estrutura de herança de classes (subclasse e superclasse) ou com estrutura de implementação de interface.
45
Guia de Estudos para SCJA
POLIMORFISMO Neste exemplo
podemos representar o CarroVoador como um Aereo ou como um Terrestre, pois o CarroVoador segue essas interfaces e tem implementado as funcionalidades que estão definidos nelas.
Da mesma forma podemos representar o CarroVoador como um Transporte.
Guia de Estudos para SCJA
PROGRAME PARA UMA INTERFACE “Programe para uma interface” deve ser entendido
como “Programe para um supertipo” dessa forma podemos: Generalizar o tipo de retorno de método Generalizar o tipo de um atributo Generalizar os parâmetros de método
46
47
2- REPRESENTAÇÃO UML DE CONCEITOS
ORIENTADOS A OBJETOS
48
Guia de Estudos para SCJA
UNIFIED MODELING LANGUAGE (UML) Definição:
“É uma família de notações gráficas, apoiada por um metamodelo único, que ajuda na descrição e no projeto de sistemas de software, particularmente daqueles construídos utilizando o estilo orientado a objetos.” Martin Fowler
49
2.1 - RECONHECER A REPRESENTAÇÃO UML DE CLASSES (INCLUINDO ATRIBUTOS E OPERAÇÕES, CLASSES ABSTRATAS E INTERFACES), A REPRESENTAÇÃO UML DE HERANÇA (IMPLEMENTAÇÃO E INTERFACE) E A REPRESENTAÇÃO UML DE MODIFICADORES DA VISIBILIDADE DOS MEMBROS DA CLASSE (-/PRIVADA E +/PÚBLICA).
50
Guia de Estudos para SCJA
ESTRUTURA DA CLASSE Uma classe em UML possui três partes:
Nome da Classe Atributos Operações
Podemos abreviar a declaração da classe, caso não influencie o entendimento do diagrama:
51
Guia de Estudos para SCJA
ATRIBUTOS Um atributo é formado por:
visibilidade nome : tipo [multiplicidade] = valor inicial {propriedades}
52
Guia de Estudos para SCJA
OPERAÇÕES Uma operação é formada por:
visibilidade nome (parâmetros) : tipo de retorno {propriedades}
O parâmetro de um método é formado por:nome : tipo [multiplicidade] = valor inicial
53
Guia de Estudos para SCJA
HERANÇA Utilizamos herança quando queremos declarar
subclasses, permitindo reutilizar os códigos já declarados na superclasse.
54
Guia de Estudos para SCJA
CLASSE ABSTRATA Utilizado para informar que uma classe não
implementa todos os seus métodos.
55
Guia de Estudos para SCJA
INTERFACE Utilizamos interface para definir as operações básicas
que uma classe de seu tipo precisa implementar.
ou
56
Guia de Estudos para SCJA
INTERFACE Exemplo:
57
Guia de Estudos para SCJA
VISIBILIDADE Podemos definir as seguintes visibilidades em atributos
e operações:
- private~ default# protected+ public
58
Guia de Estudos para SCJA
COMENTÁRIO Os comentários ou notas são utilizados para adicionar
mais informações ao diagrama.
59
Guia de Estudos para SCJA
PACOTE Utilizamos para organizar as classes:
60
2.2 - RECONHECER A REPRESENTAÇÃO UML DE ASSOCIAÇÕES DE CLASSES, COMPOSIÇÕES, INDICADORES DE MULTIPLICIDADE DE ASSOCIAÇÃO E INDICADORES DE NAVEGAÇÃO DE ASSOCIAÇÕES.
61
Guia de Estudos para SCJA
ASSOCIAÇÕES Utilizado para representar o relacionamento entre
classes, as associações podem ser: Associação Agregação Composição Classe de associação
As classes que fazem parte de um relacionamento também são chamadas de TODO (responsável pelo relacionamento) e PARTE (usado pelo relacionamento).
62
Guia de Estudos para SCJA
ASSOCIAÇÃO Relacionamento simples entre duas classes:
63
Guia de Estudos para SCJA
AGREGAÇÃO Informa que uma classe faz parte de outra classe, mas
não de forma exclusiva.
64
Guia de Estudos para SCJA
COMPOSIÇÃO Informa que uma classe faz parte de outra classe de
forma exclusiva.
65
Guia de Estudos para SCJA
AGREGAÇÃO X COMPOSIÇÃO A diferença entre ambos é:
Agregação – se excluir a classe responsável pelo relacionamento, não deve excluir a classe que ele possui relacionamento.
Composição – se excluir a classe responsável pelo relacionamento, então deve excluir a classe que ele possui relacionamento.
66
Guia de Estudos para SCJA
ASSOCIAÇÃO Podemos também ter uma associação para mesma
classe:
67
Guia de Estudos para SCJA
NAVEGABILIDADE Podemos informar qual a direção do relacionamento:
68
Guia de Estudos para SCJA
MULTIPLICIDADE A multiplicidade é utilizada para definir a quantidade
de objetos devem ser criados:0 .. 1 (zero ou um)1 (um)* (zero ou muitos)
69
Guia de Estudos para SCJA
DEPENDÊNCIA Utilizado para informar que uma classe depende de
outra classe para executar alguma operação:
Palavras - chave de dependência:<<call>><<create>><<dependency>><<use>>
70
Guia de Estudos para SCJA
ASSOCIAÇÃO X DEPENDÊNCIA A diferença básica entre ambos:
Associação temos um atributo da classe relacionada.
Dependência utilizamos a classe relacionada, para passar um parâmetro, chamar um método, criar um objeto, etc.
71
Guia de Estudos para SCJA
DIAGRAMA DE CLASSES
72
3- IMPLEMENTAÇÃO JAVA DE CONCEITOS
ORIENTADOS A OBJETOS
73
Guia de Estudos para SCJA
A LINGUAGEM JAVA 1991- A linguagem Oak surgiu através do projeto Green
financiado pela Sun Microsystems. 1995 – Divulgação do Java 1.0 – SunWorld 1998 – Lançamento da versão 1.2 – Java 2
Versão 1.3 e 1.4 - Java 2 2004 – Lançamento da versão 1.5 – Java 5 – Tiger 2006 – Lançamento da versão 1.6 – Java 6 – Mustang JCP (Java Community Process) – Diversas empresas
responsáveis pelo Java.
74
Guia de Estudos para SCJA
A LINGUAGEM JAVA Os conceitos chaves da linguagem Java são:
Programação Orientada a Objetos Independente de plataforma Seguro Distribuído Multi-thread
O tema principal do Java é “escreva uma vez, rode em qualquer lugar” (write once, run anywhere).
75
Guia de Estudos para SCJA
JRE X JDK Há dois principais produtos dentro da plataforma Java
SE: - Java Runtime Environment (JRE)
Fornece a Java Virtual Machine, bibliotecas Java e outros componentes para executar aplicações escritas em Java.
- Java Development Kit (JDK) Contém tudo que tem na JRE, mais ferramentas adicionais
para criar Java Archive (JAR) e desenvolver (compilar e depurar) aplicações feitas em Java.
76
Guia de Estudos para SCJA
JAVA VIRTUAL MACHINE (JVM) A Java Virtual Machine é uma maquina imaginaria que
é implementada através da emulação em software. Existe uma JVM diferente para cada Sistema
Operacional. Uma vez que sua aplicação é criada, a mesma pode
ser executada em diversos Sistemas Operacionais sem precisar recompilar. .java
.class bytecode
JVM JVM JVM
Linux Windows Outros
77
Guia de Estudos para SCJA
COMPILANDO E EXECUTANDO UM ARQUIVO JAVA Fases da programação Java:
EditorJava
CompilerJava
Interpreter
PrimeiraClasse.java
PrimeiraClasse.class
78
Guia de Estudos para SCJA
CRIANDO UM ARQUIVO .JAVA Crie um arquivo com a extensão .java com o seguinte
código:/** * Exemplo de uma classe simples em Java. */public class PrimeiraClasse { public static void main(String[] args) { System.out.println("Hello world !!!"); }}
79
Guia de Estudos para SCJA
COMPILANDO UM ARQUIVO .JAVA A aplicação javac é responsável por compilar o arquivo
.java. Após a execução deste comando, um arquivo com a
extensão .class contendo bytecode Java será criado em disco, com o seguinte nome: PrimeiraClasse.class.
A aplicação java é utilizada para executar um arquivo .class.
80
Guia de Estudos para SCJA
COMENTÁRIO EM JAVA// -> Comentário de uma única linha
/* Comentário longo com mais
de uma linha */
/**
* Javadoc
* @author Rafael Guimarães Sakurai
*/
81
Guia de Estudos para SCJA
COMENTÁRIO EM JAVA/** * Classe utilizada para demonstrar o uso de comentários. * * Depois que uma classe Java é compilada, os comentários não vão * para os códigos compilados .class, dessa forma os comentários * não interferem no tamanho final do projeto. * * @author Rafael Guimarães Sakurai */public class ExemploComentario { public static void main(String[] args) { //Imprime uma mensagem para o usuario. System.out.println("Demonstrando o uso dos comentarios.");
/* Podemos utilizar esta forma quando queremos escrever um comentário mais longo para exemplicar o código. */ }}
82
Guia de Estudos para SCJA
PALAVRAS-CHAVE DA LINGUAGEM JAVA
abstract assert boolean break bytecase catch char class constcontinue default do double elseenum extends final finally floatfor goto if implements importinstanceof int interface long nativenew package private protected publicreturn short static strictfp superswitch synchronized this throw throwstransient try void volatile while
83
3.1 - DESENVOLVER CÓDIGO QUE UTILIZE PRIMITIVAS, TIPOS DE ENUMERAÇÃO E REFERÊNCIAS A OBJETOS, E RECONHECER LITERAIS DESSES TIPOS.
84
Guia de Estudos para SCJA
TIPOS PRIMITIVOS Uma variável é a forma de representar valores
primitivos ou objetos:
Variáveis primitivas: podem ser do tipo byte, short, int,
long, float, double, char ou boolean.
Variáveis de referência: usada para referenciar um objeto. Quando usamos uma variável de referencia definimos qual o tipo do objeto ou um subtipo do tipo do objeto (veremos isso mais para frente).
85
Guia de Estudos para SCJA
LISTA DE TIPOS PRIMITIVOS
86
Guia de Estudos para SCJA
TIPOS INTEIROS (BYTE, SHORT, INT, LONG) Tipos inteiros trabalham apenas com números inteiros,
positivos ou negativos. Os valores podem ser representados nas bases octal, decimal e hexadecimal.
Inteiro em octalQualquer valor escrito utilizando números de 0 a 7 começando com 0 é um valor na base octal, exemplo:
short s = 010; // Equivale ao valor 8 em decimal.
int i = 025; // Equivale ao valor 21 em decimal.
87
Guia de Estudos para SCJA
TIPOS INTEIROS (BYTE, SHORT, INT, LONG) Inteiro em decimal
Qualquer valor escrito utilizando números de 0 a 9 é um valor decimal, este é o tipo de representação mais comum, pois é utilizada no dia a dia, exemplo:
int i = 9;
long b = 9871342132;
88
Guia de Estudos para SCJA
TIPOS INTEIROS (BYTE, SHORT, INT, LONG) Inteiro em hexadecimal
Qualquer valor escrito utilizando números de 0 a 9 e A a F começando com 0x ou 0X é um valor hexadecimal, exemplo:
long a = OxCAFE; // Equivale ao valor 51966 em decimal
int b = 0X14a3; // Equivale ao valor 5283 em decimal
89
Guia de Estudos para SCJA
TIPOS INTEIROS (BYTE, SHORT, INT, LONG) Quando um número é maior que o tamanho de um tipo
inteiro precisamos especificar o tipo como um long, para isso devemos adicionar a letra l ou L depois do seu valor, exemplo:
long a = 0Xcafel;
long b = 0752L;
long c = 987654321L;
90
Guia de Estudos para SCJA
EXEMPLO TIPO PRIMITIVO INTEIRO/** * Exemplo de utilização dos tipos primitivos byte, short, int e long. */public class ExemploTipoPrimitivo { public static void main(String[] args) { //Inicializando atributos primitivos com valores na base octal. byte a = 077; short b = 010; int c = 025;
System.out.println(a); // Imprime 63 System.out.println(b); // Imprime 8 System.out.println(c); // Imprime 21
//Inicializando atributos primitivos com valores na base decimal. int d = 9; long e = 9871342132L;
System.out.println(d); // Imprime 9 System.out.println(e); // Imprime 9871342132
91
Guia de Estudos para SCJA
EXEMPLO TIPO PRIMITIVO INTEIRO //Inicializando atributos primitivos com valores na base hexadecimal. long f = 0XCAFE; long g = 0Xcafel; int h = 0X14a3; long i = 0752L; long j = 987654321L;
System.out.println(f); // Imprime 51966 System.out.println(g); // Imprime 51966 System.out.println(h); // Imprime 5283 System.out.println(i); // Imprime 490 System.out.println(j); // Imprime 987654321 }}
92
Guia de Estudos para SCJA
EXEMPLO TIPO PRIMITIVO INTEIRO Compilar e executar o arquivo
ExemploTipoPrimitivo. java
93
Guia de Estudos para SCJA
TIPOS PONTO FLUTUANTE (FLOAT E DOUBLE) Tipos de ponto flutuante servem para representar
números com casas decimais, tanto negativos quanto positivos. Todos números com ponto flutuante são por padrão do tipo double.
float f = 10.99f;
double b = 10.3D;
double c = 10.3;
// Erro de compilação, pois o padrão do valor é double.
floaf c = 1.99;
OBS: Números com ponto flutuante devem ser escritos com ponto final ( . ).
94
Guia de Estudos para SCJA
EXEMPLO TIPO PRIMITIVO INTEIRO COM PONTO FLUTUANTE/** * Exemplo de utilização dos tipos primitivos float e double. */public class ExemploTipoPrimitivo2 { public static void main(String[] args) { //Definindo explicitamente que o valor é float. float a = 10.99f;
//Definindo explicitamente que o valor é double. double b = 10.3D;
//Atribuindo o valor inteiro para um tipo double. double c = 5;
//Atribuindo um valor double, por padrão todos números // com casas decimais são do tipo double. double d = 7.2;
System.out.println(a); // Imprime 10.99 System.out.println(b); // Imprime 10.3 System.out.println(c); // Imprime 5.0 System.out.println(d); // Imprime 7.2 }}
95
Guia de Estudos para SCJA
EXEMPLO TIPO PRIMITIVO INTEIRO COM PONTO FLUTUANTE Compilar e executar o arquivo
ExemploTipoPrimitivo2. java
96
Guia de Estudos para SCJA
TIPO CARACTERE (CHAR) O tipo caractere, como o próprio nome já diz, serve
para representar um valor deste tipo. Sua inicialização permite 3 modelos:
char a = ‘a’; //Inicialização usual com 1 caractere.
char a = 97; //Inicialização com código ASCII.
char u = ‘\u0025’; //Equivale ao caractere ‘%’
Os caracteres podem ser representados por números e possuem o mesmo tamanho de um atributo short.
O unicode é no formato hexadecimal, portanto o exemplo anterior ‘0025’ equivale a 37 na base decimal.
97
Guia de Estudos para SCJA
EXEMPLO TIPO PRIMITIVO CARACTERE/** * Exemplo de utilização do tipo primitivo char. */public class ExemploTipoPrimitivo3 { public static void main(String[] args) { //Definindo explicitamente um valor caracter. char a = 'a'; //Definindo explicitamente um valor numerico. char b = 97; //Definindo explicitamente um valor unicode. char c = '\u0025';
System.out.println(a); // Imprime a System.out.println(b); // Imprime a System.out.println(c); // Imprime % }}
98
Guia de Estudos para SCJA
EXEMPLO TIPO PRIMITIVO CARACTERE Compilar e executar o arquivo
ExemploTipoPrimitivo3. java
99
Guia de Estudos para SCJA
TIPO BOOLEANO (BOOLEAN) Tipo que representa valores lógicos true (verdadeiro)
ou false (falso), exemplo:
boolean a = true;
boolean b = false;
100
Guia de Estudos para SCJA
CASTING
101
Guia de Estudos para SCJA
CASTING Para fazer um casting, basta sinalizar o tipo para o qual se deseja
converter entre parênteses, da seguinte forma:
float f = (float) 5.0;Conversão do double 5.0 para float.
int b = (int) 5.1987;Conversão de double para int.
float c = 100;Conversão de int para float é implícito, não precisa de casting.
int d = ‘d’;
Conversão de char para int é implícito, não precisa de casting.
102
Guia de Estudos para SCJA
EXEMPLO CASTING/** * Exemplo de conversão de tipos primitivos utilizando casting. */public class ExemploCasting { public static void main(String[] args) { //Casting feito implicitamente, pois o valor possui um // tamanho menor que o tipo da variável que irá recebe-lo. char a = 'a'; int b = 'b'; float c = 100; System.out.println(a); // Imprime a System.out.println(b); // Imprime 98 System.out.println(c); // Imprime 100.0 //Casting feito explicitamente, pois o valor possui um tamanho // maior que o tipo da variável que irá recebe-lo. int d = (int) 5.1987; int e = (char) (a + 5); char f = (char) 110.5; System.out.println(d); // Imprime 5 System.out.println(e); // Imprime 102 System.out.println(f); // Imprime n }}
103
Guia de Estudos para SCJA
EXEMPLO CASTING Compilar e executar o arquivo ExemploCasting.java
104
Guia de Estudos para SCJA
VETOR (ARRAY) Segundo a definição mais clássica da informática, um
vetor é uma estrutura de dados homogenia, ou seja, todos os elementos de um vetor são do mesmo tipo.
A estrutura básica de um vetor é representada por seu nome e um índice, que deve ser utilizado toda a vez que se deseja acessar um determinado elemento dentro de sua estrutura.
Todo vetor possui um tamanho fixo, ou seja, não é possível redimensionar um vetor ou adicionar a ele mais elementos do que este pode suportar.
Em Java a posição inicial do vetor é definida pelo valor zero.
105
Guia de Estudos para SCJA
VETOR (ARRAY) Um vetor é composto de três partes:
Declaração
Criação
Inicialização
Podemos também criar e inicializar o vetor da seguinte forma:
int[] valores; // ou int valores[];String[] nomes; // ou String nomes[];
int[] valores = new int[100];String[] nomes = new String[50];
valores[0] = 5;nomes[10] = "Rafael";
int[] valores = {2, 5, 4, 8, 5};
106
Guia de Estudos para SCJA
VETOR (ARRAY) Exemplo de utilização de array:
índice 0 1 2 3 4
vetor 2 5 4 8 5
public class ExemploVetor { public static void main(String[] args) { int[] vetor = {2, 5, 4, 8, 5}; System.out.println("Elemento do indice 2 = " + vetor[2]); System.out.println("Elemento do indice 4 = " + vetor[4]);
System.out.println("\n\nPercorrendo todos os elementos do vetor"); for(int i = 0; i < vetor.length; i++) { System.out.println("Indice[" + i + "]= " + vetor[i]); } }}
107
Guia de Estudos para SCJA
VETOR (ARRAY) Todo vetor em Java é um objeto, mesmo que ele possua
apenas atributos primitivos. Quando os vetores são criados eles já são inicializado
com os valores padrões para os tipos que eles guardam.
O primeiro índice do vetor é sempre zero, logo, seu último elemento é sempre igual ao tamanho do vetor menos um.
Se acessar uma posição do vetor que não existe será lançado uma java.lang.ArrayIndexOutOfBoundsException.
108
Guia de Estudos para SCJA
ENUMERATION Enumeration ou enum é uma alternativa ao uso de
valores constantes. O enum criado pode ser criado em um arquivo
separado ou dentro de outra classe. Podem conter:
Variáveis de instância, métodos e construtores.
Problemas na utilização de constante: As constantes não oferecem segurança. Não há um domínio estabelecido. Fragilidade de modelo. Seus valores impressos são pouco informativos
109
Guia de Estudos para SCJA
ENUMERATION Exemplo de utilização de constantes:/** * Classe utilizada para demonstrar as fragilidades das contantes. */public class ExemploUsarEnums { public static final int CONCEITO_RUIM = 1; public static final int CONCEITO_BOM = 2; public static final int CONCEITO_OTIMO = 3;
public void calcularAprovacao(int conceito) { if(conceito == CONCEITO_OTIMO) { System.out.println("Aprovado com louvor!"); } else if (conceito == CONCEITO_BOM) { System.out.println("Aprovado!"); } else if (conceito == CONCEITO_RUIM) { System.out.println("Reprovado!"); } }}
110
Guia de Estudos para SCJA
ENUMERATION Exemplo de criação de enum:/** * Enum para conceitos de avaliação de disciplinas. */public enum ConceitoEnum { RUIM, BOM, REGULAR, OTIMO;
public void calcularAprovacao(ConceitosEnum conceito) { if(conceito == OTIMO) { System.out.println("Aprovado com louvor!"); } else if (conceito == REGULAR) { System.out.println("Regular!"); } else if (conceito == BOM) { System.out.println("Aprovado!"); } else if (conceito == RUIM) { System.out.println("Reprovado!"); } }}
111
Guia de Estudos para SCJA
ENUMERATION Exemplo de enum com atributo e construtor:/** * Enum para conceitos de avaliação de disciplinas. */public enum ConceitoEnumComConstrutor { RUIM("Reprovado!"), BOM("Aprovado!"), REGULAR("Regular"), OTIMO("Aprovado com louvor");
private final String mensagem;
//O construtor de um enum pode ser default ou private. private ConceitoEnumComConstrutor(String mensagem) { this.mensagem = mensagem; }
public String calcularAprovacao() { return this.mensagem; }}
112
Guia de Estudos para SCJA
ENUMERATION
Compilando e executando a classe PrincipalTesteEnum. java
/** * Classe para testar o uso de enum. */public class PrincipalTesteEnum { public static void main(String[] args) { System.out.println("Conceito..:" + ConceitoEnumComConstrutor.OTIMO.calcularAprovacao(); }}
113
Guia de Estudos para SCJA
Outros informações das enums:
ENUMERATION
public class PrincipalTesteEnum2 { public static void main(String[] args) { //Percorrendo todas as enums for(ConceitoEnumComConstrutor conceito : ConceitoEnumComConstrutor.values()) System.out.println(conceito);
//Buscando um enum pelo seu nome. System.out.println(ConceitoEnumComConstrutor.valueOf("BOM"));
//método name() que retorna o nome da propria enum. System.out.println(ConceitoEnumComConstrutor.OTIMO.name());
//método ordinal() retorna a posição da ordem em que a enum foi declarada. System.out.println(ConceitoEnumComConstrutor.OTIMO.ordinal()); }}
114
Guia de Estudos para SCJA
REFERÊNCIA A OBJETO Como Java é uma linguagem orientada a objetos é
muito comum declararmos atributos ou variáveis que possuem referência a objetos em memória.
Exemplo:
Produto prod = new Produto();
Pessoa paulo = new Pessoa("Paulo");
String texto = new String("Explicação de referência de objeto");
int[] valores = new int[100];
115
Guia de Estudos para SCJA
REFERÊNCIA A OBJETO
115
prod : Produtonome="Duke"preco=75.90
paulo : Pessoanome="Paulo"idade= 40cpf = "111.111.111-11"
Heap
public class ExemploReferencia{ public static void main(String[] args) { Produto prod = new Produto(); prod.setNome("Duke"); prod.setPreco(75.90);
Pessoa paulo = new Pessoa("Paulo"); paulo.setIdade(40); paulo.setCpf("111.111.111-11"); }}
116
3.2 - DESENVOLVER CÓDIGO QUE DECLARE CLASSES CONCRETAS, CLASSES ABSTRATAS E INTERFACES, CÓDIGO QUE OFEREÇA SUPORTE A HERANÇA DE INTERFACE E IMPLEMENTAÇÃO, CÓDIGO QUE DECLARE MÉTODOS E ATRIBUTOS DE INSTÂNCIAS E CÓDIGO QUE UTILIZE MODIFICADORES DE ACESSO JAVA: PRIVADOS E PÚBLICOS.
117
Guia de Estudos para SCJA
CLASSE CONCRETA Nome da Classe
Carro, Pessoa, ContaCorrente, CaixaCorreio Atributos
idade, nome, listaMensagens, notaAluno Métodos
getPessoa, consultarAluno, enviarMensagemEmail
118
Guia de Estudos para SCJA
CLASSE CONCRETA/** * Classe utilizada para demonstrar a estrutura de uma classe. */public class NovaClasse { /* Declaração dos atributos da classe. */ public int atributo1; public float atributo2; public boolean atributo3;
/* Declaração dos métodos da classe. */
public void metodo1() { //Comandos System.out.println("Chamando o metodo 1."); }
public void metodo2() { //Comandos System.out.println("Chamando o metodo 2."); }}
119
Guia de Estudos para SCJA
CLASSE CONCRETApublic class Livro {
private String titulo;
private String autor;
private double preco;
public Livro() {
}
public void setTitulo(String _titulo) { titulo = _titulo; }
public String getTitulo() { return titulo; }
public void setAutor(String _autor) { autor = _autor; }
public String getAutor() { return autor; }
public void setPreco(double _preco) { preco = _preco; }
public String getPreco() { return preco; }
}
120
Guia de Estudos para SCJA
ATRIBUTO DE INSTÂNCIA Atributos de instância são “variáveis” declaradas a
nível de classe, que são utilizados para representar as propriedades (estado) que o objeto desta classe pode ter.
Por convenção, costuma-se escrever o atributo com letras minúsculas, a menos que ele seja composto por mais de uma palavra, a primeira palavra é toda em minúscula e as demais começam com a primeira letra em maiúsculo e o restante da palavra em minúscula.
Exemplo: idade, nome, listaMensagens, notaAlunoTurma, etc
121
Guia de Estudos para SCJA
ATRIBUTO DE INSTÂNCIA Exemplo de declaração de atributo:
/** * Classe utilizada para demonstrar a utilização de atributos. */public class Atributo {
/* Declaração dos atributos da classe. */ public int atributo1; public float atributo2; public boolean atributo3;
}
122
Guia de Estudos para SCJA
MÉTODOS São blocos de códigos que representam as
funcionalidades (ações) que a classe apresentará. Por convenção, costuma-se escrever o método com
letras minúsculas, a menos que ele seja composto por mais de uma palavra, a primeira palavra é toda em minúscula e as demais começam com a primeira letra em maiúsculo e o restante da palavra em minúscula.
Exemplo: getPessoa, consultarDadosAluno, enviarMensagemEmail,
etc
123
Guia de Estudos para SCJA
MÉTODOS Os métodos podem ou não retornar algum valor no
final de sua execução, esta informação deve constar na assinatura do método.
Quando não desejamos retornar valor devemos a palavra chave void.
Podemos também informar o tipo de retorno que pode ser um tipo primitivo ou referencia de objeto, lembrando que quando informamos o tipo de retorno então é obrigatório que esse retorno aconteça.
124
Guia de Estudos para SCJA
MÉTODOS/** * Classe utilizada para demonstrar o uso de métodos com retorno de valor. */public class MetodoRetorno { public int atributo1;
/** * Método utilizado para retornar o atributo1. * @return int com o valor do atributo1. */ public int metodo1() { System.out.println("Chamou o metodo 1."); return atributo1; }
/** * Método que verificar se o atributo1 é maior ou igual a 0 (zero). * @return boolean informando se o atributo1 é positivo */ public boolean metodo2() { System.out.println("Chamou o metodo 2."); return atributo1 >= 0; }}
125
Guia de Estudos para SCJA
MÉTODOS Os métodos também podem receber valores para
serem utilizados durante sua execução, esses valores são chamados parâmetros.
Exemplo:/** * Classe utilizada para demonstrar o uso de métodos que recebem parâmetros. */public class MetodoParametro { public int atributo1;
/** * Método utilizado para atribuir o valor do atributo1. */ public void metodo1(int valor) { System.out.println("Chamando o metodo 1."); atributo1 = valor; System.out.println("O valor do atributo1 eh: " + atributo1); }
126
Guia de Estudos para SCJA
MÉTODOS /** * Método que recebe uma quantidade de parâmetros variados e imprime todos os * valores recebidos. Essa possibilidade de receber uma quantidade de * parâmetros variados é chamado de varargs e foi implementado a partir * da versão 5.0 do java. */ public void metodo2(int... valores) { System.out.println("Chamando o metodo 2."); if(valores.length > 0) { /* Para cada argumento recebido como parâmetro, imprime seu valor. */ for(int cont = 0; cont < valores.length; cont++) { int valor = valores[cont]; System.out.print(valor + " "); } System.out.println("\n");
/* Este for faz a mesma coisa que o anterior, este novo tipo de for chamado foreach foi implementado a partir da versão 5.0 do java. */ for(int valor : valores) { System.out.print(valor + " "); } } }}
127
Guia de Estudos para SCJA
MÉTODOS COM PASSAGEM DE PARÂMETRO
20
1.96
3
Livrotitulo=“Java com Aveia”autor=“Sakurai”valor=“35.90”
Sta
ckH
eap
public class VendaLivro { public static void main(String[] args) { int quantidade = 3; Livro livro = new Livro(); livro.setTitulo("Java com Aveia"); livro.setAutor("Sakurai"); livro.setPreco(35.90);
Comprovante c = new Comprovante(); c.emitir(quantidade, livro); }}
public class Comprovante { public void emitir(int qtd, Livro l) { /* utiliza o qtd e o l para emitir comprovante. */ }}
128
Guia de Estudos para SCJA
MÉTODOS COM PASSAGEM DE PARÂMETRO
20
1.96
3
3
Livrotitulo=“Java com Aveia”autor=“Sakurai”valor=“35.90”
Sta
ckH
eap
public class VendaLivro { public static void main(String[] args) { int quantidade = 3; Livro livro = new Livro(); livro.setTitulo("Java com Aveia"); livro.setAutor("Sakurai"); livro.setPreco(35.90);
Comprovante c = new Comprovante(); c.emitir(quantidade, livro); }}
public class Comprovante { public void emitir(int qtd, Livro l) { /* utiliza o qtd e o l para emitir comprovante. */ }}
129
Guia de Estudos para SCJA
MÉTODOS Para construirmos uma classe precisamos chamar um
método construtor, exemplo:Livro livro = new Livro();
O método construtor é especial pois através dele é criado um objeto da classe.
Um construtor tem a seguinte assinatura:visibilidade NomeClasse(parâmetros)
Note que neste exemplo o método construtor Livro() não recebe nenhum parâmetro, também chamado de construtor padrão.
Quando não declaramos nenhum construtor na classe, o compilador do Java adiciona um construtor padrão.
130
Guia de Estudos para SCJA
CLASSE ABSTRATA Define um modelo (template) para representar
entidades e conceitos abstratos. Utilizada como classe pai (base) para criação de outras
classes. Pode ter métodos implementados de forma genérica Pode definir métodos abstratos que devem ser
implementados pelas subclasses concretas. Em Java para criarmos uma classe abstrata utilizamos a
palavra-chave abstract.
131
Guia de Estudos para SCJA
EXEMPLO UML DE CLASSE ABSTRATA
132
Guia de Estudos para SCJA
EXEMPLO DE CLASSE ABSTRATA/** * Classe abstrata que possui os métodos básicos para * as telas do computador de bordo de um veiculo. */public abstract class Tela { private String titulo; public void setTitulo(String titulo) { this.titulo = titulo; } public abstract String obterInformacao(); public void imprimir() { System.out.println(this.titulo); System.out.println("\t" + obterInformacao()); }}
133
Guia de Estudos para SCJA
EXEMPLO DE CLASSE ABSTRATA/** * Tela que mostra a kilometragem percorrida por um veiculo. */public class TelaKilometragem extends Tela { /* Atributo que guarda o valor da km atual do veiculo. */ int km = 0; /* Construtor que iniciliza o titulo da tela. */ public TelaKilometragem() { /* Atribui o valor do titulo desta tela. */ super.setTitulo("Km Atual"); } /** * Implementa o método abstrato da classe Tela, * neste método buscamos a km atual do veiculo. * @return Texto com a km atual. */ @Override public String obterInformacao() { km += 10; return String.valueOf(km) + " km"; }}
134
Guia de Estudos para SCJA
EXEMPLO DE CLASSE ABSTRATA/** * Classe utilizada para testar a Tela Kilometragem. */public class TesteTelaKm { public static void main(String[] args) { TelaKilometragem tk = new TelaKilometragem(); tk.imprimir(); System.out.println("\n------------\n"); tk.imprimir(); }}
135
Guia de Estudos para SCJA
EXEMPLO DE CLASSE ABSTRATA Compilar os arquivos Tela.java,
TelaKilometragem.java e TesteTelaKm e executar o arquivo TesteTelaKm.class.
136
Guia de Estudos para SCJA
INTERFACE A interface é utilizada para definir assinaturas de
métodos que todas as classes que forem implementá-la devem seguir.
Podemos associar uma interface a um contrato onde todas as classes que querem ter esse contrato precisam implementar seus métodos.
Para criar uma interface em Java utilizamos a palavra-chave interface.
137
Guia de Estudos para SCJA
INTERFACE A interface pode:
uma interface pode extender outra interface declarar atributos como constantes declarar assinatura de métodos públicos
A interface não pode: implementar método declarar construtor extender classe implementar outra interface não pode ser final não pode ter métodos com visibilidade private, protected
ou default (padrão)
138
Guia de Estudos para SCJA
EXEMPLO DE INTERFACE
139
Guia de Estudos para SCJA
EXEMPLO DE INTERFACE/** * Classe utilizada para representar uma Conta bancaria. */public class Conta { // Nome do proprietário da Conta. private String nomeProprietario; // Número da Conta. private int numero; // Saldo da Conta. private double saldo;
public String getNomeProprietario() { return nomeProprietario; } public void setNomeProprietario(String nomeProprietario) { this.nomeProprietario = nomeProprietario; }
public int getNumero() { return numero; } public void setNumero(int numero) { this.numero = numero; }
public double getSaldo() { return saldo; } public void setSaldo(double saldo) { this.saldo = saldo; }}
140
Guia de Estudos para SCJA
EXEMPLO DE INTERFACE/** * Interface utilizada para representar os métodos mínimos que * os bancos precisam implementar. */public interface Banco { public abstract void manutencaoConta(Conta conta); public abstract boolean saque(Conta conta, double valor); public abstract boolean deposito(Conta conta, double valor); public abstract void extrato(Conta conta);}
141
Guia de Estudos para SCJA
EXEMPLO DE INTERFACE/** * Classe utilizada para representar o Banco Sakurai */public class BancoSakurai implements Banco { // Conta que representa o Banco Sakurai. private Conta contaBancoSakurai = null; /** * Construtor padrão da classe. * Cria uma conta para o banco sakurai. */ public BancoSakurai() { this.contaBancoSakurai = new Conta(); this.contaBancoSakurai.setNomeProprietario("Banco Sakurai"); this.contaBancoSakurai.setNumero(0); this.contaBancoSakurai.setSaldo(0d); }
public void manutencaoConta(Conta conta) { boolean temSaldo = conta.getSaldo() >= 0.25;
142
Guia de Estudos para SCJA
EXEMPLO DE INTERFACE //Verifica se tem saldo para realizar a manutenção da conta. if(temSaldo) { double novoSaldo = conta.getSaldo() - 0.25; conta.setSaldo(novoSaldo); //Deposita o dinheiro da manutenção na conta do banco sakurai. deposito(this.contaBancoSakurai, 0.25); } else { System.out.println("Não conseguiu cobrar a manutenção da conta " + conta.getNumero() + " !!!"); } }
public boolean saque(Conta conta, double valor) { //Verifica se tem saldo suficiente para fazer o saque if(conta.getSaldo() >= valor) { //Realiza o saque na conta. double novoValor = conta.getSaldo() - valor; conta.setSaldo( novoValor ); System.out.println("Saque efetuado!!!"); //Toda vez que fizer um saque faz cobra a manutenção da conta. manutencaoConta(conta); return true;
143
Guia de Estudos para SCJA
EXEMPLO DE INTERFACE } else { System.out.println("Não conseguiu fazer o saque!!!"); //Se não conseguir fazer o saque, mostra o extrato da conta. extrato(conta); return false; } }
public boolean deposito(Conta conta, double valor) { //Realiza o deposito na conta. double novoValor = conta.getSaldo() + valor; conta.setSaldo(novoValor); System.out.println("Deposito efetuado!!!"); return true; }
public void extrato(Conta conta) { System.out.println("\n -- BANCO SAKURAI -- \n"); System.out.println("-> EXTRATO CONTA\n"); System.out.println("Nome: " + conta.getNomeProprietario()); System.out.println("Numero: " + conta.getNumero()); System.out.println("Saldo: " + conta.getSaldo()); System.out.println("\n---------------------\n"); }
144
Guia de Estudos para SCJA
EXEMPLO DE INTERFACE public boolean transferencia(Conta contaOrigem, Conta contaDestino, double valor) { boolean fezSaque = saque(contaOrigem, valor); //Verifica se conseguiu sacar dinheiro na conta de origem. if(fezSaque) { //Faz o deposito na conta de destino. deposito(contaDestino, valor); System.out.println("Transferencia efetuada."); return true; } else { System.out.println("Não conseguiu fazer a transferencia."); return false; } }}
145
Guia de Estudos para SCJA
EXEMPLO DE INTERFACE/** * Classe utilizada para representar o Banco Cristiano. */public class BancoCristiano implements Banco { private Conta contaBancoCristiano = null; public BancoCristiano() { this.contaBancoCristiano = new Conta(); this.contaBancoCristiano.setNomeProprietario("Banco Cristiano"); this.contaBancoCristiano.setNumero(0); this.contaBancoCristiano.setSaldo(0d); }
public void manutencaoConta(Conta conta) { //Sempre executa o saque na conta bancaria. double novoSaldo = conta.getSaldo() - 0.01; conta.setSaldo(novoSaldo); //Deposita o dinheiro da manutenção na conta do Banco Cristiano. double saldoBanco = this.contaBancoCristiano.getSaldo() + 0.01; this.contaBancoCristiano.setSaldo(saldoBanco); }
146
Guia de Estudos para SCJA
EXEMPLO DE INTERFACE public boolean saque(Conta conta, double valor) { //Verifica se tem saldo suficiente para fazer o saque if(conta.getSaldo() >= valor) { //Realiza o saque na conta. double novoValor = conta.getSaldo() - valor; conta.setSaldo( novoValor ); System.out.println("Saque efetuado!!!"); //Toda vez que fizer um saque faz cobra a manutenção da conta. manutencaoConta(conta); return true; } else { System.out.println("Não conseguiu fazer o saque!!!"); //Se não conseguir fazer o saque, mostra o extrato da conta. extrato(conta); return false; } }
147
Guia de Estudos para SCJA
EXEMPLO DE INTERFACE public boolean deposito(Conta conta, double valor) { //Realiza o deposito na conta. double novoValor = conta.getSaldo() + valor; conta.setSaldo(novoValor); System.out.println("Deposito efetuado!!!"); //Toda vez que fizer um deposito faz cobra a manutenção da conta. manutencaoConta(conta); return true; }
public void extrato(Conta conta) { System.out.println("\n -- BANCO CRISTIANO -- \n"); System.out.println("-> EXTRATO CONTA\n"); System.out.println("Nome: " + conta.getNomeProprietario()); System.out.println("Numero: " + conta.getNumero()); System.out.println("Saldo: " + conta.getSaldo()); System.out.println("\n---------------------\n"); }}
148
Guia de Estudos para SCJA
EXEMPLO DE INTERFACE/** * Classe utilizada para testar a interface Banco, e as * classes BancoCristiano e BancoSakurai. */public class BancoTeste { public static void main(String[] args) { Banco bancoCristiano = new BancoCristiano(); Conta contaC = new Conta(); contaC.setNomeProprietario("Cristiano Camilo"); contaC.setNumero(1); contaC.setSaldo(1000); bancoCristiano.deposito(contaC, 150.50); bancoCristiano.saque(contaC, 500); bancoCristiano.extrato(contaC); Banco bancoSakurai = new BancoSakurai(); Conta contaS = new Conta(); contaS.setNomeProprietario("Rafael Sakurai"); contaS.setNumero(1); contaS.setSaldo(500); bancoSakurai.deposito(contaS, 40.99); bancoSakurai.saque(contaS, 300); bancoSakurai.extrato(contaS); }}
149
Guia de Estudos para SCJA
EXEMPLO DE INTERFACE
150
Guia de Estudos para SCJA
COMPARATIVO CLASSE ABSTRATA X INTERFACE
Classe Abstrata InterfacePossui atributos de instância Possui apenas constantes
Possui métodos de diversas visibilidades e métodos implementados ou abstratos Todos métodos são public e abstract
É estendida por classes (sub-classes) É implementada por classes
Uma sub-classe só pode estender uma única classe abstrata (regra básica da herança em Java)
Uma classe pode implementar mais de uma interface
Hierarquia de herança com outras classes abstratas
Hierarquia de herança com outrasinterfaces
151
Guia de Estudos para SCJA
HERANÇA Em Java, podemos criar classes que herdam atributos e
métodos de outras classes, evitando reescrita de código. Este tipo de relacionamento é chamado de Herança.
Para representarmos este tipo de relacionamento na linguagem, devemos utilizar a palavra reservada extends, de forma a apontar para qual classe a nossa nova classe deve herdar seus atributos e métodos.
Utilizando herança podemos também guardar instâncias de objetos de subclasses em variáveis do tipo das superclasses.
152
Guia de Estudos para SCJA
HERANÇA Uma classe pode herdar apenas de uma classe
(superclasse). Quando uma classe não define explicitamente que está herdando outra classe então esta classe é filha de java.lang.Object, ou seja, a classe Object é a classe pai de todas as classes.
Por Object ser pai de todas as classes, todas as classes herdam os seguintes métodos dela:
153
Guia de Estudos para SCJA
HERANÇA Quando lidamos com classes que possuem a relação de
herança, podemos fazer uso de duas palavras-chave que servem para identificar se estamos utilizando um método e ou atributo da classe atual ou de sua super classe, estes comandos são: this Define que o recurso pertence à classe atual. super Define que o recurso pertence à super classe.
154
Guia de Estudos para SCJA
HERANÇA Neste exemplo temos a superclasse Pessoa, e três
subclasses Funcionario, Aluno e Coordenador.
155
Guia de Estudos para SCJA
HERANÇA/** * Classe utilizada para representar a Pessoa. */public class Pessoa { private String nome; private int matricula; /** * Construtor que recebe o nome da pessoa. * @param nome */ public Pessoa(String nome, int matricula) { this.nome = nome; this.matricula = matricula; }
public int getMatricula() { return matricula; } public void setMatricula(int matricula) { this.matricula = matricula; }
public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; }}
156
Guia de Estudos para SCJA
HERANÇA/** * Classe utilizada para representar um Funcionario que é uma Pessoa. */public class Funcionario extends Pessoa { private String departamento; public Funcionario(String nome, int matricula, String departamento) { super(nome, matricula); this.departamento = departamento; }
public String getDepartamento() { return departamento; }
public void setDepartamento(String departamento) { this.departamento = departamento; }}
157
Guia de Estudos para SCJA
HERANÇA/** * Classe utilizada para representar um Coordenador que é uma Pessoa. */public class Coordenador extends Pessoa { private String cursoCoordenado;
public Coordenador(String nome, int matricula, String cursoCoordenado) { super(nome, matricula); this.cursoCoordenado = cursoCoordenado; }
public String getCursoCoordenado() { return cursoCoordenado; }
public void setCursoCoordenado(String cursoCoordenado) { this.cursoCoordenado = cursoCoordenado; }}
158
Guia de Estudos para SCJA
HERANÇA/** * Classe utilizada para testar a Herança da classe Funcionario. */public class TesteFuncionario { public static void main(String[] args) { /* Declarações comuns. */ Pessoa camilo = new Pessoa("Camilo", 123); Funcionario rafael = new Funcionario("Rafael", 111, "informatica"); /* Todo Funcionario é uma Pessoa. */ Pessoa sakurai = new Funcionario("Sakurai", 222, "telecomunicação"); /* Erro de compilação, porque nem toda Pessoa é um Funcionario. */ Funcionario cristiano = new Pessoa("Cristiano", 456); }}
159
Guia de Estudos para SCJA
HERANÇA Com a declaração acima, temos as classe Funcionario
e Coordenador como classes filha ou subclasses da classe pai Pessoa. Com isso podemos dizer que as subclasses Funcionario e Coordenador herdam todos os atributos e métodos da sua superclasse Pessoa.
Por isso lembre-se, o Funcionario É UMA Pessoa, pois é uma subclasse, logo apenas possui algumas características a mais do que Pessoa, porém podemos sempre manuseá-lo como uma Pessoa.
160
Guia de Estudos para SCJA
MODIFICADOR DE ACESSO Os modificadores de acesso são utilizados para proteger o
acesso a um atributo, método ou uma classe de outras classes, em Java temos os seguintes modificadores: private (Restringe totalmente o acesso do atributo ou método
da classe de todas as demais classes) default (Apenas classes do mesmo pacote tem acesso a
classe, método ou atributo que possui este modificador) protected (Um atributo ou método é visível apenas para as
classes do mesmo pacote ou para as subclasses daquela classe)
public (classes, métodos e atributos podem ser acessados a partir de qualquer outra classe)
Dentro de um arquivo .java, só pode existir uma classe do tipo public e esta classe precisa obrigatoriamente ter o mesmo nome que o nome do arquivo .java.
161
Guia de Estudos para SCJA
MODIFICADORES DE ACESSO
Modificador Em uma classe Em um método Em um atributoprivate Não aplicável Acesso pela classe Acesso pela classe
protected Não aplicávelAcesso pelo pacote e subclasses
Acesso pelo pacote e subclasses
default Somente pacote Acesso pelo pacote Acesso pelo pacotepublic Acesso total Acesso total Acesso totalabstract Não instância Deve ser sobrescrito Não aplicávelfinal Sem herança Não pode ser sobrescrito Constantestatic Não aplicável Acesso pela classe Acesso pela classenative Não aplicável Indica código nativo Não aplicáveltransient Não aplicável Não aplicável Não serializavel
synchonized Não aplicável Sem acesso simultâneo Não aplicável
162
3.3 - DESENVOLVER CÓDIGO QUE IMPLEMENTE ASSOCIAÇÕES DE CLASSES SIMPLES E CÓDIGO QUE IMPLEMENTE MULTIPLICIDADE USANDO MATRIZES; E RECONHECER CÓDIGO QUE IMPLEMENTE COMPOSIÇÕES EM OPOSIÇÃO A ASSOCIAÇÕES SIMPLES E CÓDIGO QUE IMPLEMENTE CORRETAMENTE A NAVEGAÇÃO DE ASSOCIAÇÕES.
163
Guia de Estudos para SCJA
ASSOCIAÇÃO DE CLASSE SIMPLES Associação é quando uma classe possui um
relacionamento com outra classe, exemplo:
A classe Usuario possui um atributo chamado perfil que é do tipo da classe Perfil e um atributo chamado endereco que é do tipo da classe Endereco.
164
Guia de Estudos para SCJA
A implementação em Java fica da seguinte forma:
ASSOCIAÇÃO DE CLASSE SIMPLES
public class Perfil { private String nome;}
public class Endereco { private String estado; private String cidade; private String bairro; private String logradouro; private String cep;}
public class Usuario{ private String nome; private String cpf; private String login; private String senha; private Perfil perfil; private Endereco endereco;}
165
Guia de Estudos para SCJA
COMPOSIÇÃO Uma composição é um relacionamento mais forte que a
associação, pois uma classe depende da outra para existir, exemplo:
A classe DetalheUsuario depende da classe Usuario para ser criada, sem a classe Usuario não tem porque ela existir.
166
Guia de Estudos para SCJA
COMPOSIÇÃO A implementação em Java fica da seguinte forma:
public class Usuario{ private String nome; private String login; private String senha; private Perfil perfil; private DetalheUsuario detalhe;}
public class DetalheUsuario { private String endereco; private String telefone; private String email;}
167
Guia de Estudos para SCJA
NAVEGAÇÃO A navegação informa a direção entre os
relacionamentos.
A partir da classe Venda podemos chegar nas classes Funcionario, Produto e Cliente.
168
Guia de Estudos para SCJA
NAVEGAÇÃO A implementação em Java fica da seguinte forma:public class Funcionario { private String nome; }
public class Cliente { private String nome;}
public class Produto{ private String nome; private double preco;}
public class Venda { private Cliente cliente; private Produto produto; private Funcionario funcionario;
public Cliente getCliente() { return this.cliente; } public Produto getProduto() { return this.produto; } public Funcionario getFuncionario() { return this.funcionario; }}
169
Guia de Estudos para SCJA
MULTIPLICIDADE COM MATRIZES Quando uma classe pode guardar mais de uma
referencia para outra classe, podemos utilizar uma estrutura de vetor, matriz, lista e outros, exemplo:
A classe Pagamento possui um conjunto da classe Servico, através do relacionamento da UML sabemos que é no mínimo 1 e não tem limite de quantidade máxima.
170
Guia de Estudos para SCJA
MULTIPLICIDADE COM MATRIZES A implementação em Java fica da seguinte forma:
public class Pagamento{ private Prestador prestador; private Servico[] servicos; private long numero;
public Servico[] getServicos() { return this.servicos; }}
public class Servico { private String nome; private BigDecimal preco; private char status;}
171
3.4 - DESENVOLVER CÓDIGO QUE UTILIZE POLIMORFISMO PARA CLASSES E INTERFACES, BEM COMO RECONHECER CÓDIGO QUE UTILIZE O PRINCÍPIO "PROGRAMA PARA UMA INTERFACE".
172
Guia de Estudos para SCJA
POLIMORFISMO Polimorfismo é a capacidade de um objeto ser
referenciado de diversas formas e com isso realizar as mesmas tarefas (ou chamadas de métodos) de diferentes formas.
Durante a execução do programa, a JVM verifica qual a classe de origem do objeto e chama o método desta classe.
173
Guia de Estudos para SCJA
POLIMORFISMO COM HERANÇA
174
Guia de Estudos para SCJA
POLIMORFISMO COM HERANÇA/** * Classe utilizada para representar uma Pessoa. */public class Pessoa { private String nome;
public String getNome() { return nome; }
public void setNome(final String nome) { this.nome = nome; }}
175
Guia de Estudos para SCJA
POLIMORFISMO COM HERANÇA/** * Classe utilizada para representar uma Pessoa Fisica * que É UMA subclasse de Pessoa. */public class PessoaFisica extends Pessoa { private String cpf;
public String getCpf() { return cpf; }
public void setCpf(String cpf) { this.cpf = cpf; }
public String getNome() { return "Pessoa Fisica: " + super.getNome() + " - CPF: " + this.getCpf(); }}
176
Guia de Estudos para SCJA
POLIMORFISMO COM HERANÇA/** * Classe utilizada para representar uma Pessoa Fisica * que É UMA subclasse de Pessoa. */public class PessoaJuridica extends Pessoa { private String cnpj;
public String getCnpj() { return cnpj; }
public void setCnpj(String cnpj) { this.cnpj = cnpj; }
public String getNome() { return "Pessoa Juridica: " + super.getNome() + " - CNPJ: " + this.getCnpj(); }}
177
Guia de Estudos para SCJA
POLIMORFISMO COM HERANÇA/** * Classe utilizada para demonstrar o uso do polimorfismo, vamos criar um vetor * de Pessoa e adicionar nele objetos do tipo PessoaFisica e PessoaJuridica. */public class TestePessoa { public static void main(String[] args) { PessoaFisica fisica = new PessoaFisica(); fisica.setNome("Cristiano"); fisica.setCpf("12345678901");
PessoaJuridica juridica = new PessoaJuridica(); juridica.setNome("Rafael"); juridica.setCnpj("010101010101010101");
Pessoa[] pessoas = new Pessoa[2]; pessoas[0] = fisica; pessoas[1] = juridica;
for(Pessoa pessoa : pessoas) { System.out.println(pessoa.getNome()); } }}
178
Guia de Estudos para SCJA
POLIMORFISMO COM HERANÇA Durante o laço for, mesmo as variáveis sendo do tipo
Pessoa, o método getNome() foi chamado da classe PessoaFisica e PessoaJuridica, porque durante a execução do programa, a JVM percebe de qual classe foi criada o objeto que está guardado na variável pessoa.
179
Guia de Estudos para SCJA
POLIMORFISMO COM INTERFACE
180
Guia de Estudos para SCJA
POLIMORFISMO COM INTERFACE/** * Interface que deve ser implementada por todas as classes que devem * ser ordenadas. */public interface Comparavel { /** * Assinatura de método que toda classe que quer permitir * a comparação entre seus objetos precisa implementar. * * @param o - Objeto que será comparado. * @return 0 se os objetos forem iguais * > 0 se o objeto recebido é menor que o objeto que será comparado. * < 0 se o objeto recebido é maior que o objeto que será comparado. */ public abstract int comparar(Object o);}
181
Guia de Estudos para SCJA
POLIMORFISMO COM INTERFACE/** * Classe utilizada para ordenar qualquer tipo de classe * que implementa a interface Comparavel. */public class Ordenar { /** * Método que utiliza o algoritmo de bubble sort * para ordenar um vetor de objetos do tipo <code>Comparavel</code>. * @param objetos - Vetor de objetos que ordenados. */ public void ordenar(Comparavel[] objetos) { for (int i = 0; i < objetos.length; i++) { for (int j = i + 1; j < objetos.length; j++) { /* Verifica se os objetos não estão na ordem. */ if(objetos[i].comparar(objetos[j]) > 0) { /* Troca os objetos de lugar no vetor. */ Comparavel temp = objetos[i]; objetos[i] = objetos[j]; objetos[j] = temp; } } } }}
182
Guia de Estudos para SCJA
POLIMORFISMO COM INTERFACE/** * Classe utilizada para representar um Livro, esta classe * implementa a interface Comparavel. */public class Livro implements Comparavel { private String autor; private String titulo;
public Livro(String autor, String titulo) { this.autor = autor; this.titulo = titulo; }
public String getAutor() { return autor; }
public void setAutor(String autor) { this.autor = autor; }
public String getTitulo() { return titulo; }
183
Guia de Estudos para SCJA
POLIMORFISMO COM INTERFACE public void setTitulo(String titulo) { this.titulo = titulo; }
public int comparar(Object o) { int comparacao = 0; //Verifica se o objeto que vai comparar é do tipo Livro. if (o instanceof Livro) { Livro livro = (Livro) o; comparacao = this.getAutor().compareTo(livro.getAutor());
//Se os autores forem iguais, compara o titulo dos livros. if (comparacao == 0) { comparacao = this.getTitulo().compareTo(livro.getTitulo()); } }
return comparacao; }}
184
Guia de Estudos para SCJA
POLIMORFISMO COM INTERFACE/** * Classe utilizada para testar a ordenação genérica. */public class TestarOrdenacao { public static void main(String[] args) { /* Cria uma vetor de livros. */ Livro[] livros = new Livro[4]; livros[0] = new Livro("Sakurai", "Almoçando com Java"); livros[1] = new Livro("Cristiano", "Classes Java em fila indiana"); livros[2] = new Livro("Sakurai", "Java em todo lugar"); livros[3] = new Livro("Cristiano", "Viajando no Java"); /* Ordena os livros */ Ordenar o = new Ordenar(); o.ordenar(livros); /* Imprime os livros ordenados. */ for(int cont = 0; cont < livros.length; cont++) { System.out.println("Autor: " + livros[cont].getAutor()); System.out.println("Livro: " + livros[cont].getTitulo()); System.out.println("\n---------\n"); } }}
185
Guia de Estudos para SCJA
POLIMORFISMO Quando utilizamos polimorfismo estamos restringindo
os métodos baseado no tipo de referencia do objeto, exemplo:
O tipo de referencia do objeto é Comparavel e através dela podemos chamar apenas o método comparar(), não podemos chamar os métodos que foram declarados na classe Livro.
Comparavel livro = new Livro("Java com Aveia", "Rafael");
Livro onlyJava = new Livro("Only Java", "Sakurai");livro.comparar(onlyJava);
livro.getNome(); //Erro de compilação
186
Guia de Estudos para SCJA
DINAMIC BINDING Mas porque quando chamamos o método comparar()
da interface Comparavel é chamado o método comparar() da classe Livro?
Em tempo de execução a JVM verifica qual o objeto está sendo referenciado e chama seu método, isto é chamado Dinamic Binding.
Comparavel livro = new Livro("Java com Aveia", "Rafael");Livro onlyJava = new Livro("Only Java", "Sakurai");
livro.comparar(onlyJava);
187
Guia de Estudos para SCJA
CASTING DE OBJETO Vimos anteriormente que uma Pessoa (superclasse)
nem sempre É UMA PessoaFisica (subclasse), mas quando estamos trabalhando com uma superclasse e temos a certeza de qual o tipo de subclasse ele está representando podemos fazer o casting de objetos, para guardar o objeto em sua classe, funciona de forma similar ao casting de atributos primitivos.
No exemplo abaixo vamos criar duas variáveis do tipo Pessoa com objetos do tipo PessoaFisica e PessoaJuridica, depois vamos também criar uma variável do tipo Object (que é a superclasse de todas as classes) e guardar nela um objeto do tipo String.
188
Guia de Estudos para SCJA
CASTING DE OBJETO/** * Classe utilizada para demonstrar o uso do polimorfismo, vamos criar duas * variáveis do tipo Pessoa e adicionar nele objetos do tipo PessoaFisica e * PessoaJuridica. */public class TestePessoa4 { public static void main(String[] args) { Pessoa pessoa1 = new PessoaFisica(); pessoa1.setNome("Cristiano"); Pessoa pessoa2 = new PessoaJuridica(); pessoa2.setNome("Rafael");
PessoaFisica fisica = (PessoaFisica) pessoa1; fisica.setCpf(12345678901L); PessoaJuridica juridica = (PessoaJuridica) pessoa2; juridica.setCnpj(1000100012345678L); System.out.println(fisica.getNome()); System.out.println(juridica.getNome());
Object objeto = "Programacao Orientada a Objetos"; String texto = (String) objeto; System.out.println(texto); }}
189
Guia de Estudos para SCJA
CASTING DE OBJETO Compilar e executar o arquivo TestePessoa4.java.
190
Guia de Estudos para SCJA
PROGRAME PARA UMA INTERFACE
Programando para implementação
Programando para interface
OrdenarLivro ordenadorDeLivros = new OrdenadorLivro();Livro[] livros = new Livros[] { new Livro("Only Java", "Sakurai"), new Livro("Java com Aveia", "Rafael") };ordenadorDeLivros.ordenarLivro(livros);
OrdenarPessoa ordenadorDePessoas = new OrdenarPessoa();Pessoa[] pessoas = new Pessoa[] { new PessoaFisica("Sakurai"), new PessoaJuridica("Rafael") };ordenadorDePessoas.ordenar(pessoas);
Ordenar o = new Ordenar();Livro[] livros = new Livros[] { new Livro("Only Java", "Sakurai"), new Livro("Java com Aveia", "Rafael") };o.ordenar(livros);
Pessoa[] pessoas = new Pessoa[] { new PessoaFisica("Sakurai"), new PessoaJuridica("Rafael") };o.ordenar(pessoas);
191
4- PROJETO E IMPLEMENTAÇÃO DE
ALGORITMOS
192
4.1 - DESCREVER, COMPARAR E CONTRASTAR ESTES TRÊS TIPOS DE INSTRUÇÕES FUNDAMENTAIS: ATRIBUIÇÃO, CONDICIONAL E ITERAÇÃO; COM BASE NA DESCRIÇÃO DE UM ALGORITMO, SELECIONAR O TIPO APROPRIADO DE INSTRUÇÃO PARA PROJETAR O ALGORITMO.
193
Guia de Estudos para SCJA
INSTRUÇÕES FUNDAMENTAIS Quando queremos guardar o valor de um tipo primitivo
ou uma referência para um objeto, podemos guardá-los em variáveis, isto também é chamado de atribuição.
194
Guia de Estudos para SCJA
INSTRUÇÕES FUNDAMENTAIS Quando queremos executar um determinado conjunto
de instruções, em uma determinada condição ou situação, podemos utilizar estruturas do tipo condicional.
195
Guia de Estudos para SCJA
INSTRUÇÕES FUNDAMENTAIS Quando queremos executar um certo conjunto de
instruções n vezes, durante uma determinada condição ou situação, podemos utilizar estruturas do tipo iteração.
196
4.2 - COM BASE EM UM ALGORITMO COMO PSEUDO-CÓDIGO, DETERMINAR O ESCOPO CORRETO DE UMA VARIÁVEL USADA NO ALGORITMO E DESENVOLVER CÓDIGO PARA DECLARAR VARIÁVEIS EM QUALQUER UM DOS SEGUINTES ESCOPOS: VARIÁVEL DE INSTÂNCIA, PARÂMETRO DE MÉTODO E VARIÁVEL LOCAL.
197
Guia de Estudos para SCJA
ESCOPO DE VARIÁVEL Variáveis de instância são criadas em nível de classe
que podem ser utilizadas para guardar informações (estado) para cada objeto que estiver em memória.
Este tipo de variável tem um escopo de vida igual a vida do objeto onde ele está referenciado.
198
Guia de Estudos para SCJA
ESCOPO DE VARIÁVEL Parâmetros de método são variáveis recebidas por
parâmetro de método. Todo parâmetro é passado por cópia, ou seja: Se o parâmetro for do tipo primitivo, então é copiado o
valor da variável de origem para o parâmetro do método. Se o parâmetro for um objeto, então é copiado o valor da
referência ao objeto original. Este tipo de variável tem o escopo de vida igual ao
tempo da chamada do método.
199
Guia de Estudos para SCJA
ESCOPO DE VARIÁVEL Variável local é criada dentro de blocos de chave { },
este tipo de variável tem um escopo de vida limitado ao bloco. Estas variáveis são criadas para serem utilizadas para executar uma determinada instrução e depois são descartadas.
200
4.3 - COM BASE EM UM ALGORITMO COMO PSEUDO-CÓDIGO, DESENVOLVER CÓDIGO DE MÉTODO QUE IMPLEMENTE O ALGORITMO USANDO INSTRUÇÕES CONDICIONAIS (IF E SWITCH), INSTRUÇÕES DE ITERAÇÃO (FOR, FOR-EACH, WHILE E DO-WHILE), INSTRUÇÕES DE ATRIBUIÇÃO E INSTRUÇÕES BREAK E CONTINUE PARA CONTROLAR O FLUXO DENTRO DAS INSTRUÇÕES SWITCH E DE ITERAÇÃO.
201
Guia de Estudos para SCJA
INSTRUÇÕES CONDICIONAIS (IF / ELSE) A instrução condicionais if, é utilizada para executar
alguns comandos apenas se sua condição for true (verdadeira).
O else pode ou não acompanhar o if, mas o else não pode ser usado sozinho, e é utilizado para executar alguns comandos caso a condição do if for false (falso).
if (condição) { //Comandos executados caso a condição verdadeira.}
if (condição) { //Comandos executados caso a condição verdadeira.} else { //Comandos executados caso a condição falsa.}
202
Guia de Estudos para SCJA
INSTRUÇÕES CONDICIONAIS (IF / ELSE) Podemos também utilizar vários if / else aninhados:
if (condição1) { //Comandos executados caso a condição1 verdadeira.} else if (condição2) { //Comandos executados caso a condição2 verdadeira.} else if (condição3) { //Comandos executados caso a condição3 verdadeira.} else { //Comandos executados caso nenhuma das condições for verdadeira.}
203
Guia de Estudos para SCJA
INSTRUÇÕES CONDICIONAIS (IF / ELSE) Exemplo:
/** * Exemplo de estrutura de controle IF. */public class ExemploIf { public static void main(String[] args) { int idade = 15; if(idade >= 18) { System.out.println("Permissão para dirigir"); } else { System.out.println("Idade minima para dirigir eh 18 anos"); } }}
204
Guia de Estudos para SCJA
INSTRUÇÕES CONDICIONAIS (SWITCH) A instrução condicional switch é utilizada quando
queremos testar se o valor de uma variável pode atender um determinado caso.
switch( variável ) { case <possível valor da constante> : < instruções > break; case <possível valor da constante> : < instruções > break; default: < instruções > break;}
205
Guia de Estudos para SCJA
INSTRUÇÕES CONDICIONAIS (SWITCH) A instrução switch aceita apenas variáveis do tipo:
byte, short, int, char e enumeração. Cada case é um caso onde os comandos dentro dele
são executados se o valor constante dele for o mesmo que o valor da variável recebida no switch.
O bloco de comandos default representa uma condição geral de execução caso nenhuma das anteriores tenha sido atendida, sendo a sua utilização também é opcional.
O comando break é utilizado para bloquear a execução de blocos cases de forma desnecessária.
206
Guia de Estudos para SCJA
INSTRUÇÕES CONDICIONAIS (SWITCH)/** * Exemplo de estrutura de seleção SWITCH. */public class ExemploSwitch { public static void main(String[] args) { char nota = 'D'; switch(nota) { case 'A': System.out.println("Aluno aprovado. Conceito excelente!"); break; case 'B': System.out.println("Aluno aprovado. Conceito bom!"); break; case 'C': System.out.println("Aluno aprovado. Conceito medio!"); break; default: System.out.println("Aluno reprovado!"); break; } }}
207
Guia de Estudos para SCJA
INSTRUÇÕES DE ITERAÇÃO (FOR) Utilizamos a instrução for quando queremos executar um
bloco de instruções n vezes.for(<inicialização>; <condição de execução>; <pós-instruções>) {
<< instruções >>
}
Utilizamos a área inicialização para criar variáveis ou atribuir valores para variáveis já declaradas, mas todas as variáveis precisam ser do mesmo tipo, está área é executada antes de começar a estrutura de repetição do for.
Utilizamos a área condição de execução para definir a lógica de parada da estrutura de repetição for.
Utilizamos a área pós-instruções para executar alguma ação que deve ocorrer cada vez que as instruções dentro for forem executados.
208
Guia de Estudos para SCJA
INSTRUÇÕES DE ITERAÇÃO (FOR) Exemplo1:/** * Exemplo de estrutura de repetição FOR */public class ExemploFor { public static void main(String[] args) { for(int i = 0; i <= 10; i++) { if(i % 2 == 0) { System.out.println(i + " e um numero par."); } else { System.out.println(i + " e um numero impar."); } } }}
209
Guia de Estudos para SCJA
INSTRUÇÕES DE ITERAÇÃO (FOR) Exemplo2:/** * Exemplo de estrutura de repetição FOR */public class ExemploFor2 { public static void main(String[] args) { for(int i = 0, j = 10; i <= 10; i++, j--) { if(i == j) { System.out.println("i " + i + " eh igual a j " + j); } } }}
210
Guia de Estudos para SCJA
INSTRUÇÕES DE ITERAÇÃO (FOR-EACH) Muitas vezes o for é utilizado para percorrer um array
ou uma coleção de objetos, para facilitar seu uso foi adicionado na versão 5 do Java o for-each.
for(<Tipo> <identificador> : <expressão>) { <instruções>}
211
Guia de Estudos para SCJA
INSTRUÇÕES DE ITERAÇÃO (FOR-EACH)import java.util.ArrayList;import java.util.List;
/** * Exemplo de estrutura de repetição For Each. */public class ExemploForEach { public static void main(String[] args) { String[] nomes = {"Altrano", "Beltrano", "Ciclano", "Deltrano"}; //Percorre um array. for(String nome : nomes) { System.out.println(nome); } List<Integer> valores = new ArrayList<Integer>(); valores.add(100); valores.add(322); valores.add(57); //Percorre uma coleção. for(Integer numero : valores) { System.out.println(numero); } }}
212
Guia de Estudos para SCJA
INSTRUÇÕES DE ITERAÇÃO (WHILE) A instrução while executa um bloco de instruções
enquanto uma determinada condição for verdadeira (true).
while(condição) { < instruções >}
213
Guia de Estudos para SCJA
INSTRUÇÕES DE ITERAÇÃO (WHILE) Exemplo:
/** * Exemplo de estrutura de repetição WHILE */public class ExemploWhile { public static void main(String[] args) { int i = 0; while(i < 10) { System.out.println(++i); } }}
214
Guia de Estudos para SCJA
INSTRUÇÕES DE ITERAÇÃO (DO / WHILE) A estrutura do / while tem seu bloco de instruções
executados pelo menos uma vez, então se a condição ao final das instruções for verdadeira (true), então o bloco de instruções é executado novamente.
do { < instruções >} while(condição);
215
Guia de Estudos para SCJA
INSTRUÇÕES DE ITERAÇÃO (DO / WHILE) Exemplo:import java.util.Scanner;
/** * Exemplo de estrutura de repetição DO / WHILE */public class ExemploDoWhile { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); int opcao = 0; do { System.out.println("Escolha uma opcao:"); System.out.println("1 - Iniciar jogo"); System.out.println("2 - Ajuda"); System.out.println("3 - Sair"); System.out.println("OPCAO: "); opcao = entrada.nextInt(); } while (opcao != 3); }}
216
Guia de Estudos para SCJA
INSTRUÇÃO BREAK O comando break é uma instrução de interrupção
imediata de qualquer laço, seja ele qual for e independente de sua condição de parada ter sido atendida./**
* Exemplo do comando break. */public class ExemploBreak { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); System.out.println("Digite um numero de 1 a 9 exceto o 5:"); int numero = entrada.nextInt(); System.out.println("Contando de 1 ate o numero que voce digitou... "); for(int cont = 1; cont <= numero; cont++) { if(numero == 5 || numero < 1 || numero > 9) { System.out.println("Um numero invalido foi digitado!!!"); break; } System.out.println(cont + " "); } }}
217
Guia de Estudos para SCJA
INSTRUÇÃO CONTINUE O comando continue faz com que o laço salte para sua
próxima iteração. Este comando pode ser utilizado com qualquer laço.
/** * Exemplo do comando continue. */public class ExemploContinue { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); System.out.println("Digite um numero de 1 a 9: (saltaremos o 5)"); int numero = entrada.nextInt(); System.out.println("Contando de 1 ate o numero que voce digitou..."); for(int cont = 0; cont <= numero; cont++) { if(cont == 5) { System.out.println("# PULANDO O 5 #"); continue; } System.out.println(cont + " "); } }}
218
4.4 - COM BASE EM UM ALGORITMO COMO PSEUDO-CÓDIGO, DESENVOLVER CÓDIGO QUE APLIQUE CORRETAMENTE OS OPERADORES APROPRIADOS, INCLUINDO OPERADORES DE ATRIBUIÇÃO (LIMITADOS A: =, +=, -=), OPERADORES ARITMÉTICOS (LIMITADOS A: +, -, *, /, %, ++, --), OPERADORES RELACIONAIS (LIMITADOS A: <, <=, >, >=, ==, !=) E OPERADORES LÓGICOS (LIMITADOS A: !, &&, ||) PARA PRODUZIR O RESULTADO DESEJADO. ALÉM DISSO, ESCREVER CÓDIGO QUE DETERMINE A IGUALDADE DE DOIS OBJETOS OU DUAS PRIMITIVAS.
219
Guia de Estudos para SCJA
OPERADORES DE ATRIBUIÇÃO Símbolo = é chamado de atribuição, utilizado para
atribuir o valor de um operando a uma variável.
/** * Classe utilizada para demonstrar o uso do operador de atribuição ( = ). */public class OperadorAtribuicao { public static void main(String[] args) { int x; x = 25; System.out.println(x); }}
220
Guia de Estudos para SCJA
OPERADORES DE ATRIBUIÇÃO Símbolo += é utilizado para atribuir a uma variável o
valor desta variável somada ao valor de um operando.
/** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de adição ( += ). */public class OperadorAtribuicaoAdicao { public static void main(String[] args) { int x = 4; x += 2; System.out.println(x); }}
221
Guia de Estudos para SCJA
OPERADORES DE ATRIBUIÇÃO
Símbolo -= é utilizado para atribuir a uma variável o valor desta variável subtraindo o valor de um operando.
/** * Classe utilizada para demonstrar o uso do operador de atribuição * junto com o operador de subtração ( -= ). */public class OperadorAtribuicaoSubtracao { public static void main(String[] args) { int x = 4; x -= 2; System.out.println(x); }}
222
Guia de Estudos para SCJA
OPERADORES RELACIONAIS Símbolo > é chamado de maior que.
<operando1> > <operando2>
Retorna true se o valor do operando1 for maior que o valor do operando2, caso contrario retorna false.
/** * Classe utilizada para demonstrar o uso do operador * relacional maior que ( > ). */public class OperadorMaiorQue { public static void main(String[] args) { int a = 5; int b = 3; System.out.println(a > b); }}
223
Guia de Estudos para SCJA
OPERADORES RELACIONAIS Símbolo < é chamado de menor que.
<operando1> < <operando2>
Retorna true se o valor do operando1 for menor que o valor do operando2, caso contrario retorna false.
/** * Classe utilizada para demonstrar o uso do operador relacional menor que ( < ). */public class OperadorMenorQue { public static void main(String[] args) { int a = 5; int b = 3; System.out.println(a < b); }}
224
Guia de Estudos para SCJA
OPERADORES RELACIONAIS Símbolo >= é chamado de maior ou igual que.
<operando1> >= <operando2>
Retorna true se o valor do operando1 for maior ou igual que o valor do operando2, caso contrario retorna false./**
* Classe utilizada para demonstrar o uso do operador * relacional maior ou igual que ( >= ). */public class OperadorMaiorIgualQue { public static void main(String[] args) { int a = 5; int b = 3; System.out.println(a >= b); int c = 5; System.out.println(a >= c); }}
225
Guia de Estudos para SCJA
OPERADORES RELACIONAIS Símbolo <= é chamado de menor ou igual que.
<operando1> <= <operando2>
Retorna true se o valor do operando1 for menor ou igual que o valor do operando2, caso contrario retorna false./**
* Classe utilizada para demonstrar o uso do operador * relacional menor ou igual que ( <= ). */public class OperadorMenorIgualQue { public static void main(String[] args) { int a = 5; int b = 5; System.out.println(a <= b); }}
226
Guia de Estudos para SCJA
OPERADORES RELACIONAIS Símbolo != é chamado de diferente.
<operando1> != <operando2>
Retorna true se o valor do operando1 for diferente do valor do operando2, caso contrario retorna false.
/** * Classe utilizada para demonstrar o uso do operador * relacional diferente ( != ). */public class OperadorDiferente { public static void main(String[] args) { int a = 5; int b = 3; System.out.println(a != b); int c = 3; System.out.println(b != c); }}
227
Guia de Estudos para SCJA
OPERADORES ARITMÉTICOS Símbolo + é chamado de adição, utilizado para somar
o valor de dois operandos./** * Classe utilizada para demonstrar o uso do operador de adição ( + ). */public class OperadorAdicao { public static void main(String[] args) { System.out.println(3 + 7); //ou int a = 3; int b = 7; System.out.println(a + b); }}
228
Guia de Estudos para SCJA
OPERADORES ARITMÉTICOS Símbolo - é chamado de subtração, utilizado para
subtrair o valor de dois operandos.
/** * Classe utilizada para demonstrar o uso do operador de subtração ( - ). */public class OperadorSubtracao { public static void main(String[] args) { System.out.println(5 - 2); //ou int a = 5; int b = 2; System.out.println(a - b); }}
229
Guia de Estudos para SCJA
OPERADORES ARITMÉTICOS Símbolo * é chamado de multiplicação, utilizado
para multiplicar o valor de dois operandos.
/** * Classe utilizada para demonstrar o uso do operador de multiplicação ( * ). */public class OperadorMultiplicacao { public static void main(String[] args) { System.out.println(3 * 2); //ou int a = 3; int b = 2; System.out.println(a * b); }}
230
Guia de Estudos para SCJA
OPERADORES ARITMÉTICOS Símbolo / é chamado de divisão, utilizado para dividir o valor
de dois operandos.
OBS: Divisão de números inteiro retorna um int, divisão com pelo menos um número com ponto flutuante retorna um double.
Divisão por zero lança um erro java.lang.ArithmeticException.
/** * Classe utilizada para demonstrar o uso do operador de divisão ( / ). */public class OperadorDivisao { public static void main(String[] args) { System.out.println(3.0 / 2); //ou int a = 3; int b = 2; System.out.println(a / b); }}
231
Guia de Estudos para SCJA
OPERADORES ARITMÉTICOS Símbolo % é chamado de módulo, utilizado para
saber qual o resto da divisão de dois operandos./** * Classe utilizada para demonstrar o uso do operador de modulo ( % ). */public class OperadorModulo { public static void main(String[] args) { System.out.println(4.5 % 2); //ou int a = 5; int b = 3; System.out.println(a % b); }}
232
Guia de Estudos para SCJA
OPERADORES ARITMÉTICOS Símbolo ++ é utilizado para incrementar em 1 o valor
de uma variável, podendo ser feita das seguintes formas:
++ <variável>
Primeiro incrementa a variável depois devolve seu valor.
<variável> ++
Primeiro devolve o valor da variável depois incrementa seu valor.
233
Guia de Estudos para SCJA
OPERADORES ARITMÉTICOS Operador de incremento
/** * Classe utilizada para demonstrar o uso do operador de incremento ( ++ ). */public class OperadorIncremento { public static void main(String[] args) { int a = 1; int b = 1; System.out.println(++a); System.out.println(b++); System.out.println(a); System.out.println(b); }}
234
Guia de Estudos para SCJA
OPERADORES ARITMÉTICOS Símbolo -- é utilizado para decrementar em 1 o valor
de uma variável, podendo ser feita das seguintes formas:-- <variável>
Primeiro decrementa o valor da variável, depois devolve seu valor.
<variável> --
Primeiro devolve o valor da variável, depois ela é decrementada.
235
Guia de Estudos para SCJA
OPERADORES ARITMÉTICOS Operador de decremento
/** * Classe utilizada para demonstrar o uso do operador de decremento ( -- ). */public class OperadorDecremento { public static void main(String[] args) { int a = 1; int b = 1; System.out.println(--a); System.out.println(b--); System.out.println(a); System.out.println(b); }}
236
Guia de Estudos para SCJA
OPERADORES LÓGICOS Símbolo && é chamado de E. Este operador retorna
true somente se os dois operandos forem true.<operando1> && <operando2>
Se o valor do operando1 for false, então o operador && não verifica o valor do operador2, pois sabe que o resultado já é false.
Tabela verdade:
Operando1 Operando2 Resultadotrue true truetrue false falsefalse true falsefalse false false
237
Guia de Estudos para SCJA
OPERADORES LÓGICOS Operador Lógico E ( && )
/** * Classe utilizada para demonstrar o uso do operador logico E ( && ). */public class OperadorLogicoE { public static void main(String[] args) { boolean a = true; boolean b = false; boolean c = true; System.out.println(a && b); System.out.println(a && c); }}
238
Guia de Estudos para SCJA
OPERADORES LÓGICOS Símbolo || é chamado de OU. Este operado retorna
true caso tenha pelo menos um operando com o valor true.
<operando1> || <operando2>
Se o valor do operando1 for true, então o operador || não verifica o valor do operando2, pois já sabe que o resultado é true.
Tabela verdade:Operando1 Operando2 Resultadotrue true truetrue false truefalse true truefalse false false
239
Guia de Estudos para SCJA
OPERADORES LÓGICOS Operador Lógico OU ( || )
/** * Classe utilizada para demonstrar o uso do operador logico OU ( || ). */public class OperadorLogicoOU { public static void main(String[] args) { boolean a = true; boolean b = false; boolean c = false; System.out.println(a || b); System.out.println(b || c); }}
240
Guia de Estudos para SCJA
OPERADORES LÓGICOS Símbolo ! é chamado de negação. Este operador
retorna true se o operando tem o valor false, e retorna false se o operando o valor true.
! <operando>
Tabela verdade:
Operando Resultadofalse truetrue false
241
Guia de Estudos para SCJA
OPERADORES LÓGICOS Operador Lógico Negação ( ! )
/** * Classe utilizada para demonstrar o uso do operador logico negação ( ! ). */public class OperadorLogicoNegacao { public static void main(String[] args) { boolean a = true; boolean b = false; boolean c = false; System.out.println(!a); System.out.println(!(b || c)); }}
242
Guia de Estudos para SCJA
IGUALDADE DE TIPOS PRIMITIVOS Símbolo == é chamado de igualdade.
<operando1> == <operando2>
Retorna true se o valor do operando1 for igual ao valor do operando2, caso contrario retorna false.
/** * Classe utilizada para demonstrar o uso do operador * relacional de igualdade ( == ). */public class OperadorIgualdade { public static void main(String[] args) { int a = 3; int b = 3; System.out.println(a == b); }}
243
Guia de Estudos para SCJA
IGUALDADE DE OBJETOS Quando criamos um novo objeto precisamos utilizar a
palavra-chave new, que cria um novo objeto em memória e fornece o seu “endereço” a variável declarada.
A variável que então obtém uma referência a um objeto.
Exemplo: A variável manuel é uma referência a um objeto do tipo
Pessoa.Pessoa manuel = new Pessoa();
244
Guia de Estudos para SCJA
IGUALDADE DE OBJETOS Exemplo:
/** * Classe utilizada para mostrar identidade de objeto. */public class TestePessoa { public static void main(String[] args) { Pessoa paulo = new Pessoa(); paulo.setIdade(24); Pessoa pedro = paulo; pedro.setIdade(pedro.getIdade() + 1); System.out.println("A idade de Paulo eh: " + paulo.getIdade()); System.out.println("A idade de Pedro eh: " + pedro.getIdade()); }}
245
Guia de Estudos para SCJA
IGUALDADE DE OBJETOS Neste exemplo as variáveis paulo e pedro possuem a
referência ao mesmo objeto na memória.
246
Guia de Estudos para SCJA
IGUALDADE DE OBJETOS Quando queremos comparar se duas variáveis
apontam para o mesmo objeto podemos usar a igualdade ( == ), exemplo:/**
* Classe utilizada para mostrar igualdade de objeto. */public class TestePessoa2 { public static void main(String[] args) { Pessoa paulo = new Pessoa(); paulo.setIdade(24); Pessoa pedro = paulo; if(paulo == pedro) { System.out.println("Eh a mesma pessoa!!!"); } else { System.out.println("Sao pessoas diferentes!!!"); } }}
247
Guia de Estudos para SCJA
IGUALDADE DE OBJETOS Quando queremos saber se o conteúdo de dois
objetos são iguais devemos utilizar o método equals(), todas as classes recebem este método através de herança da classe java.lang.Object.
O método equals(), que existe na classe java.lang.Object, tem a mesma função que a igualdade ( == ). Caso precisemos saber se duas instancias desta mesma classe são iguais, então temos de sobrescrever o método equals().
248
Guia de Estudos para SCJA
IGUALDADE DE OBJETOS/** * Classe utilizada para representar uma Pessoa, sobrescrevendo o * metodo equals() para comparar objetos deste tipo. */public class Pessoa { private String nome; private int idade; public Pessoa(String nome, int idade) { this.nome = nome; this.idade = idade; } public boolean equals(Object obj) { if(obj != null && obj instanceof Pessoa) { Pessoa pessoa = (Pessoa) obj;
if(this.nome == null || pessoa.nome == null || !this.nome.equals(pessoa.nome)) { return false; } if(this.idade != pessoa.idade) { return false; } } return true; }}
249
Guia de Estudos para SCJA
IGUALDADE DE OBJETOS Testando a comparação de objetos através da
igualdade e método equals():/** * Comparação de objetos através do método equals(). */public class TestePessoa2 { public static void main(String[] args) { Pessoa rafael1 = new Pessoa("Rafael", 20); Pessoa rafael2 = new Pessoa("Rafael", 20);
System.out.println(rafael1 == rafael2); System.out.println(rafael1.equals(rafael2)); }}
250
Guia de Estudos para SCJA
IGUALDADE DE OBJETOS Na memória será criado dois objetos do tipo Pessoa:
Portanto: rafael1 == rafael2 é false. rafael1.equals(rafael2) é true.
251
4.5- DESENVOLVER CÓDIGO QUE UTILIZE O OPERADOR DE CONCATENAÇÃO (+) E OS SEGUINTES MÉTODOS DA CLASSE STRING: CHARAT, INDEXOF, TRIM, SUBSTRING, REPLACE, LENGTH, STARTSWITH E ENDSWITH.
252
Guia de Estudos para SCJA
JAVA.LANG.STRING A classe java.lang.String é utilizada para representar
textos (sequência de caracteres), portanto todo texto em Java é considerado um objeto.
Para criarmos uma String podemos fazer das seguintes formas:
String nome = new String("Rafael");
// ou
String sobrenome = "Sakurai";
R a f a e l S a k u r a i
0 1 2 3 4 5 6 7 8 9 10
11
12
13
String nome = " "
253
Guia de Estudos para SCJA
JAVA.LANG.STRING Alguns caracteres não podem ser adicionados a uma
String: Aspas duplas ( “ ), pois é utilizado para definir o inicio e
fim de uma String
Para definir uma aspas duplas dentro de uma String precisamos usar a barra invertida \ como escape de caracteres.
254
Guia de Estudos para SCJA
JAVA.LANG.STRING Abaixo temos uma tabela com alguns escapes de
caracteres e o que eles representam dentro da String:
\t Tabulação horizontal\n Nova linha\” Aspas duplas\’ Aspas simples\\ Barra invertida
255
Guia de Estudos para SCJA
JAVA.LANG.STRING Para concatenarmos (unir) objetos Strings podemos
usar o símbolo + ou o método concat, exemplo:
String nomeCompleto = nome + " " + sobrenome;
// ou
String sobrenome = "Cristiano".concat(" Camilo");
256
Guia de Estudos para SCJA
JAVA.LANG.STRING O objeto String é imutável portanto quando fazemos a
seguinte operação:
Estamos na verdade criando 3 Strings:
“Cris”
“tiano”
“Cristiano”
257
Guia de Estudos para SCJA
JAVA.LANG.STRING A classe String possui alguns métodos para trabalhar
com textos (http://java.sun.com/javase/6/docs/api/java/lang/String .html), por exemplo:
public char charAt(int index) Retorna o valor char a partir de um indice especificado.
public int indexOf(int char) Retorna o indice da String onde tem a primeira ocorrencia do
caractere especificado. public int indexOf(int char, int fromIndex)
Retorna o indice da String onde tem a primeira ocorrencia do caractere especificado, iniciando a procura a partir de um indice especificado.
258
Guia de Estudos para SCJA
JAVA.LANG.STRING public int indexOf(String string)
Retorna o indice da String onde tem a primeira ocorrencia da String especificada.
public int indexOf(String string, int fromIndex) Retorna o indice da String onde tem a primeira ocorrencia
da String especificada, iniciando a procura a partir de um indice especificado.
public String trim() Retorna uma copia da String, omitindo os espaços em
branco do começo e fim do texto. public String substring(int beginIndex)
Retorna uma nova String contendo os caracteres do indice inicial até o final da String.
259
Guia de Estudos para SCJA
JAVA.LANG.STRING public String substring(int beginIndex, int endIndex)
Retorna uma nova String contendo os caracteres do indice inicial até o indice final.
public String replace(char oldChar, char newChar) Retorna uma nova String resultado da atualização dos
caracteres antigos pelo novo caractere.
public int length() Retorna o tamanho da String.
public boolean startsWith(String prefix) Testa se a String inicia com um especifico prefixo.
public boolean endsWith(String suffix) Teste se a String termina com um especifico sufixo.
260
Guia de Estudos para SCJA
JAVA.LANG.STRING Exemplos:
Converter 2009.07.22 para 2009/07/22
Converter 2009/07/22 para 22/07/2009
Validar se um texto é referente ao nome de um arquivo com a extensão .txt
String data = "2009.07.22";data = data.replace('.', '/');System.out.println(data);
data = data.substring(8, 10) + "/"+ data.substring(5, 7) + "/" + data.substring(0, 4);System.out.println(data);
String arquivo = "C:/scja/documentos/guiaSCJA.txt";System.out.println(arquivo.endsWith(".txt"));
261
5- PRINCÍPIOS BÁSICOS DO DESENVOLVIMENTO
EM JAVA
262
5.1 - DESCREVER O OBJETIVO DE PACOTES DESENVOLVIDOS NA LINGUAGEM JAVA E RECONHECER O USO APROPRIADO DAS INSTRUÇÕES IMPORT E PACKAGE.
263
Guia de Estudos para SCJA
PACKAGE Quando precisamos organizar as classes de uma
aplicação Java, podemos separá-las em diversos pacotes (pastas), para isto utilizamos a palavra-chave package.
A organização de classes em pacotes ocorre do forma semelhante a um diretório de arquivos, onde será criado uma estrutura de pastas para armazenar as classes Java.
package pacote.subPacote.subSubPacote;
264
Guia de Estudos para SCJA
PACKAGE No exemplo abaixo vamos criar a estrutura de pacotes
br.metodista.telas e dentro deste pacote vamos colocar a classe CadastroLivro:
Note que na hierarquia de package, temos um pacote chamado br, dentro dele temos outro pacote chamado biblioteca, que dentro dele temos outro pacote chamado telas, que dentro dele criamos o arquivo CadastroLivro.java.
265
Guia de Estudos para SCJA
PACKAGE No arquivo da classe devemos declarar o nome do
pacote ao qual ela pertence. Esta declaração deve ser feita obrigatoriamente na primeira linha do arquivo:
Note que na declaração acima separamos os packages por ponto.
//Declaração do pacote onde está a classe.package br.biblioteca.telas;
/** * Classe utilizada para demonstrar o uso de package. */public class CadastroLivro { //código}
266
Guia de Estudos para SCJA
PACKAGE Boas praticas
Utilizar apenas uma palavra no nome do package. Escrever o nome do package em minúsculo. Agrupar classes por funcionalidade ou assunto em comum.
Restrição O nome do package não pode ser o nome de nenhuma
palavra-chave do Java e não pode começar com números ou caracteres especiais (exceto $ e _).
A declaração do package deve ser feita na primeira linha do arquivo Java (sem contar comentários).
267
Guia de Estudos para SCJA
PACKAGE Depois de organizar as classes em packages podemos
ter classes com o mesmo nome mas em packages diferentes:
Neste exemplo temos as classes Pessoa com o mesmo nome mas em packages diferentes.
Note que seguimos o padrão de escrita de nome do package e da classe, facilitando a identificação dos mesmos.
-br|--- metodista| |--- modelo| | |--- Pessoa| |--- relatorio| |--- Pessoa
268
Guia de Estudos para SCJA
PACKAGE A linguagem Java traz muitos packages, exemplos:
Package Descrição
java.lang Pacote com as principais classes da linguagem Java.
java.util Pacote com utilitários para a linguagem.
java.io Pacote de entrada e saída de dados.
java.awt Pacote de interface gráfica.
java.net Pacote de rede.
javax.swing
Pacote de extensão de interface gráfica.
269
Guia de Estudos para SCJA
IMPORT Quando desejamos utilizar alguma classe que está em
um package diferente, precisamos informar sua utilização através da palavra-chave import.
Quando queremos importar alguma classe precisamos informar o nome completo desta classe, incluindo sua hierarquia de packages.
import pacote.subPacote.NomeClasse;
270
Guia de Estudos para SCJA
IMPORT Neste exemplo declaramos que a classe
CadastroLivro irá utilizar a classe Livro do package “br.metodista.modelo”, e as classes MostrarTela e XmlConvert do package “br.metodista.util”.
package br.biblioteca.telas;
//Declaração dos imports.import br.biblioteca.Livro;import br.biblioteca.util.MostrarTela;import br.biblioteca.util.XmlConverter;
/** * Classe utilizada para demonstrar o uso de imports. */public class CadastroLivro2 { //código}
271
Guia de Estudos para SCJA
IMPORT A declaração do import precisa ser obrigatoriamente
após a declaração do package (se o mesmo existir) e antes da declaração da classe ou interface.
Quando queremos utilizar muitas classes de um mesmo package, podemos importar o package inteiro utilizando o caractere asterisco ( * ) no lugar do nome das classes, exemplo:
Assim a classe pode utilizar todas as classes que existirem dentro do package br.metodista.util.
import br.metodista.util.*;
272
Guia de Estudos para SCJA
IMPORT A linguagem Java possui um package chamado
java.lang que possui as classes básicas para o desenvolvimento em Java, este package é importado automaticamente por todas as classes, portanto para utilizar as classes String, System, Math e outros, não precisamos declarar seu import.
OBS: Durante o processo de compilação do arquivo .java para .class, o compilador primeiro importa as classes que estão com o package completo e depois procura pelas classes que tiveram o package inteiro importado, então normalmente é utilizado o nome inteiro do package e da classe, assim as classes são compiladas um pouco mais rápido.
273
Guia de Estudos para SCJA
IMPORT Quando importamos mais de uma classe com o mesmo
nome, precisamos declarar o nome completo da classe quando vamos utilizá-la.
package br.metodista.teste;
//Declaração dos imports.import br.metodista.modelo.Pessoa;import br.metodista.relatorio.Pessoa;
/** * Classe utilizada para demonstrar o uso de imports com mesmo nome. */public class TesteImports { public static void main(String[] args) { br.metodista.modelo.Pessoa p1 = new br.metodista.modelo.Pessoa(); br.metodista.relatorio.Pessoa p2 = new br.metodista.relatorio.Pessoa(); }}
274
5.2 - DEMONSTRAR O USO ADEQUADO DO COMANDO "JAVAC" (INCLUINDO AS OPÇÕES DA LINHA DE COMANDO -D E –CLASSPATH) E DEMONSTRAR O USO APROPRIADO DO COMANDO "JAVA" (INCLUINDO AS OPÇÕES DA LINHA DE COMANDO -CLASSPATH, -D E –VERSION).
275
Guia de Estudos para SCJA
JAVAC javac é um comando utilizada para invocar o
compilador Java.
Este comando pode receber diversos parâmetros, como por exemplo: -classpath <path> Especifica onde encontrar os
arquivos de classes e anotações -d <directory> Especifica o local onde gerar os
arquivos .class. -help Imprime todas as opções disponíveis.
javac <opções> <ClasseJava.java>
276
Guia de Estudos para SCJA
JAVAC (COMPILANDO COM -d) Por padrão todas as classes compiladas (.class) são
criadas no mesmo diretório que suas classes .java. A opção –d permite especificar o local onde o
arquivo .class deve ser gerado, dessa forma podemos organizar melhor os arquivos.
No exemplo abaixo vamos compilar a classe MinhaClasse.java que está na pasta fonte e gerar o compilado na pasta classes:
javac –d classes fonte\MinhaClasse.java
277
Guia de Estudos para SCJA
JAVAC (COMPILANDO COM -d) Exemplo: Compilar a classe MinhaClasse.java que
está no package metodista dentro da pasta fonte e gerar o compilado na pasta classes:
OBS: Neste exemplo executamos o comando javac a partir da pasta fonte.
javac –d ..\classes metodista\MinhaClasse.java
278
Guia de Estudos para SCJA
JAVAC (COMPILANDO COM -d) Quando utilizamos a opção –d e não temos a estrutura
de packages, então o javac cria os diretórios:
Este comando vai criar a pasta metodista dentro da pasta classes.
OBS: se não tivermos a pasta de destino (ex: classes), o javac lançará um erro. (No such file or directory).
javac –d ..\classes metodista\MinhaClasse.java
279
Guia de Estudos para SCJA
JAVAC (COMPILANDO COM –CLASSPATH) Classpath é o caminho onde podemos encontrar as
classes do Java que são necessárias para compilar ou executar um programa.
As vezes precisamos utilizar classes que não estão dentro das classes fornecidas pelo J2SE, para usar estas classes é necessário declará-las no classpath.
Podemos informar o classpath através de variável de ambiente no sistema operacional, ou declarado em linha de comando através da opção –classpath.
O classpath declarado através da linha de comando sobrescrevem o classpath declarado via variável de ambiente.
280
Guia de Estudos para SCJA
JAVAC (COMPILANDO COM –CLASSPATH) O classpath é composto por vários diretórios
No windows separamos os diretórios por ponto e virgula ( ; ) e as pastas dos diretórios separamos com barra invertida (\).
No linux separamos os diretórios por dois pontos ( : ) e as pastas dos diretórios separamos com barra normal ( / ).
javac -classpath <diretórios> NomeClasse.java
javac –classpath metodista\modelo;metodista\relatorio\metodista\teste\RelatorioAluno.java
javac –classpath metodista/modelo:metodista/relatorio/metodista/teste/RelatorioAluno.java
281
Guia de Estudos para SCJA
JAVAC (COMPILANDO COM –CLASSPATH) Exemplo: Temos a seguinte estrutura de diretorio:
C:\|- SCJA| |- codigos| | |- metodista| | | |- modelo| | | | |- Pessoa.java| | | |- relatorio| | | | |- Relatorio.java| | | |- teste| | | | |- Teste.java
282
Guia de Estudos para SCJA
JAVAC (COMPILANDO COM –CLASSPATH)package metodista.modelo;
public class Aluno {
private String nome;
public Aluno(String nome) {
this.nome = nome;
}
public String getNome() {
return this.nome;
}
}
283
Guia de Estudos para SCJA
JAVAC (COMPILANDO COM –CLASSPATH) Para compilar a classe Aluno.java podemos fazer da
seguinte forma:
Se compilarmos a partir da pasta C:\SCJA
OBS: Note que a classe Aluno não tem relacionamento com nenhuma outra classe.
C:\SCJA>javac codigos\metodista\modelo\Aluno.java
284
Guia de Estudos para SCJA
JAVAC (COMPILANDO COM –CLASSPATH)package metodista.relatorio;
import java.util.List;
import metodista.modelo.Aluno;
public class Relatorio {
public void imprimir(List<Aluno> alunos) {
System.out.println("Lista de alunos");
for(Aluno aluno : alunos) {
System.out.println(aluno.getNome());
}
}
}
285
Guia de Estudos para SCJA
JAVAC (COMPILANDO COM –CLASSPATH) Para compilar a classe Relatorio.java podemos fazer da
seguinte forma:
Se compilarmos a partir da pasta C:\SCJA
OBS: Note que a classe Relatorio tem referencia para a classe Aluno, portanto vamos adicionar no classpath o diretorio codigos.
C:\SCJA>javac -classpath codigos codigos\metodista\relatorio\Relatorio.java
286
Guia de Estudos para SCJA
JAVAC (COMPILANDO COM –CLASSPATH)package metodista.teste;
import metodista.modelo.Aluno;
import metodista.relatorio.Relatorio;
import java.util.List;
import java.util.ArrayList;
public class Teste {
public static void main(String[] args) {
List<Aluno> alunos = new ArrayList<Aluno>();
alunos.add(new Aluno("Rafael"));
alunos.add(new Aluno("Maria"));
alunos.add(new Aluno("Jose"));
Relatorio rel = new Relatorio();
rel.imprimir(alunos);
}
}
287
Guia de Estudos para SCJA
JAVAC (COMPILANDO COM –CLASSPATH) Para compilar a classe Teste.java podemos fazer da
seguinte forma:
Se compilarmos a partir da pasta C:\SCJA
OBS: Note que a classe Teste tem referencia para a classe Aluno e Relatorio, portanto vamos adicionar no classpath o diretorio codigos.
OBS2: Se precisarmos compilar uma classe que utiliza alguma classe que está dentro de um arquivo .jar, podemos também utilizar a opção –classpath.
C:\POO>javac -classpath codigos codigos\metodista\teste\Teste.java
288
Guia de Estudos para SCJA
JAVA java é um comando utilizada para invocar a JVM para
executar um arquivo .class com os bytecodes Java.
Este comando deve receber pelo menos o nome da classe que precisa ser executado e está classe deve possuir um método com a seguinte assinatura:
A partir deste método main que será executado a aplicação.
Este comando pode também receber argumentos:
Os argumentos são passados através de um vetor (array) de Strings para o método main.
java [-opções] class [argumentos...]
public static void main(String[] args)
java MinhaClasse arg1 arg2 arg3
289
Guia de Estudos para SCJA
JAVA – EXEMPLO No exemplo abaixo criamos um programa que recebe
alguns nomes como parâmetro:
/** * Classe utilizada para mostrar a passagem de parametros para o método main. */public class ParametrosMain { public static void main(String[] args) { if(args.length > 0) { for(String nome : args) { System.out.println(nome); } } else { System.out.println("Nenhum nome foi passado como parametro."); } }}
290
Guia de Estudos para SCJA
JAVA – EXEMPLO Se executarmos esta classe sem passar parâmetros
imprime a seguinte mensagem:
291
Guia de Estudos para SCJA
JAVA - EXEMPLO Quando executamos a aplicação passando os nomes
como parâmetro, estes nomes são impressos no console.
Note que quando precisamos passar um parâmetro que possua espaços em brancos, devemos utilizar as aspas duplas para delimitar a área do parâmetro, exemplo “Rafael Sakurai”.
292
Guia de Estudos para SCJA
JAVA Este comando pode receber diversas opções, como por
exemplo: -classpath (ou -cp) <path> Especifica onde encontrar
os arquivos de classes e anotações. -D <name>=<value> Passa propriedades de sistema
para aplicação. -help Imprime todas as opções disponíveis. -version – Imprime a versão do Java instalado.
293
Guia de Estudos para SCJA
JAVA (EXECUTADO COM -VERSION) A opção –version permite visualizar a versão da JVM
que esta instalada.
294
Guia de Estudos para SCJA
JAVA (EXECUTADO COM –D)
Com a opção –D podemos passar uma propriedade de sistema para a aplicação, exemplo:
Dentro da aplicação Java podemos pegar as propriedades do sistema utilizando a classe java.util.Properties, exemplo:
import java.util.Properties;public class TestePropriedades { public static void main(String[] args) { Properties props = System.getProperties(); System.out.println("config = " + props.getProperty("config")); props.list(System.out); }}
java –Dconfig=C:\SCJA\config.txt NomeClasse
295
Guia de Estudos para SCJA
JAVA (EXECUTADO COM –D)C:\POO\codigos>java -Dconfig=C:\SCJA\config.txt TestePropriedades
config = C:\SCJA\config.txt
-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
java.vm.version=11.0-b16
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
user.country=BR
296
Guia de Estudos para SCJA
JAVA (EXECUTADO COM –CLASSPATH) Para executar classes Java que utilizam outras classes
também precisamos informa o classpath, exemplo:
A classe Teste tem referencia para as classes Aluno e Relatorio que estão em uma estrutura de packages dentro do diretorio codigos.
C:\POO>java -classpath codigos metodista.teste.TesteLista de alunosRafaelMariaJose
297
5.3 - DESCREVER O OBJETIVO E OS TIPOS DE CLASSES DOS SEGUINTES PACOTES JAVA: JAVA.AWT, JAVAX.SWING, JAVA.IO, JAVA.NET, JAVA.UTIL.
298
Guia de Estudos para SCJA
JAVA.AWT O Abstract Window Toolkit (AWT) é utilizado para
desenvolvimento de Graphical User Interface (GUI), composto por: Um conjunto nativo de componentes de interfaces de
usuário. Um modelo robusto de tratamento de eventos. Ferramentas de gráfico e imagem, incluindo classes de
formas, cores e fontes. Gerenciamento de layout para flexibilizar os layouts de
telas que não depende de um tamanho particular de tela ou resolução de janela.
Classes para transformação de dados para cortar-e-colar
Mais informações: http://java.sun.com/javase/6/docs/technotes/guides/awt/index.html
299
Guia de Estudos para SCJA
JAVA.AWT Exemplo de Tela utilizando AWT
300
Guia de Estudos para SCJA
JAVAX.SWING As classes swing implementam um conjunto de
componentes para construir Graphical User Interface (GUI) e adicionar ricas funcionalidades gráficas e interatividade para aplicações Java. O look and feel permite criar GUIs com variadas formas
de interface gráfica ou pode assumir a forma do Sistema Operacional utilizado.
Permite a internacionalização de diversos idiomas e convenções culturais.
Desenvolver gráficos, imagens e textos em 2D. Permite que leitores de tela aumentem a acessibilidade do
usuários.
Mais informações: http://java.sun.com/javase/6/docs/technotes/guides/swing/index.html
301
Guia de Estudos para SCJA
JAVAX.SWING Exemplo de aplicação SWING
302
Guia de Estudos para SCJA
JAVA.NET O package net fornece diversas interfaces e classes
para trabalho com networking. Endereçamento Conexões TCP Enviar / receber pacotes via UDP Localizar / identificar recursos de rede Segurança (Autenticação e Permissão)
Mais informações: http://java.sun.com/javase/6/technotes/guides/net/overview/overview.html
303
Guia de Estudos para SCJA
JAVA.NET Saída do servidor:
Aplicação Cliente:
304
Guia de Estudos para SCJA
JAVA.IO Suporte ao pacote de entrada / saída (input / output) de
informações : Arquivo e dispositivo de entrada e saída. Serialização de objetos. Buffer para dados de tipos primitivos. Conjunto de codificadores e decodificadores de caracteres. Interface de arquivos com suporte a bloqueio e
mapeamento de memória.
Mais informações: http://java.sun.com/javase/6/docs/technotes/guides/io/index.html
305
Guia de Estudos para SCJA
JAVA.IO Exemplo de aplicação que lê todos os arquivos de um
diretório:
306
Guia de Estudos para SCJA
JAVA.UTIL Pacote que fornece utilitários básicos para todas as
aplicações: Framework de coleções Facilidades de data e tempo Internacionalização Classes utilitárias (String tokenizer, gerador de números
randômicos e array)
Mais informações: http://java.sun.com/javase/6/docs/technotes/guides/lang/index.html
307
Guia de Estudos para SCJA
JAVA.UTIL java.util.Collection
308
Guia de Estudos para SCJA
JAVA.UTIL Exemplo de utilização de lista
package colecao.lista;
import java.util.ArrayList;import java.util.List;
/** * Exemplo de utilização de lista. */public class ExemploLista { public static void main(String[] args) { List nomes = new ArrayList(); nomes.add("Zezinho"); nomes.add("Luizinho"); nomes.add("Joãozinho"); for(int i = 0; i < nomes.size(); i++) { System.out.println(nomes.get(i)); } }}
0 1 2
"Zezinho" "Luizinho" "Joãozinho"
Lista
309
Guia de Estudos para SCJA
JAVA.UTIL Exemplo de utilização de mapapackage colecao.mapa;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Map;
/** * Exemplo de utilização de Mapa. */public class ExemploMapa { public static void main(String[] args) { Map mapa = new HashMap(); mapa.put("nome", "Rafael"); mapa.put(2, new Pessoa()); mapa.put("lista", new ArrayList());
for (Iterator it = mapa.keySet().iterator(); it.hasNext();) { System.out.println(mapa.get(it.next())); } }}
chave valor
"nome" "Rafael"
2 new Pessoa()
"lista" new ArrayList()
Mapa
310
Guia de Estudos para SCJA
JAVA.UTIL Exemplo de utilização de conjunto
package colecao.conjunto;
import java.util.HashSet;import java.util.Iterator;import java.util.Set;
public class ExemploConjunto { public static void main(String[] args) { Set nomes = new HashSet(); nomes.add("Zezinho"); nomes.add("Luizinho"); nomes.add("Joãozinho");
for (Iterator it = nomes.iterator(); it.hasNext();) { System.out.println(it.next()); } }}
Zezinho
Joãozinho
Luizinho
Conjunto
311
Guia de Estudos para SCJA
JAVA.UTIL Exemplo de Date e Calendar
Exemplo de Arrays
Exemplo de geração de número randômico
Date d = new Date();//Mon Jul 13 20:48:44 BRT 2009Calendar c = new GregorianCalendar();//java.util.GregorianCalendar[time=1247528924422,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/Sao_Paulo",...]
int[] valores = new int[] {5, 10, 9 ,1 ,3, 8, 2};Arrays.sort(valores);for(int v : valores) System.out.println(v); //1 2 3 5 8 9 10
Random r = new Random();//Gera um número randômico entre 0 e 9System.out.println(r.nextInt(10));
312
6- PLATAFORMAS JAVA E TECNOLOGIAS DE
INTEGRAÇÃO
313
6.1 - DISTINGUIR AS CARACTERÍSTICAS BÁSICAS DAS TRÊS PLATAFORMAS JAVA: J2SE, J2ME E J2EE; COM BASE EM UMA META DE ARQUITETURA DE ALTO NÍVEL, SELECIONAR AS PLATAFORMAS JAVA APROPRIADAS.
314
Guia de Estudos para SCJA
A PLATAFORMA JAVA
Plataforma Java (http://www.javaman.com.br/apres/java&jini/index.html)
315
Guia de Estudos para SCJA
JAVA 2 PLATFORM, STANDARD EDITION (J2SE) A plataforma Java Standard Edition possui todas as APIs
que são base para o desenvolvimento em Java, com seu foco principal em desenvolvimento de aplicações Desktop, mas também possui funcionalidades para: Applets Conexão ao banco de dados Rede, chamada de método remotos e outros Interface Gráfica Diversas ferramentas para segurança, monitoramento,
publicação e outros
316
Guia de Estudos para SCJA
JAVA 2 PLATFORM, STANDARD EDITION (J2SE)
Tecnologias J2SE (http://java.sun.com/javase/technologies/index.jsp)
317
Guia de Estudos para SCJA
JAVA 2 PLATFORM, ENTERPRISE EDITION (J2EE) A plataforma Java Enterprise Edition é composta por
todas as APIs do J2SE e também adiciona novas APIs para desenvolvimento de aplicações corporativas.
Dentro desta plataforma podemos encontrar: Tecnologias para Web Services
JAX-RPC, SOAP e outros Tecnologias para Aplicações Web
JSF, JSP, Servlet, JSTL e outros Tecnologias para Aplicações Comerciais
EJB, JTA, JMS, JavaMail e outros Tecnologias de Gerenciamento e Segurança
JAAS, J2EE Management, J2EE Aplication Development e outros
318
Guia de Estudos para SCJA
JAVA 2 PLATFORM, MICRO EDITION (J2ME) A plataforma Java Micro Edition foi criada para
desenvolver aplicações para dispositivos pequenos como celular, PDA, set-top boxes de TV digital e aplicações embarcadas.
Por rodar em dispositivos de pouca memória, tamanho de tela e capacidade de processamento, as bibliotecas incluídas dentro da J2ME são limitadas.
O J2ME é dividido em configuração, profile e APIs opcionais, que fornecem informações especificas sobre qual tipo de aparelho será utilizada a aplicação
319
Guia de Estudos para SCJA
JAVA 2 PLATFORM, MICRO EDITION (J2ME) A aplicação J2ME pode ter dois tipos de configurações:
Connected Limited Device Configuration (CLDC) Connected Device Configuration (CDC)
Utilizando aplicações J2ME podemos: Utilizar arquivos de áudio e vídeo Armazenar informações nos dispositivos.
320
Guia de Estudos para SCJA
JAVA 2 PLATFORM, MICRO EDITION (J2ME)
Mais informações: http://java.sun.com/javame/technology
321
Guia de Estudos para SCJA
JAVA 2 PLATFORM, MICRO EDITION (J2ME)
Profiles e configurações comuns do J2ME adaptado de Li & Knudsen (pág. 2).
322
Guia de Estudos para SCJA
EXTENSÕES DE PROGRAMAS FEITOS EM JAVA Dependendo da aplicação que estamos desenvolvendo
precisamos agrupar todas as classes e documentos adicionais da aplicação.
JAR – Java Archive Para aplicações desktop, mobile ou componentes java
WAR – Web Archive Para aplicações web
EAR – Enterprise Archive Para aplicações que utilizam war + jar
JAD – Java Application Descriptor Para aplicações mobile
323
6.2 - DESCREVER, EM ALTO NÍVEL, OS BENEFÍCIOS E AS CARACTERÍSTICAS BÁSICAS DA RMI.
324
Guia de Estudos para SCJA
REMOTE METHOD INVOCATION (RMI) O objetivo do RMI é promover uma camada de
comunicação em rede de forma transparente. Possibilita a chamada remota a um método. Toda parte de comunicação entre os componentes EJB
é feito automaticamente pelo container EJB, usando RMI.
Quando chamamos um método utilizando RMI podemos enviar parâmetros ou receber retorno do método de tipos primitivos, objetos serializáveis, vetor ou coleções.
325
Guia de Estudos para SCJA
REMOTE METHOD INVOCATION (RMI) Uma chamada de método RMI funciona da seguinte
forma: O objeto cliente chama o método a partir do Stub. O Stub por sua vez irá chamar o método no Skeleton. O Skeleton chama o método do objeto no servidor.
326
6.3 - DESCREVER, EM ALTO NÍVEL, OS BENEFÍCIOS E AS CARACTERÍSTICAS BÁSICAS DAS TECNOLOGIAS JDBC, SQL E RDBMS.
327
Guia de Estudos para SCJA
BANCO DE DADOS
Banco de Dados
RDBMS
SQL
Servidor Enterprise
Container Web
JavaServer Pages
Servlet
Container EJB
Session Bean
Message-Driven Bean
Entity Bean
Cliente
HTML
JavaScript
328
Guia de Estudos para SCJA
RELATIONAL DATABASE MANAGEMENT SYSTEM (RDBMS) RDBMS é um Sistema Gerenciador de Banco de Dados
Relacional composto por diversos programas responsáveis por manipular informações no banco de dados.
O RDBMS controla: Criação de estruturas para armazenar os dados. Armazenamento e manipulação dos dados. Integridade dos dados. Segurança as informações.
Exemplo de RDBMS: Oracle Microsoft SQLServer MySQL
329
Guia de Estudos para SCJA
STRUCTURED QUERY LANGUAGE (SQL) SQL é uma Linguagem de Consulta Estruturada
utilizada para viabilizar o uso do banco de dados. Através do SQL podemos:
Manipular os dados Definir estrutura de armazenamento de dados Controle de permissão Transação Consulta de dados
330
Guia de Estudos para SCJA
JAVA DATABASE CONNECTIVITY (JDBC) A linguagem Java implementa um conceito de ponte para
realizar a conexão com o banco de dados, que implementa todas as funcionalidades que um banco de dados padrão deve nos fornecer.
O relacionamento da JDBC com o banco de dados depende também da extensão desta ponte que é representada pela implementação JDBC escolhida. Esta implementação depende do banco de dados com o qual queremos nos comunicar e a ela damos o nome de Driver.
331
6.4 - DESCREVER, EM ALTO NÍVEL, OS BENEFÍCIOS E AS CARACTERÍSTICAS BÁSICAS DAS TECNOLOGIAS JNDI, JMS E DE MENSAGENS.
332
Guia de Estudos para SCJA
JAVA NAMING AND DIRECTORY INTERFACE (JNDI) API para acesso ao serviço de nomes e diretórios. Para criar uma conexão com o serviço de nomes e
diretórios utilizamos a classe java.naming.InitialContext.
Utilizamos o método lookup() do InitialContext para localizar algum objeto.
333
Guia de Estudos para SCJA
MENSAGEM (MENSAGERIA) Mensageria é utilizado para realizar a comunicação
entre aplicações e componentes. Esta forma de comunicação fornece um baixo
acoplamento, pois o componente remetente envia uma mensagem para um agente de mensageria e o receptor pode a qualquer momento pegar na fila a mensagem.
334
Guia de Estudos para SCJA
JAVA MESSAGE SERVICE (JMS) JMS é uma API Java que permite criar, enviar, receber e
ler mensagens. Através desta API podemos diminuir o acoplamento
entre as aplicações ou componentes Trabalha de forma síncrona e assíncrona onde podemos
consumir a mensagem no momento que for mais apropriado e também garante que não haverá mensagens duplicas.
335
7- TECNOLOGIAS DE CLIENTE
336
Guia de Estudos para SCJA
ARQUITETURA Durante a década de 80 as aplicações eram centralizadas, tinham apenas
uma camada de aplicação que era responsável por todo processamento, tratava dos dados e a interface com usuário era de difícil utilização.
Depois começou a surgir as aplicações com 2 camadas, onde em uma camada temos a parte visual juntamente com a lógica de negocio e a outra camada é a base de dados, também chamado (aplicação cliente / servidor). Utilizando esta arquitetura poderíamos aproveitar melhor os Pcs, oferecendo uma interface mais visual mais dinâmica e deixar os servidores tratarem dos dados.
Mas a aplicação de 2 camadas tinha seus problemas, era realmente difícil dar manutenção na telas, porque a lógica de negocio estava espalhada por toda aplicação.
Com isso começou a separar as telas do negocio criando duas camadas diferentes e mais uma terceira camada para parte de banco de dados.
Na arquitetura de n camadas, começamos a utilizar a mesma camada de negocio para diferentes tipos de aplicações, temos camada de telas para desktop, web ou mobile, camada de servidor web, camada de negocio, camada de banco de dados, dessa forma ficam bem separas as camadas da aplicação facilitando o reaproveitamento dos componentes.
337
7.1 - DESCREVER, EM ALTO NÍVEL, AS CARACTERÍSTICAS BÁSICAS, OS BENEFÍCIOS E AS DESVANTAGENS DA CRIAÇÃO DE THIN-CLIENTS USANDO HTML E JAVASCRIPT, BEM COMO OS PROBLEMAS DE IMPLANTAÇÃO RELACIONADOS E AS SOLUÇÕES.
338
Guia de Estudos para SCJA
CLIENTE WEB
Banco de Dados
RDBMS
SQL
Servidor Enterprise
Container Web
JavaServer Pages
Servlet
Container EJB
Session Bean
Message-Driven Bean
Entity Bean
Cliente
HTML
JavaScript
339
Guia de Estudos para SCJA
HYPERTEXT MARKUP LANGUAGE (HTML) HTML é uma linguagem de marcação de hipertexto
utilizado para criar páginas web. O HTML é baseado em tags entre sinal de menor < e
maior >, através dessas tags podemos formatar textos, criar tabelas, visualizar imagens, criar hiperlinks para outras páginas ou recursos da web e outros.
O código HTML na página web diz para o browser tudo o que precisa ser apresentado na tela.
340
Guia de Estudos para SCJA
HYPERTEXT MARKUP LANGUAGE (HTML)
341
Guia de Estudos para SCJA
JAVASCRIPT JavaScript é uma linguagem de script que pode ser
utilizada para atualizar informações dinamicamente da página web, validar formulários, apresentar mensagens e outros.
JavaScript é uma linguagem tipada dinamicamente e interpretada pelo browser.
Os códigos JavaScript podem ser declarados em arquivos com a extensão .js ou declarados na página web HTML.
<script type="text/javascript"> /* Código javascript */</script>
342
7.2 - DESCREVER, EM ALTO NÍVEL, AS CARACTERÍSTICAS BÁSICAS, OS BENEFÍCIOS, AS DESVANTAGENS E OS PROBLEMAS DE IMPLANTAÇÃO RELACIONADOS À CRIAÇÃO DE CLIENTES USANDO MIDLETS J2ME.
343
Guia de Estudos para SCJA
MIDLET Midlet são aplicações para pequenos dispositivos
moveis que possuem limitação de processamento, memória e conectividade, como por exemplo aparelhos celulares.
A vantagem de utilizar Midlet é desenvolver aplicações como jogos ou programas que podem ser criados e compilados uma única vez e executado em diversos dispositivos moveis com suporte a MIDP.
MIDP também fornece segurança para os dispositivos moveis. As aplicações midlets possuem algumas limitações como por exemplo não podem usar memória que não faz parte da JVM, permissão de acesso para escrever no dispositivo e outros.
344
Guia de Estudos para SCJA
MIDLET Exemplo de aplicação mobile:
345
7.3 - DESCREVER, EM ALTO NÍVEL, AS CARACTERÍSTICAS BÁSICAS, OS BENEFÍCIOS, AS DESVANTAGENS E OS PROBLEMAS DE IMPLANTAÇÃO RELACIONADOS À CRIAÇÃO DE FAT-CLIENTS USANDO APPLETS.
346
Guia de Estudos para SCJA
APPLET Applet é uma aplicação Java que pode ser utilizada
através de um browser. Os applets podem ser adicionados dentro de páginas web através da tag <applet>.
O applet foi desenvolvido com o intuito de distribuir de forma mais flexível as aplicações stand-alone, através de um browser e o JRE instalado o cliente poderia usar o applet.
Como a web ainda estava no começo e a grande maioria dos sites eram apenas com informações estáticas, utilizando o applet os clientes poderiam obter informações dinâmicas realizando a comunicação com um servidor.
347
Guia de Estudos para SCJA
APPLET As desvantagens de utilizar applet são:
O cliente precisa ter instalado o JRE no computador. O cliente precisa fazer download do applet, se o mesmo
for grande pode demorar para iniciar. Possuem algumas restrições de memória e segurança.
348
Guia de Estudos para SCJA
APPLET Exemplos de Applet que pode ser encontrado dentro da
pasta demo, dentro da pasta onde o Java foi instalado:
349
7.4 - DESCREVER, EM ALTO NÍVEL, AS CARACTERÍSTICAS BÁSICAS, OS BENEFÍCIOS, AS DESVANTAGENS E OS PROBLEMAS DE IMPLANTAÇÃO RELACIONADOS À CRIAÇÃO DE FAT-CLIENTS USANDO SWING.
350
Guia de Estudos para SCJA
SWING Swing é uma API do Java que fornece os componentes
para criação de interfaces gráficas para o usuário. Podemos desenvolver aplicações desktop onde os componentes visuais possuem a aparência de acordo com o Sistema Operacional.
Desenvolver uma aplicação utilizando Swing fornece: Independente de plataforma Os componentes não precisam delegar para o Sistema
Operacional para eles serem pintados na tela, como é o caso do AWT.
Fácil troca da aparência dos componentes Extensível, customizado e fracamente acoplado
351
Guia de Estudos para SCJA
SWING As desvantagens de utilizar Swing são:
A distribuição da aplicação deve ser feita manualmente em todos os clientes.
A atualização da aplicação também precisa ser feita manualmente em todos os clientes.
As aplicações feitas em Swing costumam ser um pouco mais lentas que as aplicações desktops feitas para um único sistema operacional.
352
Guia de Estudos para SCJA
SWING Exemplo de aplicação Swing:
353
8- TECNOLOGIAS DE SERVIDOR
354
8.1 - DESCREVER, EM ALTO NÍVEL, AS CARACTERÍSTICAS BÁSICAS DE: EJB, SERVLETS, JSP, JMS, JNDI, SMTP, JAX-RPC, SERVIÇOS DA WEB (INCLUINDO SOAP, UDDI, WSDL E XML) E JAVAMAIL.
355
Guia de Estudos para SCJA
APIS DA PLATAFORMA J2EE
APIs da plataforma J2EE: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/Overview7.html
356
Guia de Estudos para SCJA
ENTERPRISE JAVABEANS (EJB) EJB é um framework que simplifica o processo de
desenvolvimento de componentes de aplicações distribuídas em Java.
Utilizando EJB o desenvolvedor pode utilizar mais seu tempo na lógica de negocio, preocupando-se menos com transação, persistência, serviços de rede, etc.
Serviços disponibilizados por um container EJB. Gerenciamento de transação Segurança Concorrência Serviço de rede Gerenciamento de recursos Persistência de dados Serviço de mensageria
357
Guia de Estudos para SCJA
JAVASERVER PAGES (JSP) Permite criar paginas web com conteúdo estático e
dinâmico utilizando HTML com Java. Pode utilizar expression language para acessar objetos
do servidor. Pode criar tags customizadas para o desenvolvimento
das páginas.
358
Guia de Estudos para SCJA
JAVA MESSAGE SERVICE (JMS) A JMS pode ser utilizada de duas formas: Point to Point
onde um programa envia mensagens para uma fila e serão armazenadas nesta fila até que outro programa consuma estas mensagens.
Se for necessário podemos ter mais um programa ou processo esperando pelas mensagens na fila.
Conceitos básicos da API JMS: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JMS3.html
359
Guia de Estudos para SCJA
JAVA MESSAGE SERVICE (JMS) Publish / Subscribe
Um programa envia as mensagens para um tópico e todos os programas clientes desse tópico vão receber as mensagens.
Conceitos básicos da API JMS: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JMS3.html
360
Guia de Estudos para SCJA
JAVA MESSAGE SERVICE (JMS) Utilizando JMS podemos desenvolver aplicações que
executam um grande processamento de informações de forma assíncrona, exemplo: Geração de relatórios com informações referente ao
estoque de todos os produtos no centro de distribuição X. O usuário pode entrar na aplicação e solicitar a geração desse relatório mas pode continuar a utilizar a aplicação normalmente, durante a geração do relatório.
Podemos utilizar JMS para integrar diversas aplicações, exemplo: Um portal de cursos on-line pode oferecer uma interface
para novas pessoas se cadastrarem, e o cadastro desses novos clientes pode enviar uma mensagem para um outro sistema por exemplo um ERP da empresa processar e gerar o boleto de mensalidade.
361
Guia de Estudos para SCJA
JAVA NAMING AND DIRECTORY INTERFACE (JNDI) Quando desenvolvemos aplicações muitas vezes
precisamos obter alguns componentes ou recursos adicionais como por exemplo componentes EJB, conexão com banco de dados, filas de mensagerias e outros.
Utilizando JNDI podemos especificar um contexto informando onde os componentes ou recursos estão e através de seus nomes podemos obter seus objetos.
362
Guia de Estudos para SCJA
WEB SERVICE Web Services são aplicações baseadas na web que utilizam
XML para trocar informações e protocolos para transporte dos dados XML.
Simple Object Access Protocol (SOAP) Envelope baseado em XML que define o que é a mensagem e
como processá-la. Universal Description, Discovery and Integration (UDDI)
Forma de publicar os web services na internet para deixar disponivel globalmente.
Web Service Definition Language (WSDL) Padrão no formato XML que descreve o serviço.
Extensible Markup Language (XML) Forma de escrita de arquivo texto composto de tags.
363
Guia de Estudos para SCJA
JAVA API FOR XML-BASED REMOTE PROCEDURE CALL (JAX-RPC) JAX-RPC é uma tecnologia para construir Web Services
e clientes que utiliza chamada de funções remotas utilizando mensagens XML baseadas no protocolo SOAP.
A API JAX-RPC facilita a utilização de Web Services, pois oculta a conversão da chamadas e resposta das mensagens SOAP.
Criando um Web Service e seu cliente com JAX-RPC: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXRPC3.html
364
Guia de Estudos para SCJA
SIMPLE MAIL TRANSFER PROTOCOL (SMTP) SMTP é um protocolo para enviar e receber emails. Este protocolo utiliza a porta 25 do TCP.
365
Guia de Estudos para SCJA
JAVAMAIL API que fornece o serviço de envio e recebimento de
email. Faz uso dos protocolos de envio e recebimento de email
(SMTP, POP3, MIME e IMAP). Lida com envio e recebimento de anexos, trabalha
com mensagens em HTML e procura por termos em mensagens.
366
8.2 - DESCREVER, EM ALTO NÍVEL, AS CARACTERÍSTICAS BÁSICAS DO SUPORTE A JSP E A SERVLET PARA THIN-CLIENTS HTML.
367
Guia de Estudos para SCJA
CONTAINER WEB
Banco de Dados
RDBMS
SQL
Servidor Enterprise
Container Web
JavaServer Pages
Servlet
Container EJB
Session Bean
Message-Driven Bean
Entity Bean
Cliente
HTML
JavaScript
368
Guia de Estudos para SCJA
SERVIDOR WEB Software que fica aguardando requisições HTTP
(Hypertext Transfer Protocol). Seu cliente normalmente é um browser como por
exemplo: Mozilla, Opera, Internet Explorer, etc. Existem diversos servidores web que possuem suporte
ao Java: Tomcat, Jboss, GlassFish, IAS, WebSphere, etc.
369
Guia de Estudos para SCJA
SERVLET A tecnologia Servlet permite processar requisições e
gerar respostas HTTP para atender um cliente (browser).
Através da requisição HTTP o cliente pode solicitar alguma informação ou enviar informações para a aplicação web.
Através da resposta HTTP o Servlet pode enviar um código HTML que representa uma pagina web, pode enviar parâmetros ou atributos.
O ciclo de vida de um Servlet é controlado através de um container web.
370
Guia de Estudos para SCJA
SERVLET
371
Guia de Estudos para SCJA
JAVASERVER PAGES (JSP) A tecnologia JSP permite desenvolver paginas web em
HTML de forma dinâmica, pois podemos utilizar código Java junto com código HTML.
Com o JSP podemos desenvolver páginas web para enviar informações para Servlets, apresentar as informações que são recebidas pelas Servlets gerando código HTML de forma dinâmica.
372
Guia de Estudos para SCJA
EXEMPLO DE APLICAÇÃO JSP + SERVLET
373
8.3 - DESCREVER, EM ALTO NÍVEL, O USO E AS CARACTERÍSTICAS BÁSICAS DE BEANS CONTROLADOS POR MENSAGENS, DE ENTIDADE E DE SESSÃO EJB.
374
Guia de Estudos para SCJA
CONTAINER EJB
Banco de Dados
RDBMS
SQL
Servidor Enterprise
Container Web
JavaServer Pages
Servlet
Container EJB
Session Bean
Message-Driven Bean
Entity Bean
Cliente
HTML
JavaScript
375
Guia de Estudos para SCJA
ENTERPRISE JAVABEANS (EJB) Existem três tipos de EJBs que podemos utilizar:
Session Bean – Utilizado para guardar a lógica de negocio da aplicação.
Message Drive Bean – Utilizado para troca de mensagens.
Entity Bean – Utilizado para representar as entidades do banco de dados.
376
Guia de Estudos para SCJA
ENTERPRISE JAVABEANS (EJB) Entity Bean
São componentes reutilizaveis que representam as entidades do banco de dados.
377
Guia de Estudos para SCJA
ENTERPRISE JAVABEANS (EJB) Container-managed persistence (CMP)
O container fica responsável por gerenciar o estado das entidades com o banco de dados, ou seja, o container pode salvar, atualizar, consultar ou excluir uma entidade do banco de dados.
Podemos escrever EJB-QL para dizer para o container como fazer as consultas.
Bean-managed persistence (BMP) O desenvolvedor fica responsável por sincronizar (inserir,
atualizar, consultar, excluir) as entidades e gerenciar a transação das entidades do banco de dados.
Pode solicitar uma conexão com o banco de dados, enviar comandos JDBC.
378
Guia de Estudos para SCJA
ENTERPRISE JAVABEANS (EJB) Session Bean
São componentes reutilizáveis que contém a lógica do negocio. O container EJB é responsável por criar e destruir o session
bean. Stateless Session Bean
Não mantém o estado. O Stateless Session Bean tem seu ciclo de vida durante o tempo
de uma simples chamada de método. O problema do Stateless Session Bean é que a cada requisição
um novo bean pode ser criado. Stateful Session Bean
Mantém o estado durante as chamadas dos métodos. O ciclo de vida do Stateful Session Bean pode durar no máximo
o mesmo tempo que o sessão do cliente. O problema do Stateful Session Bean é que pode haver um
número muito grande de instancias na memória.
379
Guia de Estudos para SCJA
ENTERPRISE JAVABEANS (EJB) Message Drive Bean
São componentes reutilizáveis que permitem a execução de mensagens de forma assíncrona.
Esse componente fica aguardando até que recebe alguma mensagem para processar.
São stateless portanto não guardam o estado dos atributos.
380
8.4 - DESCREVER, EM ALTO NÍVEL, AS PRINCIPAIS VANTAGENS E DESVANTAGENS DE USAR TECNOLOGIAS DE SERVIDOR J2EE, ALÉM DE DESCREVER E COMPARAR AS CARACTERÍSTICAS BÁSICAS DO NÍVEL WEB, DO NÍVEL DE NEGÓCIOS E DO NÍVEL EIS.
381
Guia de Estudos para SCJA
VANTAGENS E DESVANTAGENS J2EE No nível Web podemos desenvolver aplicações que
podem ser executadas em browsers diferentes, onde através de uma conexão com a internet o usuário pode acessar a aplicação.
No nível Negocio podemos desenvolver componentes que podem ser reutilizados por outras aplicações, criar serviços disponíveis pela web, ter clientes que podem ser aplicações desktop ou web e outros.
No nível EIS (Enterprise Information System) podemos integrar as aplicações com outras aplicações que podem ser até de outra plataforma utilizando serviços web ou mensageria.
382
Guia de Estudos para SCJA
BIBLIOGRAFIA [MUCHOW] John W. Muchow, Core J2ME , Pearson, 2004 [HORSTMANN & CORNELL] Cay S. Horstmann & Gary
Cornell, Core Java, 8º Ed. Prentice Hall, 2008 [SIERRA & BATES] Kathy Sierra & Bert Bates, Head
First EJB, O’Reilly – 2003 [BASHAM, SIERRA & BATES] Bryan Basham, Kathy
Sierra & Bert Bates, Head First Servlet & JSP, O’Reilly, 2004
[FOWLER] Martin Fowler, UML Essencial, 3ª Ed. Bookman, 2005.
[LI & KNUDSEN] Sing Li & Jonathan Knudsen, Beginning J2ME: From Novice to Professional, 3ª Ed. Apress, 2005.
383
Guia de Estudos para SCJA
BIBLIOGRAFIA Documentação Java SE - http://java.sun.com/javase/6/docs Java EE - http://java.sun.com/javaee Java ME - http://java.sun.com/javame Java SE - http://java.sun.com/javase SCJA – Sun Certified Java Associate
http://www.sun.com/training/certification/java/scja.xml The J2EE 1.4 Tutorial -
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html UML - http://www.uml.org UML for the Java Associate -
http://www.esnips.com/doc/bf534606-bf87-4107-a884-efc791c80fc5/hfoo-associateuml
384
Guia de Estudos para SCJA
SIMULADOS SCJA Certification Mock Exam Questions – SCJA -
http://www.scja.de/
SCJA Mock Exam 1 - Q1 - http://www.cafe4java.com/mockexams/scja/mock1/q1.php
SCJA Mini Mock Exam - http://www.ejavaguru.com/scjafreemockexam.php
385
Guia de Estudos para SCJA
E AGORA? Agora é só estudar, faça vários simulados, marque a aprova
e boa sorte.
PS: Se você passar na prova depois me manda pelo menos um email falando PASSEI.