Kees » Preparatório para Certificação OCJP

CARREIRA JAVA OCJP = CERTIFICAÇÃO PROFISSIONAL

JAVA MÓDULO I – OCJP

Programação Java – Introdução a Certificação OCJP

1. Objetivo do Módulo:

a. Este módulo capacita o aluno quanto a linguagem java e apresenta um conteúdo voltado para as principais funcionalidades desta tecnologia.

2. Carga Horária:

a. 80 horas

3. Material:

a. Certificação Sun para Programador Java 6, SCJP – Altabooks

4. Capítulos :

Capitulo 1 . Declarações e controle de acesso

I. Declarações Inicialização e Escopo

1.1 Desenvolver código que declare classes (incluindo abstract e todas as formas de
classes aninhadas), interfaces, e enums, e incluir o uso apropriado de pacotes e declarações de
importação (incluindo static imports).

1.2 Desenvolver código que declare uma interface. Desenvolver código que use
implemente ou extenda uma ou mais interfaces. Desenvolver código que declare uma classe
abstrata. Desenvolver código que use ou extenda uma classe abstrata.

1.3 Desenvolver código que declare, inicialize e use tipos primitivos, arrays, enums e
objetos como estáticos, instâncias e variáveis locais. Também, usar identificadores legais (do
ponto de vista sintático) para nomes de variáveis.

1.4 Desenvolver código que declare métodos estáticos e não estáticos, e (se
apropriado), usem nomes de métodos que sejam aderentes aos padrões de nomeação dos
JavaBeans.

1.5 Dado um código de exemplo, determinar corretamente se um método sobrepõe ou
sobrecarrega outro método, e identificar valores de retorno legais (incluindo retornos covariantes)
para o método.

1.6 Dado um conjunto de classes e superclasses, desenvolver construtores para uma ou
mais dessas classes. Dada uma declaração de classe, determine se um construtor default será
construído, e em caso afirmativo, determinar o comportamento deste construtor. Dada uma
listagem de classes aninhadas ou não aninhadas, escreva o código para instanciar as classes.

II. Controle de Fluxo

2.1 Desenvolver código que implemente uma declaração if ou switch, e identificar os
tipos de argumentos para essas declarações.

2.2 Desenvolver código que implemente todas as formas de loops e iteradores,
incluindo o uso da declaração for, for-each, while, do…while, rótulos, break e continue. E explanar
os valores obtidos por variáveis contadores em loops durante e após a sua execução.

2.3 Desenvolver código que faça uso de asserções (assertions) e distinguir os usos
apropriados e não apropriados das asserções.

2.4 Desenvolver código que faça uso de exceções e manipulação de cláusulas de
exceções (try, catch, finally), declarar métodos e sobreponha (override) métodos que lancem
exceções.

2.5 Reconhecer os efeitos de uma exceção decorrente de um determinado ponto
específico em um fragmento de código. Note que a exceção pode ser um exceção de runtime, uma
exceção checada ou ainda um erro.

2.5 Reconhecer situações que irão resultar em qualquer um dos seguintes lançamentos:
ArrayIndexOutOfBoundsException, ClassCastException, IllegalArgumentException,
IllegalStateException, NullPointerException, NumberFormatException, AssertionError,
ExceptionInInitializerError, StackOverflowError ou NoClassDefFoundError. Entender quais destes
lançamentos são lançados pela JVM e reconhecer situações nas quais outros poderiam ser lançados
programaticamente.

III. Conteúdos da API

3.1 Desenvolver código que usa as classes wapper primitivas (tais como Boolean,
Character, Double, Integer, etc), e/ou autoboxing e unboxing. Discutir as diferenças entre as classes
String, StringBuilder e StringBuffer.

3.2 Dado um cenário envolvendo navegação sistemas de arquivos, leitura a partir de
arquivos, escrita em arquivos, ou interação com o usuário, desenvolva uma solução correta usando-
se das seguintes classes (algumas vezes em combinação) do pacote java.io: BufferedReader,
BufferedWriter, File, FileReader, FileWriter, PrintWriter e Console.

3.3 Desenvolver código que serializa e/ou desserializa objetos usando as APIs do pacote
java.io: DataInputStream, DataOutputStream, FileInputStream, FileOutputStream,
ObjectInputStream, ObjectOutputStream e Serializable.

3.4 Usar as APIs padrão de J2SE do pacote java.text para formatar corretamente e/ou
converter datas, números e valores monetários para uma localidade específica(entenda-se região). E
dado um cenário, determinar os métodos apropriados a usar se desejar utilizar a localidade default
ou uma localidade específica. Descreva o propósito e uso da classe java.util.Locale.

3.5 Escreva um código que use as APIs padrão dos pacotes java.util e java.util.regex
para formatar ou converter strings ou fluxos. Para strings, escreva um código que use as classes
Pattern ou Matcher e o método String.split. Reconhecer e usar expressões regulares padrão para
casamentos (limitadas a: .(ponto), *(estrela), + (mais), ?, \d, \s, \w, [], ( ) ). O uso de *, + e ? irá ser
limitado a quantificadores “gananciosos”, e o operador de parênteses só irá ser usado como um
mecanismo de agrupamento, não para capturar conteúdo durante o casamento.
Para os fluxos, escreva código usando as classes Formatter e Scanner e os métodos PrintWriter.format/printf.
Reconhecer e usar parâmetros de formatação (limitados a: %b, %c, %d, %f, %s) para strings.

IV. Concorrência

4.1 Escreva código para definir, instanciar e iniciar novas threads usando ambas
java.lang.Thread e java.lang.Runnable.

4.2 Reconhecer os estados nos quais uma thread pode estar e identificar meios pelos
quais uma thread pode transitar de um estado para outro.

4.3 Dado um cenário, escreva código que faça o uso apropriado de object locking para
protect static ou variáveis de instância de problemas de acesso concorrente.

4.4 Dado um cenário, escreva código que faça o uso apropriado de wait, notify ou
notifyAll.

V. Conceitos de Orientação a Objetos

5.1 Desenvolver código que implemente alto encapsulamento, baixo acoplamento e alta
coesão em classes, e descrever os seus benefícios.

5.2 Dado um cenário, desenvolver código que demonstra o uso de polimorfismo. Além
disso, determinar quando o casting será necessário e reconhecer os erros de compilador vs. Erros
de runtime relacionados ao casting de referências a objetos.

5.3 Explanar o efeito dos modificadores sobre herança com respeito aos construtores,
variáveis de instância ou estáticas e métodos de instância ou estáticos.

5.4 Dado um cenário, desenvolver código que declare e/ou invoque métodos
sobrepostos (overrided) ou sobrecarregados e código que declare e/ou invoque uma superclasse, ou
construtores sobrecarregados.

VI. Coleções e Genericos
6.1 Dado um cenário de projeto, determinar quais classes de coleção e/ou interfaces
deveriam ser usadas para implementar corretamente o projeto, incluindo o uso da interface
Comparable.

6.2 Distinguir entre sobreposições (overrides) corretas e incorretas dos métodos
correspondentes a HashCode e equals, e explanar a diferença entre = = e o método equals.

6.3 Escrever código que use versões genéricas das APIs de coleções(em particular as
interfaces Set, List e Map) e implementação de classes. Reconhecer as limitações das Coleções não-
genéricas da API e como refatorar o código para usar versões genéricas. Escrever código que use as
interfaces NavigableSet e NavigableMap.

6.4 Desenvolver código que faça uso apropriado de parâmetros de Tipo em declarações
de classe/interface, variáveis de instância, argumentos de métodos e tipos de retorno. E escrever
métodos genéricos ou métodos que façam uso de tipos wildcard. Entender as similaridades e
diferenças entre estas duas aproximações.

6.5 Use as capacidades do pacote java.util para escrever código para manipular uma
lista para ordenação (sorting), executando uma busca binária ou convertendo a lista para um array.

Use as capacidades do pacote java.util ara escrever código que manipule um array para ordenação,
executando uma busca binária ou convertendo o array para uma lista. Use as interfaces
java.util.Comparator e java.lang.Comparable para afetar a ordenação de listas e arrays. Além disso,
reconhecer o efeito da “ordenação natural” de classes wrapper primitivas e java.lang.String em
ordenação.
VII. Fundamentos

7.1 Dado um código de exemplo e um cenário, escreva código que use de modo
apropriado modificadores de acesso, declarações package, e declarações import para interagir
com (através de acesso ou herança) o código no exemplo.

7.2 Dado um exemplo de uma classe e um comando de linha, determine o
comportamento esperado em tempo de execução.

7.3 Determine o efeito ocorrido sobre referências a objetos e valores primitivos quando
eles são passados a métodos que executam atribuições ou outras operações de modificação sobre
seus parâmetros.

7.4 Dado um código de exemplo, reconhecer o ponto no qual um objeto torna-se
elegível para o garbage collection (coletor de lixo), determine o que é e não é garantido pelo sistema
de garbage collection, e reconheça os comportamentos do método Object.finalize().

7.5 Dado um nome de qualificação completo de uma classe que é implantada dentro e/
ou fora de um arquivo JAR, construa a estrutura de diretório apropriada para esta classe. Dado
um código de exemplo e um classpath, determinar se o classpath irá permitir ao código compilar
com sucesso.

7.6 Escreva código que aplique corretamente os operadores apropriados incluindo
operadores de atribuição (limitados a: -, +=, -=), operadores aritméticos (limitados a: +, -, *, /,
%, ++, –), operadores relacionais (limitados a: <, <=, >, >=, ==, !=), o operador instanceof,
operadores lógicos (limitados a &, |, ^, !, &&, ||) e o operador condicional ( ? : ), para produzir os
resultados desejados. Escreva código que determine a igualdade de dois objetos e de dois tipos
primitivos.

VIII – Atribuições
8.1.VALORES LITERAIS DE TODOS OS TIPOS PRIMITIVOS

8.1.2 LITERAIS INTEIROS
8.1.3 LITERAIS DE PONTO FLUTUANTE
8.1.4 LITERAIS BOOLEANOS
8.1.5 LITERAIS DE CARACTERES
8.1.6 VALORES LITERAIS PARA STRINGS

8.2 OPERADORES DE ATRIBUIÇÃO

8.2.1 ATRIBUIÇÕES PRIMITIVAS
8.2.2 CONVERSÃO DE TIPOS PRIMITIVOS

8.3 USANDO UMA VARIÁVEL OU ELEMENTO DE ARRAY QUE NÃO TENHA SIDO INCIALIZANDO E ATRIBUÍDO

8.3.4 VARIAVEIS DE INSTÂNCIA DE TIPO PRMITIVO E DE OBJETO
8.3.5 VARIÁVEIS DE INSTÂNCIA PRIMITIVAS
8.3.6 VARIÁVEIS PRIMITIVAS E OBJETOS LOCAIS
8.3.7 TIPOS PRIMITIVOS E OBJETOS LOCAIS
8.3.8 TIPOS ARITIVOS LOCAIS
8.3.9 ARRAYAS LOCAIS

8.4 ATRIBUINDO UMA VARIÁVEL DE REFÊNCIA A OUTRA


8.4.1 PASSANDO VARIÁVEIS PARA MÉTODOS
8.4.2 PASSANDO VARIÁVEIS DE REFÊNCIA A OBJETO
8.4.3 A LINGUAGUEM JAVA USA A SEMÂNTICA DE PASSAGEM POR VALOR?
8.4.4 PASSANDO VARIÁVEIS PRIMITIVAS

8.4.5 DECLARAÇÃO , CONSTRUÇÃO E INICIALIZAÇÃO DE ARRAYAS

8.5 USANDO CLASSES WRAPPER E BOXING

8.6 SOBRECARREGANDO

8.7 COLETA DE LIXO

8.8 QUANDO O COLETOR DE LIXO É EXECUTADO ?

IX. Operadores

9.1 – OPERADORES JAVA
9.1.1 OPERADORES DE ATRIBUIÇÃO

9.1.2  OPERADORES DE ATRIBUIÇÃO COMPOSTOS
9.1.3 OPERADORES DE COMPARAÇÃO
9.1.4 OPERAÇÕES DE IGUALDADE
9.1.5 OPERAÇÕES ARITMÉTRICOS

X . Controle de Fluxo, exceções e assertivas

10.1 ESCREVENDO O CÓDIGO USANDO INSTRUÇÕES IF E SWITCH
10.2 LOOPS E ITERADORES
10.3. TRATAMENTO DE EXCEÇÕES
10.4.ERROS E EXCEÇÕES COMUNS
10.5 TRABALHANDO COM O MECANISMO DE ASSERTIVAS
10.6 HABILIDADES ASSERTIVAS
10.7. USANDO AS ASSERTIVAS APROPRIADAMENTE

XI. Strings, E/S, formatação e parsing

11.1. A CLASSE STRING
11.2 AS CLASSES STRINGS RELACIONADAS AOS OBJETOS STRING E A MEMÓRIA
11.3 AS CLASSES STRINGBUFFER E STRINGBUILDER
11.4 NAVEGAÇÃO DE ARQUIVOS
11.5 SERIALIZAÇÃO
11.6 DATAS, NÚMEROS E MOEDA
11.7 PARSING, TOKENIZAÇÃO E FORMATAÇÃO

XII. Classes Internas

12.1 CLASSES INTERNAS

12.2 CLASSES INTERNAS LOCAIS DE MÉTODO
12.3 CLASSES INTERNAS ANÔNIMAS
12.4 CLASSES ESTATICAS ANINHADAS

XIII. Threads

13.1 CRIANDO UMA THREADS

13.2 ESTADOS E TRANSIÇÕES DE  THREADS
13.3 ESTADOS E TRANSIÇÕES DE  THREADS
13.4 SINCRONIZANDO O CÓDIGO
13.5 INTERAÇÃO ENTRE OS THREADS

XIV. Desenvolvimento

14.1 – USANDO OS COMANDOS JAVAC E JAVA
14.2 – COMPILANDO COM JAVA
14.3 – INICIANDO APLICATIVOS COM JAVA
14.4 – PROCURANDO POR OUTRAS CLASSES
14.5 ARQUIVOS JAR
14.5.1 ARQUIVOS JAR E BUSCA
14.6 USANDO IMPORTAÇÕES ESTÁTICAS