Você está na página 1de 50

Traduzido do Inglês para o Português - www.onlinedoctranslator.

com

AGRADECIMENTOS

K athy e Bert gostariam de agradecer às seguintes pessoas:

Todas as pessoas incrivelmente trabalhadoras da McGraw-Hill


Education: Tim Green (que nos suporta há 14 anos), Lisa McClain e LeeAnn
Pickrell. Obrigado por toda a sua ajuda e por ser tão receptivo, paciente,
flexível e profissional, e o melhor grupo de pessoas com quem
poderíamos trabalhar.
Todos os nossos amigos da Kraftur (e nossos outros amigos relacionados a
cavalos) e, mais especialmente, para Sherry, Steinar, Stina e as meninas, Kacie,
DJ, Jec, Leslie e David, Annette e Bruce, Lucy, Cait e Jennifer, Gabriela e Maria.
Obrigado ao Pedro e ao Ely.

Alguns dos profissionais de software e amigos que nos ajudaram nos


primeiros dias: Tom Bender, Peter Loerincs, Craig Matthews, Leonard Coyne,
Morgan Porter e Mike Kavenaugh.
Dave Gustafson por seu apoio contínuo, insights e treinamento. Nossa
maravilhosa contato e amiga da Oracle, Yvonne Prefontaine.
Nossos grandes amigos e gurus: Simon Roberts, Bryan Basham e Kathy
Collina.
Stu, Steve, Burt e Marc Hedlund por injetar um pouco de diversão no
processo.

Para Eden e Skyler, por ficarem horrorizados que adultos – fora da escola –
estudassem tanto para um exame.

Ao Coderanch Trail Boss, Paul Wheaton, por administrar o melhor site da


comunidade Java na Web, e a todos os generosos e pacientes moderadores
do JavaRanch, er, Coderanch.

A todos os instrutores de Java do passado e do presente por ajudarem a tornar o


aprendizado de Java uma experiência divertida, incluindo (para citar apenas alguns) Alan
Petersen, Jean Tordella, Georgianna Meagher, Anthony Orapallo, Jacqueline Jones,
James Cubeta, Teri Cubeta, Rob Weingruber, John Nyquist, Asok
Perumainar, Steve Stelting, Kimberly Bobrow, Keith Ratliff e o cara Java
mais atencioso e inspirador do planeta, Jari Paukku.
Nossos amigos peludos e emplumados: Eyra, Kara, Draumur, Vafi, Boi, Niki e
Bokeh.
Finalmente, a Eric Freeman e Beth Robson por sua contínua inspiração.
PREFÁCIO

T o objetivo principal deste livro é ajudá-lo a se preparar e ser aprovado no


exame de certificação OCA Java SE 8 Programmer I da Oracle.

Este livro segue de perto tanto a amplitude quanto a profundidade do


exames reais. Por exemplo, depois de ler este livro, você provavelmente não
emergirá como um guru OO, mas se você estudar o material e se sair bem nos
Autotestes, você terá um entendimento básico de OO e se sairá bem em o exame.
Depois de concluir este livro, você deve ter certeza de que revisou minuciosamente
todos os objetivos que a Oracle estabeleceu para esses exames.

Neste livro
Este livro está organizado em seis capítulos para otimizar seu aprendizado dos tópicos
cobertos pelo exame OCA 8. Sempre que possível, organizamos os capítulos de acordo com
os objetivos do Oracle, mas às vezes misturamos objetivos ou os repetimos parcialmente
para apresentar os tópicos em uma ordem mais adequada ao aprendizado do material.

Em cada capítulo
Criamos um conjunto de componentes de capítulos que chamam sua atenção para itens
importantes, reforçam pontos importantes e fornecem dicas úteis para fazer exames. Dê uma
olhada no que você encontrará em cada capítulo:

Cada capítulo começa com o Objetivos de certificação— o que você


precisa saber para passar na seção do exame que trata do tópico do
capítulo. Os títulos de Objetivos de Certificação identificam os
objetivos dentro do capítulo, então você sempre saberá um objetivo
quando o vir!
Observação do exame notas chamam a atenção para informações sobre e
potenciais armadilhas no exame. Como estávamos na equipe que criou esses
exames, sabemos pelo que você está prestes a passar!

No trabalho textos explicativos discutem aspectos práticos de tópicos de


certificação que podem não ocorrer no exame, mas que serão úteis no mundo
real.

Exercícios são intercaladas ao longo dos capítulos. Eles ajudam você a


dominar habilidades que provavelmente serão uma área de foco no
exame. Não apenas leia os exercícios; são práticas práticas que você deve
se sentir à vontade para completar. Aprender fazendo é uma maneira
eficaz de aumentar sua competência com um produto.

Da sala de aula as barras laterais descrevem os problemas que surgem com


mais frequência no ambiente de sala de aula de treinamento. Essas barras
laterais oferecem uma perspectiva valiosa sobre tópicos relacionados a
certificação e produtos. Eles apontam erros comuns e abordam questões que
surgiram das discussões em sala de aula.

O Resumo da Certificação é uma revisão sucinta do capítulo e uma


reformulação dos pontos salientes sobre o exame.
O Exercício de dois minutos no final de cada capítulo há uma lista de verificação
dos pontos principais do capítulo. Pode ser usado para revisão de última hora.

O Auto
Perguntas e respostas teste oferece perguntas semelhantes às encontradas no
exame de certificação, incluindo questões de múltipla escolha e
pseudo-arrastar e soltar. As respostas a essas perguntas, bem
como as explicações das respostas, podem ser encontradas no
final de cada capítulo. Ao fazer o Autoteste após concluir cada
capítulo, você reforçará o que aprendeu naquele capítulo,
enquanto se familiariza com a estrutura das perguntas do exame.
INTRODUÇÃO

Organização
Este livro está organizado de forma a servir como uma revisão detalhada para o exame
OCA 8, tanto para profissionais experientes em Java quanto para aqueles nos estágios
iniciais de experiência com tecnologias Java. Cada capítulo abrange pelo menos um
aspecto importante do exame, com ênfase no "porquê" e no "como fazer" da
programação na linguagem Java.
O software de exame prático com dois exames de 80 perguntas está disponível para
download.

O que este livro não é


Você não encontrará um guia para iniciantes para aprender Java neste livro. Todas as mais de 500
páginas deste livro são dedicadas exclusivamente a ajudá-lo a passar no exame. Se você é novo em
Java, sugerimos que você gaste um pouco de tempo aprendendo o básico. Você não deve começar
com este livro até saber como escrever, compilar e executar programas Java simples. No entanto,
não assumimos nenhum nível de conhecimento prévio dos tópicos individuais abordados. Em
outras palavras, para qualquer tópico (orientado exclusivamente pelos objetivos reais do exame),
começamos com a suposição de que você é novo nesse tópico. Portanto, assumimos que você é
novo nos tópicos individuais, mas assumimos que você não é novo em Java.

Também não pretendemos estar preparando você para o exame e, simultaneamente,


tornando-o um ser Java completo. Este é um guia de estudo para o exame de certificação e
é muito claro sobre sua missão. Isso não quer dizer que a preparação para o exame não o
ajudará a se tornar um programador Java melhor! Pelo contrário, mesmo os
desenvolvedores Java mais experientes muitas vezes afirmam que ter que se preparar
para o exame de certificação os tornou programadores muito mais experientes e
completos do que seriam sem o estudo orientado para o exame.
Conteúdo digital
Para obter mais informações sobre o software de exame prático, consulte o
Apêndice.

Alguns ponteiros
Depois de terminar de ler este livro, reserve algum tempo para fazer uma revisão
completa. Você pode querer voltar ao livro várias vezes e fazer uso de todos os
métodos que ele oferece para revisar o material:

1. Releia todos os Exercícios de Dois Minutos ou peça a alguém que faça perguntas sobre você. Você
também pode usar os treinos como forma de fazer um cursinho rápido antes do exame. Você
pode fazer alguns cartões de memória flash com fichas de 3 × 5 que tenham o material da broca
de dois minutos.

2. Releia todas as notas do Exam Watch. Lembre-se de que essas notas são
escritas por autores que ajudaram a criar o exame. Eles sabem o que você
deve esperar – e o que você deve estar atento.
3. Refazer os autotestes. Fazer os testes logo depois de ler o capítulo é uma boa ideia
porque as perguntas ajudam a reforçar o que você acabou de aprender. No entanto,
é uma ideia ainda melhor voltar mais tarde e fazer todas as perguntas do livro de
uma só vez. Finja que você está fazendo o exame ao vivo. (Sempre que você fizer os
autotestes, marque suas respostas em um pedaço de papel separado. Dessa forma,
você pode repetir as perguntas quantas vezes precisar até se sentir confortável com
o material.)
4. Complete os exercícios. Os exercícios foram elaborados para cobrir os tópicos do
exame, e não há melhor maneira de conhecer esse material do que praticando.
Certifique-se de entender por que está realizando cada etapa em cada exercício. Se
houver algo sobre o qual você não esteja claro, releia essa seção no capítulo.

5. Escreva muito código Java. Vamos repetir este conselho várias vezes. Quando escrevemos
este livro, escrevemos centenas de pequenos programas Java para nos ajudar a fazer
nossa pesquisa. Ouvimos centenas de candidatos que passaram no exame e, em quase
todos os casos, os candidatos que pontuaram extremamente bem no exame
escreveram muito código durante seus estudos. Experimente com os exemplos de
código do livro, crie listas horríveis de erros do compilador. Deixe seu IDE de lado,
aumente a linha de comando e escreva o código!
Introdução ao material do livro
O exame OCA 8 é considerado um dos mais difíceis do setor de TI, e podemos dizer por
experiência que uma grande parte dos candidatos ao exame vai para o teste despreparado.
Como programadores, tendemos a aprender apenas o que precisamos para concluir nosso
projeto atual, devido aos prazos insanos que geralmente temos.
Mas este exame tenta provar sua compreensão completa da linguagem Java,
não apenas as partes com as quais você se familiarizou em seu trabalho.
A experiência por si só raramente fará você passar neste exame com uma nota de aprovação,
porque mesmo as coisas que você acha que sabe podem funcionar um pouco diferente do que
você imaginou. Não é suficiente conseguir que seu código funcione corretamente; você deve
entender os fundamentos básicos de uma maneira profunda e com amplitude suficiente para
cobrir praticamente qualquer coisa que possa surgir no decorrer do uso da linguagem.

Quem se importa com a certificação?


Os empregadores sim. Caçadores de cabeças fazem. Programadores sim. A aprovação neste
exame prova três coisas importantes para um empregador atual ou potencial: você é inteligente;
você sabe como estudar e se preparar para um teste desafiador; e, acima de tudo, você conhece a
linguagem Java. Se um empregador pode escolher entre um candidato que passou no exame e um
que não passou, o empregador sabe que o programador certificado não precisa perder tempo para
aprender a linguagem Java.
Mas isso significa que você pode realmente desenvolver software em Java? Não
necessariamente, mas é um bom começo. Para realmente demonstrar sua capacidade
de desenvolver (em vez de apenas seu conhecimento da linguagem), você deve
considerar fazer o Java Developer Exam, onde você recebe uma tarefa para criar um
programa, do início ao fim e enviá-lo para um avaliador para avaliar e pontuar.

Fazendo o exame do programador


Em um mundo perfeito, você seria avaliado por seu verdadeiro conhecimento de um assunto, não
simplesmente por como você responde a uma série de perguntas de teste. Mas a vida não é perfeita, e
simplesmente não é prático avaliar o conhecimento de todos numa base individual.

Para a maioria de suas certificações, a Oracle avalia os candidatos usando um


Para a maioria de suas certificações, a Oracle avalia os candidatos usando um serviço de
teste baseado em computador operado pela Pearson VUE. Para desencorajar a simples
memorização, os exames da Oracle apresentam um conjunto de perguntas potencialmente
diferente para diferentes candidatos. No desenvolvimento do exame, centenas de perguntas
são compiladas e refinadas usando testadores beta. A partir dessa grande coleção, as
perguntas são reunidas de cada objetivo e reunidas em muitas versões diferentes do exame.

Cada exame Oracle tem um número específico de perguntas, e a duração do teste foi
projetada para ser generosa. O tempo restante é sempre exibido no canto da tela de
teste. Se o tempo expirar durante um exame, o teste termina e as respostas incompletas
são consideradas incorretas.

Muitos examinandos experientes não voltam atrás e mudam as respostas, a


menos que tenham uma boa razão para fazê-lo. Só altere uma resposta quando
sentir que pode ter lido ou interpretado mal a pergunta na primeira vez. O
nervosismo pode fazer você adivinhar cada resposta e se convencer de uma
resposta correta.

Após concluir o exame, você receberá um e-mail da Oracle informando que seus
resultados estão disponíveis na Web. A partir do inverno de 2017, seus resultados podem
ser encontrados emcertview.oracle.com. Se pretender uma cópia impressa do seu
certificado, deverá fazer um pedido específico.

Formato da pergunta

Os exames Java da Oracle apresentam questões em formato de múltipla escolha.

Questões de múltipla escolha


Nas versões anteriores do exame, quando você encontrava uma pergunta de múltipla
escolha, não era informado quantas respostas estavam corretas; mas com cada versão
do exame, as questões se tornaram mais difíceis, então hoje, cada questão de múltipla
escolha diz quantas respostas você deve escolher. As perguntas do Autoteste no final
de cada capítulo correspondem ao formato, redação e dificuldade das perguntas do
exame real, com duas exceções:
dificuldade das questões reais do exame, com duas exceções:

Sempre que pudermos, nossas perguntas serão não dizer quantas respostas corretas
existem (nós diremos “Escolha todas as que se aplicam”). Fazemos isso para ajudá-lo a
dominar o material. Alguns examinandos experientes podem eliminar as respostas
erradas quando o número de respostas corretas é conhecido. Também é possível, se você
souber quantas respostas estão corretas, escolher as respostas mais plausíveis. Nosso
trabalho é fortalecê-lo para o exame real!

O exame real normalmente numera linhas de código em uma pergunta. Às vezes, não numeramos
linhas de código - principalmente para termos espaço para adicionar comentários em locais
importantes. No exame real, quando uma listagem de código começa com a linha 1, significa que
você está olhando para um arquivo de origem inteiro. Se uma listagem de código começar em um
número de linha maior que 1, isso significa que você está olhando para um arquivo de origem parcial.
Ao olhar para um arquivo de origem parcial, assuma que o código que você não pode ver está
correto. (Por exemplo, a menos que declarado explicitamente, você pode assumir que um arquivo de
origem parcial terá as instruções de importação e pacote corretas.)

Quando você não conseguir responder a perguntas de múltipla escolha, use seu papel
de rascunho (ou quadro branco) para anotar as duas ou três respostas que você
considera as mais fortes e, em seguida, sublinhe a resposta que você acha que
provavelmente está correta. Aqui está um exemplo de como seu papel de rascunho
pode ficar quando você passou pelo teste uma vez:

21. B ou C
33. A ou C
Isso é extremamente útil quando você marca a pergunta e continua. Você pode
então retornar à pergunta e imediatamente retomar seu processo de
pensamento de onde parou. Use esta técnica para evitar ter que reler e repensar
as perguntas. Você também precisará usar seu papel de rascunho durante
perguntas de cenário complexas baseadas em texto para criar imagens visuais
para entender melhor a pergunta. Essa técnica é especialmente útil se você for
um aprendiz visual.
Dicas para fazer o exame
O número de perguntas e as porcentagens de aprovação para cada exame estão sujeitos a
alterações. Sempre verifique com a Oracle antes de fazer o exame, pelowww.Oracle.com.
Você tem permissão para responder às perguntas em qualquer ordem e pode voltar e
verificar suas respostas depois de passar pelo teste. Não há penalidades para respostas
erradas, então é melhor pelo menos tentar uma resposta do que não dar nenhuma.

Uma boa estratégia para fazer o exame é passar uma vez e responder rapidamente a todas as
perguntas que surgirem. Você pode então voltar e fazer os outros. Responder a uma pergunta
pode estimular sua memória para saber como responder a uma pergunta anterior.

Tenha muito cuidado com os exemplos de código. Verifique se há erros de sintaxe


primeiro: conte chaves, ponto e vírgula e parênteses e, em seguida, certifique-se de que haja
tantos esquerdos quantos direitos. Procure erros de capitalização e outros problemas de
sintaxe antes de tentar descobrir o que o código faz.
Muitas das questões do exame vão depender de sutilezas de sintaxe. Você
precisará ter um conhecimento profundo da linguagem Java para ter sucesso.

Isso nos leva a outra questão que alguns candidatos relataram. O centro de testes deve
fornecer instrumentos de escrita suficientes para que você possa resolver os problemas “no
papel”. Em alguns casos, os centros forneceram marcadores inadequados e lousas que são
muito pequenas e pesadas para serem usadas com eficiência. Recomendamos que você ligue
com antecedência e verifique se será fornecido um quadro branco suficientemente grande,
marcadores com ponta suficientemente fina e uma boa borracha. O que realmente
gostaríamos de encorajar é que todos reclamem com a Oracle e a Pearson VUE e peçam que
eles forneçam lápis de verdade e pelo menos várias folhas de papel em branco.

Dicas para estudar para a prova


Em primeiro lugar, dê-se bastante tempo para estudar. Java é uma linguagem de
programação complexa, e você não pode esperar colocar o que precisa saber em uma única
sessão de estudo. É um campo melhor aprendido ao longo do tempo, estudando um assunto
e depois aplicando seu conhecimento. Construa um cronograma de estudos e cumpra-o, mas
seja razoável sobre a pressão que você coloca em si mesmo, especialmente se estiver
estudando além de seus deveres regulares no trabalho.
Uma técnica fácil de usar ao estudar para os exames de certificação é o 15-
esforço de minutos por dia. Basta estudar por um mínimo de 15 minutos todos os dias. É um
compromisso pequeno, mas significativo. Se você tiver um dia em que simplesmente não
consegue se concentrar, desista em 15 minutos. Se você tiver um dia em que flui
completamente para você, estude mais. Contanto que você tenha mais “dias de fluxo”, suas
chances de sucesso são excelentes.
Recomendamos fortemente que você use cartões de memória flash ao se preparar
para os exames do programador. Um cartão flash é simplesmente um cartão de índice
3 × 5 ou 4 × 6 com uma pergunta na frente e a resposta no verso. Você mesmo
constrói esses cartões à medida que avança em um capítulo, capturando qualquer
tópico que ache que precise de mais memorização ou tempo de prática. Você pode se
aprofundar neles lendo a pergunta, pensando na resposta e depois virando o cartão
para ver se acertou. Ou você pode pedir a outra pessoa para ajudá-lo, segurando o
cartão com a pergunta voltada para você e, em seguida, verificando sua resposta. A
maioria de nossos alunos achou que eles são extremamente úteis, especialmente
porque são tão portáteis que, enquanto você está no modo de estudo, pode levá-los a
qualquer lugar. É melhor não usá-los durante a condução, exceto nos semáforos
vermelhos.
Grupos de estudo de certificação são outro excelente recurso, e você não encontrará uma
comunidade maior ou mais disposta do que no Coderanch. com Fóruns de certificação do Big
Moose Saloon. Se você tiver uma pergunta deste livro, ou qualquer outra pergunta de exame
simulado com a qual tenha se deparado, postar uma pergunta em um fórum de certificação
fornecerá uma resposta em quase todos os casos em um dia, geralmente em algumas horas.

Finalmente, recomendamos que você escreva muitos pequenos programas Java! Durante a
escrita deste livro, escrevemos centenas de pequenos programas, e se você ouvir o que os
candidatos mais bem-sucedidos dizem (você sabe, aqueles caras que conseguiram 98%), eles
quase sempre relatam que escreveram muito código.

Agendando seu exame


Você pode comprar seu voucher de exame da Oracle ou da Pearson VUE. Visita Oracle.com
(siga os links de treinamento/certificação) ou visite PearsonVue.com para detalhes de
agendamento de exames e locais de centros de teste.

Chegando no Exame
Como acontece com qualquer teste, você ficará tentado a empinar na noite anterior. Resista a isso
tentação. Você deve conhecer o material a esta altura e, se estiver grogue
pela manhã, não se lembrará do que estudou. Tenha uma boa noite de
sono.
Chegue cedo para o seu exame; dá-lhe tempo para relaxar e rever os principais factos.
Aproveite para revisar suas anotações. Se você se cansar de estudar, geralmente pode
começar seu exame alguns minutos mais cedo. Não recomendamos chegar tarde. Seu
teste pode ser cancelado ou você pode não ter tempo suficiente para concluir o exame.

Ao chegar ao centro de testes, você precisará fornecer uma identificação com foto válida
e atual. VisitaPearsonVue.com para obter detalhes sobre os requisitos de identificação. Eles
só querem ter certeza de que você não enviará seu brilhante guru de Java ao vizinho que
você pagou para fazer o exame para você.
Além de um cérebro cheio de fatos, você não precisa trazer mais nada para a sala de
exames. Na verdade, seu cérebro é tudo o que você pode levar para o exame!
Todos os testes são de livro fechado, o que significa que você não pode trazer nenhum
material de referência com você. Você também não tem permissão para fazer anotações fora da
sala de exame. O administrador do teste fornecerá a você um pequeno quadro de marcadores. Se
você tiver permissão, recomendamos que você traga uma garrafa de água ou uma garrafa de
suco (ligue com antecedência para obter detalhes sobre o que é permitido). Esses exames são
longos e difíceis, e seu cérebro funciona muito melhor quando está bem hidratado. Em termos de
hidratação, a abordagem ideal é tomar pequenos goles frequentes. Você também deve verificar
quantos “bio-breaks” você poderá fazer durante o exame!
Deixe seu telefone no carro. Isso só aumentará o estresse da situação, já que eles não
são permitidos na sala de exames e, às vezes, ainda podem ser ouvidos se tocarem fora
da sala. Bolsas, livros e outros materiais devem ser deixados com o administrador antes
de entrar no exame.
Uma vez na sala de testes, você será informado sobre o software do exame. Você pode ser
solicitado a preencher uma pesquisa. O tempo que você gasta na pesquisa énão deduzido do seu
tempo real de teste - nem você ganha mais tempo se preencher a pesquisa rapidamente. Além
disso, lembre-se de que as perguntas que você receber no examenão mudam dependendo de
como você responde às perguntas da pesquisa. Assim que você terminar a pesquisa, o relógio real
começa a correr e a diversão começa.
O software de teste permite avançar e retroceder entre as perguntas. Mais
importante ainda, há uma caixa de seleção Marcar na tela – isso provará ser uma
ferramenta crítica, conforme explicado na próxima seção.

Técnicas de realização de testes


Sem um plano de ataque, os candidatos podem ficar sobrecarregados com o exame
ou se desviar e ficar sem tempo. Na maioria das vezes, se você estiver confortável
com o material, o tempo alocado é mais do que suficiente para concluir o exame. O
truque é evitar que o tempo se esgote durante qualquer problema em particular.

Seu objetivo óbvio é responder às perguntas de forma correta e rápida, mas outros fatores
podem distraí-lo. Aqui estão algumas dicas para fazer o exame com mais eficiência.

Aumente o desafio
Primeiro, passe rapidamente por todas as questões do exame. “Escolha” as perguntas
fáceis, respondendo-as na hora. Leia brevemente cada questão, observando o tipo de
questão e o assunto. Como diretriz, tente gastar menos de 25% do seu tempo de
teste nesta passagem.
Esta etapa permite avaliar o escopo e a complexidade do exame e ajuda a determinar
como controlar seu tempo. Também lhe dá uma ideia de onde encontrar possíveis
respostas para algumas das perguntas. Às vezes, a formulação de uma pergunta pode
dar pistas ou estimular seus pensamentos para outra pergunta.
Se você não estiver totalmente confiante em sua resposta a uma pergunta, responda-a de qualquer
maneira, mas marque a caixa Marcar para sinalizá-la para revisão posterior. No caso de você ficar sem tempo,
pelo menos você forneceu uma resposta de “primeiro palpite”, em vez de deixá-la em branco.

Em segundo lugar, volte por todo o teste, usando o insight que você obteve na
primeira passagem. Por exemplo, se o teste inteiro parecer difícil, você saberá que não
deve gastar mais de um minuto ou dois em cada pergunta. Crie um ritmo com pequenos
marcos – por exemplo, “Preciso responder 10 perguntas a cada 15 minutos”.

Nesse estágio, provavelmente é uma boa ideia pular as perguntas demoradas,


marcando-as para a próxima passagem. Tente terminar esta fase antes de completar
50% a 60% do tempo de teste.
Terceiro, volte por todas as perguntas que você marcou para revisão, usando o botão
Revisar Marcado na tela de revisão de perguntas. Esta etapa inclui dar uma segunda
olhada em todas as perguntas que você não tinha certeza nas passagens anteriores, bem
como abordar as demoradas que você adiou até agora. Afaste-se desse grupo de
perguntas até ter respondido a todas.
Se você estiver mais à vontade com uma pergunta marcada anteriormente, desmarque o
botão Revisar Marcado agora. Caso contrário, deixe-o marcado. Trabalhe seu caminho através
das perguntas demoradas agora, especialmente aquelas que exigem manuais
cálculos. Desmarque-os quando estiver satisfeito com a resposta.
Ao final desta etapa, você respondeu a todas as perguntas do teste, apesar de ter
reservas sobre algumas de suas respostas. Se você ficar sem tempo na próxima etapa,
pelo menos não perderá pontos por falta de resposta. Você está em ótima forma se
ainda tiver 10 a 20 por cento do seu tempo restante.

Revise suas respostas


Agora você está viajando! Você respondeu a todas as perguntas e está pronto para fazer uma
verificação de qualidade. Faça mais uma passagem (sim, mais uma) por todo o teste, relendo
brevemente cada pergunta e sua resposta.
Examine cuidadosamente as perguntas novamente para verificar se há perguntas “truque”.
Seja particularmente cauteloso com aqueles que incluem a opção “Não compila”. Esteja alerta
para pistas de última hora. Você está bastante familiarizado com quase todas as perguntas neste
momento e pode encontrar algumas pistas que perdeu antes.

O Grande Final
Quando estiver confiante com todas as suas respostas, termine o exame enviando-o para avaliação.
Após concluir o exame, você receberá um e-mail da Oracle com um link para uma página onde os
resultados do exame estarão disponíveis. No momento da redação deste documento, você deve
solicitar um certificado em cópia impressa especificamente ou um certificado não será enviado a você.

Reteste
Se você não passar no exame, não desanime. Tente ter uma boa atitude sobre a
experiência e prepare-se para tentar novamente. Considere-se um pouco mais
educado. Você conhecerá um pouco melhor o formato do teste e terá uma boa ideia
do nível de dificuldade das perguntas que receberá na próxima vez.
Se você se recuperar rapidamente, provavelmente se lembrará de várias perguntas
que pode ter perdido. Isso o ajudará a concentrar seus esforços de estudo na área certa.

Por fim, lembre-se de que as certificações Oracle são valiosas porque são
difíceis de obter. Afinal, se alguém pudesse obter um, que valor teria? No final, é
preciso uma boa atitude e muito estudo, mas você consegue!
Mapa de Objetivos
A tabela a seguir descreve os objetivos do exame e onde você encontrará
cobertura para eles no livro. (Nota: Resumimos algumas das descrições que
você encontrará noOracle.com local na rede Internet.)

Programador Oracle Certified Associate Java SE 8


(Exam 1Z0-808)
1
Declarações e Controle de Acesso

CERTIFICAÇÃO
OBJETIVOS
• Recursos e benefícios do Java
• Identificadores e Palavras-chave

• javac, java, main() e Imports


• Declarar Classes e Interfaces
• Declarar Membros da Classe
• Declare Construtores e Arrays
• Criar membros de classe estáticos
• Usar enumerações

Exercício de dois minutos

Perguntas e respostas Auto teste

C
Suponhamos que, por estar planejando se tornar certificado, você já
conheça o básico de Java. Se você é completamente novo no idioma,
este capítulo — e o restante do livro — serão confusos; então
certifique-se de que você conhece pelo menos o básico do
linguagem antes de mergulhar neste livro. Dito isso, estamos começando com uma breve
atualização de alto nível para colocá-lo de volta no clima Java, caso você esteja ausente por um
tempo.

Atualização Java
Um programa Java é principalmente uma coleção de objetos falando com outros objetos
invocando os métodos. Todo objeto é de uma certamodelo, e esse tipo é definido por um
classe ou um interface. A maioria dos programas Java usa uma coleção de objetos de muitos
tipos diferentes. A seguir está uma lista de alguns termos úteis para esta linguagem
orientada a objetos (OO):

Classe Um modelo que descreve os tipos de estado e comportamento que os objetos de


seu tipo suportam.

Objeto Em tempo de execução, quando a Java Virtual Machine (JVM) encontra o


novo palavra-chave, ele usará a classe apropriada para criar um objeto que seja uma
instância dessa classe. Esse objeto terá seu próprioEstado e acesso a todos os
comportamentos definidos por sua classe.

Estado (variáveis de instância) Cada objeto (instância de uma classe) terá seu
próprio conjunto exclusivo de variáveis de instância conforme definido na classe.
Coletivamente, os valores atribuídos às variáveis de instância de um objeto Estado.

Comportamento (métodos) Quando um programador cria uma classe, ele cria


métodos para essa classe. Os métodos são onde a lógica da classe é armazenada e
onde o trabalho real é feito. Eles são onde os algoritmos são executados e os dados
são manipulados.

Identificadores e palavras-chave

Todos os componentes Java sobre os quais acabamos de falar - classes, variáveis e métodos
— precisa de nomes. Em Java, esses nomes são chamadosidentificadores, e, como você pode
esperar, existem regras para o que constitui um identificador Java legal. Além do que é
jurídico, porém, os programadores Java (e Oracle) criaram convenções para nomear métodos,
variáveis e classes.
Como todas as linguagens de programação, Java possui um conjunto de palavras-chave. Essas
palavras-chave devemnão ser usados como identificadores. Mais adiante neste capítulo, revisaremos
os detalhes dessas regras de nomenclatura, convenções e palavras-chave Java.

Herança
Central para Java e outras linguagens OO é o conceito de herança, que permite que o
código definido em uma classe ou interface seja reutilizado em outras classes. Em Java,
você pode definir um geral (mais abstrato)superclasse e, em seguida, estendê-lo com
mais específico subclasses. A superclasse nada sabe das classes que
herdam dela, mas todas as subclasses que herdam da superclasse devem declarar
explicitamente o relacionamento de herança. Uma subclasse que herda de uma
superclasse recebe automaticamente variáveis de instância e métodos acessíveis
definidos pela superclasse, mas a subclasse também é livre parasobrepor métodos de
superclasse para definir um comportamento mais específico. Por exemplo, umCarro
superclasse poderia definir métodos gerais comuns a todos os automóveis, mas um
Ferrari subclasse poderia substituir o acelerar() método já definido no Carro
classe.

Interfaces
Um poderoso companheiro para herança é o uso de interfaces. As interfaces são geralmente
como uma superclasse 100% abstrata que define os métodos que uma subclasse deve
suportar, mas não Como as eles devem ser apoiados. Em outras palavras, por exemplo, um
Animal interface pode declarar que todos Animal classes de implementação têm um comer()
método, mas o Animal interface não fornece nenhuma lógica para o
comer() método. Isso significa que cabe às classes que implementam oAnimal
interface para definir o código real de como esse Animal tipo se comporta quando seu
comer() método é invocado. Nota: A partir do Java 8, as interfaces agora podem incluir
métodos concretos e herdáveis. Falaremos muito mais sobre isso quando mergulharmos
em OO no próximo capítulo.

OBJETIVO DE CERTIFICAÇÃO

Recursos e Benefícios do Java (OCA


Objetivo 1.5)
1.5 Comparar e contrastar os recursos e componentes do Java como:
independência de plataforma, orientação a objetos, encapsulamento, etc.

Talvez um ótimo tópico para começar, em nossa cobertura oficial do OCA 8, seja
discutir os vários benefícios que o Java oferece aos programadores. Java já tem mais de
20 anos (uau!) e continua sendo uma das linguagens de programação mais requisitadas
do mundo. Um tanto confuso, existe uma linguagem de nome semelhante,
“JavaScript” (uma implementação do padrão ECMA), que também é uma linguagem
muito popular. Java e JavaScript têm alguns aspectos em comum, mas não devem ser
confundidos; eles são bastante distintos. Vamos olhar para
alguns dos benefícios que o Java oferece aos programadores e compará-los (quando
apropriado) com alguns dos concorrentes do Java. Uma ressalva aqui, muitos desses
benefícios são baseados em tópicos extremamente complexos. Essas descrições não são de
forma alguma definitivas, mas são suficientes para o exame:

Orientado a Objeto À medida que os sistemas de software ficam maiores, eles ficam mais
difíceis de testar e aprimorar. Nas últimas décadas, a programação orientada a objetos
(OO) tem sido a abordagem de projeto de software dominante para grandes sistemas,
porque sistemas OO bem projetados permanecem testáveis e aprimoráveis, mesmo
quando crescem em grandes aplicativos com milhões de linhas de código. O design OO
também oferece uma maneira natural de pensar sobre como os componentes de um
sistema devem ser construídos e como eles devem interagir. As classes, objetos, estado do
sistema e comportamentos em sistemas OO bem projetados são fáceis de mapear
conceitualmente para suas contrapartes no mundo real.

Encapsulamento O encapsulamento é um conceito chave na programação OO. O


encapsulamento permite que um componente de software oculte seus dados de outros
componentes, protegendo os dados de serem atualizados sem a aprovação ou
conhecimento do componente. Java torna o encapsulamento muito mais fácil de alcançar
do que em linguagens não OO.

Gerenciamento de memória Ao contrário de alguns de seus concorrentes (C e C++), Java


fornece gerenciamento automático de memória. Em linguagens que não fornecem
gerenciamento automático de memória, manter o controle da memória por meio de
ponteiros é bastante complexo. Além disso, rastrear bugs relacionados ao gerenciamento
de memória (geralmente chamado deperda de memória) é um processo comum, sujeito a
erros e demorado.

Biblioteca enorme Java tem uma enorme biblioteca de código pré-escrito, bem
testado e bem suportado. Esse código é fácil de incluir em seus aplicativos Java e
está bem documentado por meio da API Java. Ao longo deste livro, exploraremos
alguns dos membros mais usados (e mais úteis) da biblioteca básica padrão do
Java.

Seguro por design Quando o código Java compilado é executado, ele é executado
dentro da Java Virtual Machine (JVM). A JVM fornece uma “sandbox” segura para o seu
código Java ser executado, e a JVM garante que programadores nefastos não possam
escrever código Java que causará problemas nas máquinas de outras pessoas durante
a execução.

Escreva uma vez, execute em qualquer lugar (execução multiplataforma) Um dos objetivos
(em grande parte, mas não perfeitamente alcançado) de Java é que grande parte do código
Java que você escreve pode ser executado em muitas plataformas, desde pequenos
dispositivos de Internet das Coisas (IoT) até telefones, laptops e grandes servidores. Outra
frase comum para essa capacidade de rodar em muitos dispositivos émultiplataforma.

Fortemente tipado Uma linguagem fortemente tipada geralmente requer que o programador
declare explicitamente os tipos de dados e objetos que estão sendo usados no programa. A
tipagem forte permite que o compilador Java detecte muitos erros de programação em
potencial antes mesmo de seu código ser compilado. Na outra extremidade do espectro estão
as linguagens de tipagem dinâmica. As linguagens tipadas dinamicamente podem ser menos
detalhadas, mais rápidas para codificar inicialmente e geralmente são preferidas em
ambientes onde equipes pequenas e prototipagem rápida são a norma. Mas linguagens
fortemente tipadas como Java se destacam em grandes lojas de software com muitas equipes
de programadores e a necessidade de código mais confiável, testável e com qualidade de
produção.

Multithread Java fornece recursos de linguagem e APIs integrados que permitem que os
programas usem muitos processos do sistema operacional (portanto, muitos “núcleos”) ao
mesmo tempo. À medida que os sistemas crescem para lidar com problemas
computacionalmente intensivos e conjuntos de dados maiores, a capacidade de usar todos os
processadores principais de um computador se torna essencial. A programação multithread
nunca é simples, mas o Java fornece um rico kit de ferramentas para torná-lo o mais fácil
possível.

Computação distribuída Outra maneira de resolver grandes problemas de


programação é distribuir a carga de trabalho entre muitas máquinas. A API Java
fornece várias maneiras de simplificar tarefas relacionadas à computação distribuída.
Um tal exemplo éserialização, um processo no qual um objeto Java é convertido em um
formato portátil. Objetos serializados podem ser enviados para outras máquinas,
desserializados e usados como um objeto Java normal.

Novamente, acabamos de arranhar a superfície desses tópicos complexos, mas se você


entender essas breves descrições, deverá estar preparado para lidar com quaisquer
perguntas para esse objetivo. Tanto para a teoria, vamos entrar em detalhes…

OBJETIVO DE CERTIFICAÇÃO

Identificadores e Palavras-chave (Objetivos OCA


1.2 e 2.1)
1.2 Defina a estrutura de uma classe Java.
2.1 Declare e inicialize variáveis (incluindo conversão de tipos de dados primitivos).

Lembre-se que quando listamos um ou mais Objetivos de Certificação no livro, como


acabamos de fazer, significa que a seção a seguir cobre pelo menos parte desse objetivo.
Alguns objetivos serão abordados em vários capítulos diferentes, então você verá o
mesmo objetivo em mais de um lugar no livro. Por exemplo, esta seção cobre declarações
e identificadores, masusando as coisas que você declara são abordadas principalmente
em capítulos posteriores.
Então, vamos começar com identificadores Java. Os dois aspectos dos identificadores Java que
abordamos aqui são

Identificadores legais As regras que o compilador usa para determinar se um


nome é legal.

Convenções de código Java da Oracle Recomendações da Oracle para nomear


classes, variáveis e métodos. Normalmente aderimos a esses padrões em todo o
livro, exceto quando estamos tentando mostrar como uma pergunta complicada do
exame pode ser codificada. Não serão feitas perguntas sobre as Convenções de
Código Java, mas recomendamos fortemente que você as use.

Identificadores Legais

Tecnicamente, os identificadores legais devem ser compostos apenas por caracteres Unicode,
números, símbolos de moeda e caracteres de conexão (como sublinhados). O exame não se
aprofunda nos detalhes de quais intervalos do conjunto de caracteres Unicode se qualificam
como letras e dígitos. Assim, por exemplo, você não precisará saber que os dígitos tibetanos
variam de\u0420 para \u0f29. Aqui estão as regras que vocêFaz precisa saber:

Os identificadores devem começar com uma letra, um caractere de moeda ($), ou um caractere de
conexão, como o sublinhado (_). Os identificadores não podem começar com um dígito!

Após o primeiro caractere, os identificadores podem conter qualquer combinação de


letras, caracteres de moeda, caracteres de conexão ou números.

Na prática, não há limite para o número de caracteres que um identificador pode


conter.
Você não pode usar uma palavra-chave Java como identificador. Tabela 1-1 lista todas as palavras-
chave Java.

TABELA 1-1 Lista completa de palavras-chave Java (afirmar adicionado em 1.4, enumerar
adicionado em 1.5)

Os identificadores em Java diferenciam maiúsculas de minúsculas; foo e FOO são dois identificadores

diferentes.

Seguem exemplos de identificadores legais e ilegais. Primeiro alguns identificadores legais:

Os itens a seguir são ilegais (é seu trabalho reconhecer o motivo):

Convenções de código Java da Oracle


A Oracle estima que durante a vida útil de um código padrão, 20% do esforço será
destinado à criação e teste original do código, e 80% do esforço será destinado à
manutenção e aprimoramento subsequentes do código. Concordar e codificar um
conjunto de padrões de código ajuda a reduzir o esforço envolvido no teste,
manutenção e aprimoramento de qualquer parte do código.
A Oracle criou um conjunto de padrões de codificação para Java e publicou esses padrões em
um documento inteligentemente intitulado “Convenções de Código Java”, que você pode
encontrar se começar em java.oracle.com. É um ótimo documento, curto e fácil de ler, e é
altamente recomendável.
Dito isso, você descobrirá que muitas das perguntas do exame não seguem as convenções
de código devido às limitações do mecanismo de teste usado para entregar o exame
internacionalmente. Uma das grandes vantagens das certificações da Oracle é que os exames
são administrados de maneira uniforme em todo o mundo. Para conseguir isso, as listagens
de código que você verá no exame real geralmente são bastante apertadas e não seguem os
padrões de código da Oracle. Para fortalecer você para o exame, muitas vezes apresentamos
listagens de código que têm uma aparência similarmente limitada, geralmente recuando
nosso código apenas dois espaços em oposição ao padrão Oracle de quatro.

Também juntamos nossas chaves de forma não natural, e às vezes colocamos


várias declarações na mesma linha... ai! Por exemplo:

Considere-se avisado - você verá muitas listagens de código, perguntas simuladas e perguntas
de exame reais que são tão doentias e distorcidas. Ninguém quer que você escreva seu código
assim – nem seu empregador, nem seus colegas de trabalho, nem nós, nem a Oracle, nem a
equipe de criação do exame! Código como este foi criado apenas para que conceitos complexos
pudessem ser testados dentro de uma ferramenta de teste universal. Os únicos padrões quesão
seguidos tanto quanto possível no exame real são os padrões de nomenclatura. Aqui estão os
padrões de nomenclatura que a Oracle recomenda e que usamos no exame e na maior parte do
livro:

Classes e interfaces A primeira letra deve ser maiúscula e, se várias palavras


estiverem vinculadas para formar o nome, a primeira letra das palavras internas
deverá ser maiúscula (um formato que às vezes é chamado
“CameCase”). Para classes, os nomes normalmente devem ser substantivos. aqui estão
alguns exemplos:

Cão
Conta
PrintWriter

Para interfaces, os nomes normalmente devem ser adjetivos, como estes:

Executável
Serializável

Métodos A primeira letra deve ser minúscula e, em seguida, as regras normais do


CamelCase devem ser usadas. Além disso, os nomes normalmente devem ser pares verbo-
substantivo. Por exemplo:

getBalance
doCálculo
definirNomeCliente

Variáveis Assim como os métodos, o formato CamelCase deve ser usado, mas
começando com uma letra minúscula. A Oracle recomenda nomes curtos e
significativos, o que nos parece bom. Alguns exemplos:

largura do botão
saldo da conta
minhaString

Constantes Constantes Java são criadas marcando variáveis como static e final. Eles
devem ser nomeados usando letras maiúsculas com caracteres de sublinhado como
separadores:

MIN_HEIGHT

OBJETIVO DE CERTIFICAÇÃO

Definir Classes (Objetivos OCA 1.2, 1.3, 1.4,


6.4 e 7.5)
1.2 Defina a estrutura de uma classe Java.
1.3 Criar aplicativos Java executáveis com um método main; execute um programa
Java a partir da linha de comando; incluindo a saída do console. (sic)
1.4 Importe outros pacotes Java para torná-los acessíveis em seu código.
6.4 Aplicar modificadores de acesso.
7.5 Use classes e interfaces abstratas.

Quando você escreve código em Java, você está escrevendo classes ou interfaces. Dentro
dessas classes, como você sabe, estão variáveis e métodos (além de algumas outras coisas).
Como você declara suas classes, métodos e variáveis afeta drasticamente o comportamento
do seu código. Por exemplo, umpúblico O método pode ser acessado a partir do código
executado em qualquer lugar em seu aplicativo. Marque esse métodoprivado, porém, e
desaparece do radar de todos (exceto a classe em que foi declarado).
Para isso, estudaremos as formas de declarar e modificar (ou não) uma classe. Você
descobrirá que cobrimos os modificadores com um nível extremo de detalhes e, embora
saibamos que você já está familiarizado com eles, estamos começando desde o início. A
maioria dos programadores de Java pensa que sabe como todos os modificadores funcionam,
mas em um estudo mais aprofundado eles geralmente descobrem que não (pelo menos não
no grau necessário para o exame). Distinções sutis estão por toda parte, então você precisa
ter certeza absoluta de que está completamente sólido em tudo nos objetivos desta seção
antes de fazer o exame.

Regras de declaração do arquivo de origem

Antes de nos aprofundarmos nas declarações de classe, vamos fazer uma rápida revisão das regras
associadas à declaração de classes, importar declarações, e pacote instruções em um arquivo de origem:

Só pode haver um público classe por arquivo de código-fonte.

Os comentários podem aparecer no início ou no final de qualquer linha no arquivo de código-


fonte; eles são independentes de qualquer uma das regras de posicionamento discutidas aqui.

Se lá é uma público classe em um arquivo, o nome do arquivo deve corresponder ao nome


do público classe. Por exemplo, uma classe declarada comoclasse pública Cachorro { } deve estar
em um arquivo de código-fonte chamado Dog.java.

Se a classe for parte de um pacote, o pacote deve ser a primeira linha no arquivo de
código-fonte, antes de qualquer importar declarações que possam estar presentes.
Se houver importar declarações, eles devem ir entre a pacote
declaração (se houver) e a declaração de classe. Se não houver um
pacote declaração, então o importar declaração(ões) deve(m) ser a(s) primeira(s) linha(s)
no arquivo de código-fonte. Se não houverpacote ou importar instruções, a declaração
de classe deve ser a primeira linha no arquivo de código-fonte.

importar e pacote declarações se aplicam a tudo classes dentro de um arquivo de código-


fonte. Em outras palavras, não há como declarar várias classes em um arquivo e tê-las
em pacotes diferentes ou usar importações diferentes.

Um arquivo pode ter mais de um arquivo nãopúblico classe.

Arquivos sem público classes podem ter um nome que não corresponde a nenhuma
das classes no arquivo.

Usando os comandos javac e java


Neste livro, falaremos sobre invocar o javac e Java comanda cerca de 1000 vezes. Embora no
mundo real você provavelmente usará um ambiente de desenvolvimento integrado (IDE)
na maioria das vezes, você poderá ver algumas perguntas no exame que usam a linha de
comando, então vamos revisar o básico. (A propósito, nós NÃO usamos um IDE enquanto
escrevíamos este livro. Ainda temos uma ligeira preferência pela linha de comando
enquanto estudamos para o exame; todos os IDEs fazem o possível para serem “úteis” e,
às vezes, eles consertam seu problemas sem lhe dizer. Isso é bom no trabalho, mas talvez
não tão bom quando você está estudando para um exame de certificação!)

Compilando com javac


O javac O comando é usado para invocar o compilador do Java. Você pode especificar
muitas opções ao executarjavac. Por exemplo, há opções para gerar informações de
depuração ou avisos do compilador. Aqui está a visão geral estrutural para
javac:

javac [opções] [arquivos de origem]

Existem opções de linha de comando adicionais chamadas @argfiles, mas eles


raramente são usados e você não precisará estudá-los para o exame. Tanto o[opções]
e a [Arquivos Fonte] são partes opcionais do comando e ambos permitem
várias entradas. Os seguintes são legaisjavac comandos:
javac -ajuda
javac -version Foo.java Bar.java

A primeira invocação não compila nenhum arquivo, mas imprime um resumo das
opções válidas. A segunda invocação passa ao compilador uma opção (-versão, que
imprime a versão do compilador que você está usando) e passa ao compilador dois
. Javaarquivos para compilar (Foo.java e Bar.java). Sempre que você especificar várias opções e/
ou arquivos, eles devem ser separados por espaços.

Iniciando aplicativos com java


O Java O comando é usado para chamar a Java Virtual Machine (JVM). Aqui está a
estrutura básica do comando:

java [opções] classe [args]

O [opções] e [argumentos] partes de Java comando são opcionais e ambos podem ter
vários valores. Você deve especificar exatamente um arquivo de classe para executar, e o
Java comando assume que você está falando sobre um.classe arquivo, para que você não
especifique o.classe extensão na linha de comando. Aqui está um exemplo:

java -showversion MinhaClasse x 1

Este comando pode ser interpretado como “Mostre-me a versão da JVM que está
sendo usada e, em seguida, inicie o arquivo chamadoMinhaClasse.classe envie duas
String argumentoscujos valores sãoxe 1.” Vejamos o seguinte código:

Ele é compilado e então invocado da seguinte forma:

java MinhaClasse x 1

A saída será

x1
Entraremos em detalhes sobre os arrays mais tarde, mas por enquanto é suficiente saber que os args —
como todos os arrays — usam um índice baseado em zero. Em outras palavras, o primeiro argumento de linha
de comando é atribuído aargumentos[0], o segundo argumento é atribuído aargumentos[1], e assim por diante.

Usando public static void main(String[] args)


O uso do a Principal() O método está implícito na maioria das questões do exame, e no
exame OCA ele é abordado especificamente. Para os 0,0001 por cento de vocês que não
sabem,a Principal() é o método que a JVM usa para iniciar a execução de um programa Java.

Em primeiro lugar, é importante que você saiba que nomear um método a Principal()
não dá os superpoderes que normalmente associamos a Principal(). No que diz respeito
ao compilador e à JVM, osó versão de a Principal() com superpoderes é o a Principal() com
esta assinatura:

public static void main(String[] args)

Outras versões de a Principal() com outras assinaturas são perfeitamente legais, mas são
tratados como métodos normais. Existe alguma flexibilidade na declaração do “especial”a
Principal() método (aquele usado para iniciar uma aplicação Java): a ordem de seus
modificadores pode ser um pouco alterada; aCorda array não precisa ser nomeado
argumentos; e pode ser declarado usando a sintaxe varargs. A seguir estão todas as
declarações legais para o “especial”a Principal():

Para o exame OCA 8, a única outra coisa importante para você saber é que a Principal()
pode ser sobrecarregado. Abordaremos a sobrecarga em detalhes no próximo capítulo.

Instruções de importação e a API Java


Há um zilhão de classes Java no mundo. A API Java tem milhares de classes, e a
comunidade Java escreveu o resto. Vamos arriscar e argumentar que todos os
programadores Java em todos os lugares usam uma combinação de classes que
escreveram e classes que outros programadores escreveram. Suponha que criamos o
Segue:

Esta é uma classe perfeitamente legal, mas como se vê, uma das classes mais usadas na
API Java também é chamada Lista de Matriz, ou assim parece…. O nome real da versão da API
éjava.util.ArrayList. Isso é seunome totalmente qualificado. O uso de nomes totalmente
qualificados é o que ajuda os desenvolvedores Java a garantir que duas versões de uma
classe comoLista de Matriz não se confunda. Então agora vamos dizer que eu quero usar o
Lista de Matriz classe da API:

(Primeiro, confie em nós no <Cadeia> sintaxe; chegaremos a isso mais tarde.) Embora isso seja legal,
também é um monte de pressionamentos de tecla. Já que nós programadores somos basicamente
preguiçosos (já dissemos isso), gostamos MUITO de usar as classes de outras pessoas, E odiamos
digitar. Se tivéssemos um programa grande, poderíamos acabar usandoLista de Matrizs muitas vezes.
importar declarações para o resgate! Em vez do código anterior, nossa classe
poderia ficar assim:

Podemos interpretar o importar declaração como dizendo: “Na API Java existe um
pacote chamado 'útil', e nesse pacote há uma classe chamada 'Lista de Matriz'. Sempre
que você vê a palavra 'Lista de Matriz' nesta classe, é apenas um atalho para:
'java.util.ArrayList'.”
(Nota: muito mais sobre os pacotes por vir!) Se você é um
programador C, você pode pensar que oimportar afirmação é semelhante a um
# incluir. Na verdade, não. Tudo um Javaimportar instrução faz é poupar alguma digitação. É
isso.
Como acabamos de sugerir, um pacote normalmente tem muitas classes. Oimportar
declaração oferece ainda outro recurso de economia de pressionamento de tecla. Digamos
que você queira usar algumas classes diferentes dojava.util pacote: Lista de Matriz e
Conjunto de árvores. Você pode adicionar um caractere curinga (*) para o seu importar declaração que
significa: “Se você vir uma referência a uma classe da qual não tem certeza, poderá examinar o
pacote inteiro dessa classe”, assim:

Quando o compilador e a JVM virem este código, eles saberão examinar


java.util por Lista de Matriz e Conjunto de árvores. Para o exame, a última coisa que você precisa lembrar
sobre o usoimportar declarações em suas classes é que você está livre para misturar e combinar.
Não há problema em dizer isso:

Declarações de importação estáticas

Caro leitor, Nós realmente lutamos para incluir essa discussão sobre importações estáticas. Do
ponto de vista da aprendizagem, este provavelmente não é o local ideal, mas do ponto de vista
de referência, achamos que fazia sentido. Ao aprender o material pela primeira vez, você pode
ficar confuso com algumas das ideias desta seção. Se for o caso, pedimos desculpas. Coloque
uma nota adesiva nesta página e circule de volta depois de terminarCapítulo 3. Por outro lado,
uma vez que você tenha passado do estágio de aprendizado e esteja usando este livro como
referência, achamos que colocar esta seção aqui será bastante útil. Agora, vamos às
importações estáticas.
Às vezes, as classes contêm membros estáticos. (Falaremos mais sobre membros de classe
estáticos mais tarde, mas como estamos no tópico de importações, pensamos em incluir
importações estáticas agora.) Membros de classe estáticos podem existir nas classes que você
escreve e em muitas das classes na API Java.
Como dissemos anteriormente, em última análise, o único valor importar declarações têm é
que elas economizam digitação e podem tornar seu código mais fácil de ler. Em Java 5 (há muito
tempo), oimportar foi aprimorada para fornecer recursos de redução de pressionamento de tecla
ainda maiores, embora alguns argumentem que isso ocorre em
à custa da legibilidade. Esse recurso é conhecido comoimportações estáticas. As importações
estáticas podem ser usadas quando você deseja “salvar digitação” ao usar membros estáticos
de uma classe. (Você pode usar esse recurso em classes na API e em suas próprias classes.)
Aqui está um exemplo de "antes e depois" usando alguns membros de classe estáticos
fornecidos por uma classe comumente usada na API Java,java.lang.Integer. Este exemplo também
usa um membro estático que você usou milhares de vezes, provavelmente sem nunca pensar
muito nele; aFora campo no Sistema classe.
Antes das importações estáticas:

Após importações estáticas:

Ambas as classes produzem a mesma saída:

2147483647
2a

Vejamos o que está acontecendo no código que está usando o recurso de importação
estática:

1. Mesmo que o recurso seja comumente chamado de “importação estática”, a


sintaxe DEVE ser importar estático seguido pelo nome totalmente qualificado do
estático membro que você deseja importar ou um curinga. Nesse caso, estamos
fazendo uma importação estática noSistema classe Fora objeto.

2. Neste caso, podemos querer usar vários dos estático membros de


java.lang.Integer classe. Esta instrução de importação estática usa o curinga para dizer:
“Quero fazer importações estáticas de TODAS asestático membros desta classe”.
3. Agora estamos finalmente vendo o beneficiar do recurso de importação estática! Não
tivemos que digitar oSistema dentro System.out.println! Uau! Em segundo lugar, não tivemos
que digitar ointeiro dentro Inteiro.MAX_VALUE. Então nesta linha de código nós pudemos
usar um atalho para umestático método AND uma constante.
4. Por fim, fazemos mais um atalho, desta vez para um método no inteiro
classe.

Fomos um pouco sarcásticos sobre esse recurso, mas não somos os únicos. Não estamos
convencidos de que valha a pena salvar algumas teclas, possivelmente tornando o código um
pouco mais difícil de ler, mas desenvolvedores suficientes solicitaram que ele fosse adicionado à
linguagem.
Aqui estão algumas regras para usar importações estáticas:

Você deve dizer importar estático; você não pode dizerimportação estática.

Cuidado com nomes ambíguos estático membros. Por exemplo, se você fizer
uma importação estática para ointeiro classe e o Grandes classe, referindo-se
VALOR MÁXIMO causará um erro do compilador, porque ambos inteiro e Grandes
tenha um VALOR MÁXIMO constante e Java não saberá qual VALOR MÁXIMO você está se
referindo.
Você pode fazer uma importação estática em estático referências de objetos,
constantes (lembre-se que são estático e final), e estático métodos.

Como você viu, ao usar instruções estáticas de importação e importação, às vezes você
pode usar o caractere curinga * para fazer algumas pesquisas simples para você. (Você
pode pesquisar dentro de um pacote ou dentro de uma classe.) Como você viu
anteriormente, se você quiser "pesquisar no pacote java.util por nomes de classe", você
pode dizer o seguinte:

De maneira semelhante, se você quiser "pesquisar na classe java.lang.Integer por


membros estáticos", você pode dizer o seguinte:
Mas você não pode criar pesquisas mais amplas. Por exemplo, você NÃO PODE usar
uma importação para pesquisar em toda a API Java:

Declarações e Modificadores de Classe


As declarações de classe que discutiremos nesta seção são limitadas a classes de nível
superior. Além das classes de nível superior, Java fornece outra categoria de classe conhecida
comoclasses aninhadas ou classes internas. As aulas internas estão incluídas no exame OCP,
mas não no exame OCA. Quando você se tornar um candidato OCP, você vai adorar aprender
sobre classes internas. Não mesmo. A sério.
O código a seguir é uma declaração de classe básica:

class MinhaClasse { }

Este código compila muito bem, mas você também pode adicionar modificadores antes da declaração
da classe. Em geral, os modificadores se dividem em duas categorias:

Modificadores de acesso (público, protegido, privado)


Modificadores de não acesso (incluindo strictfp, final, e resumo)

Veremos primeiro os modificadores de acesso, para que você aprenda como restringir ou permitir o
acesso a uma classe que você criou. O controle de acesso em Java é um pouco complicado porque há
quatro acessoscontroles (níveis de acesso), mas apenas três acessos modificadores. O quarto nível de
controle de acesso (chamadopadrão ou pacote access) é o que você obtém quando não usa nenhum
dos três modificadores de acesso. Em outras palavras,todo classe, método e variável de instância que
você declara tem um acesso ao controle, independentemente de você digitar um explicitamente ou não.
Embora todos os quatro acessoscontroles (o que significa todos os três modificadores) funcionam para
a maioria das declarações de métodos e variáveis, uma classe pode ser declarada com apenas público ou
padrão Acesso; os outros dois níveis de controle de acesso não fazem sentido para uma classe, como
você verá.

Java é uma linguagem centrada em pacotes; os desenvolvedores assumiram que para sempre
organização e escopo de nomes, você colocaria todas as suas classes em pacotes. Eles
estavam certos, e você deveria. Imagine este pesadelo: três programadores diferentes, na
mesma empresa, mas trabalhando em partes diferentes de um projeto, escrevem uma
classe chamadaServiços de utilidade pública. Se aqueles trêsServiços de utilidade pública classes não
foram declaradas em nenhum pacote explícito e estão no caminho de classe, você não terá
como dizer ao compilador ou JVM qual dos três você está tentando referenciar. A Oracle
recomenda que os desenvolvedores usem nomes de domínio reversos, anexados com nomes
de divisão e/ou projeto. Por exemplo, se o seu nome de domínio forgeeksanonymous. com e
você está trabalhando no código do cliente para o programa TwelvePointOSteps, você
nomearia seu pacote com algo como
com.geeksanonymous.steps.client. Isso mudaria essencialmente o nome
da sua classe para com.geeksanonymous.steps.client.Utilities. Você pode
ainda terá colisões de nomes dentro de sua empresa se você não criar seus próprios
esquemas de nomenclatura, mas é garantido que você não colidirá com classes
desenvolvidas fora de sua empresa (assumindo que elas sigam a convenção de nomenclatura
da Oracle, e se não o fizerem, bem , Coisas muito ruins podem acontecer).

Acesso à aula
O que significa acessar uma classe? Quando dizemos que o código de uma classe (classe A) tem
acesso a outra classe (classe B), isso significa que a classe A pode fazer uma das três coisas:

Criar um instância da classe B.


Ampliar classe B (em outras palavras, torne-se uma subclasse da classe B).
Acesso certos métodos e variáveis dentro da classe B, dependendo do
controle de acesso desses métodos e variáveis.

Com efeito, os meios de acesso visibilidade. Se a classe A não puderVejo classe B, o


nível de acesso dos métodos e variáveis dentro da classe B não importa; a classe A não
terá como acessar esses métodos e variáveis.

Acesso padrão Uma classe com acesso padrão tem não modificador que o precede na
declaração! É o controle de acesso que você obtém quando não digita um modificador na
declaração da classe. Imaginepadrão acessar como pacote-level access, porque uma classe
com acesso padrão pode ser vista apenas por classes dentro do mesmo pacote. Por exemplo,
se a classe A e a classe B estiverem em pacotes diferentes e a classe A tiver acesso padrão, a
classe B não poderá criar uma instância da classe A ou mesmo declarar uma variável ou tipo
de retorno da classe A. Na verdade, a classe B tem que fingir que a classe A nem existe ou o
compilador reclamará. Veja a seguir
arquivo fonte:

Como você pode ver, a superclasse (Bebida) está em um pacote diferente da


subclasse (Chá). Oimportar declaração no topo do Chá arquivo está tentando (dedos
cruzados) para importar o Bebida classe. OBebida arquivo compila bem, mas quando
tentamos compilar o Chá arquivo, obtemos algo como isto:

(Observação: por vários motivos, as mensagens de erro que mostramos ao longo deste livro
podem não corresponder às mensagens de erro que você recebe. Não se preocupe, o objetivo
real é entender quando você está apto a receber algum tipo de erro.)
Chá não compilará porque sua superclasse, Bebida, tem acesso padrão e está em um
pacote diferente. Você pode fazer uma de duas coisas para fazer isso funcionar. Você
pode colocar as duas classes no mesmo pacote ou pode declararBebida Como
público, como a próxima seção descreve.
Quando você vir uma pergunta com lógica complexa, verifique primeiro os modificadores de
acesso. Dessa forma, se você detectar uma violação de acesso (por exemplo, uma classe no pacote
A tentando acessar uma classe padrão no pacote B), você saberá que o código não será compilado,
então você não precisa se preocupar em trabalhar no lógica. Não é como se você não tivesse nada
melhor para fazer com o seu tempo enquanto faz o exame. Basta escolher a resposta “Falha na
compilação” e ampliar para a próxima pergunta.

Acesso público
Uma declaração de classe com o público palavra-chave dá a todas as classes de todos os
pacotes acesso ao público classe. Em outras palavras,tudo classes no universo Java (JU) têm
acesso a um público classe. Não se esqueça, porém, que se umpúblico classe que você está
tentando usar está em um pacote diferente da classe que você está escrevendo, você ainda
precisará importar o público classe.
No exemplo da seção anterior, podemos não querer colocar o
subclasse no mesmo pacote que a superclasse. Para fazer o código funcionar, precisamos
adicionar a palavra-chavepúblico na frente da superclasse (Bebida) declaração, como segue:

certificado de pacote;
bebida de classe pública { }

Isso altera o Bebida class para que fique visível para todas as classes em todos os pacotes. A
classe agora pode ser instanciada a partir de todas as outras classes, e qualquer classe agora está
livre para subclasse (extensão) dela - a menos que, isto é, a classe também seja marcada com o
modificador nonaccessfinal. Leia.

Outros modificadores de classe (sem acesso)

Você pode modificar uma declaração de classe usando a palavra-chave final, resumo, ou
strictfp.Esses modificadores são adicionais a qualquer controle de acesso na classe,
então você pode, por exemplo, declarar uma classe comopúblico e final. Mas você nem
sempre pode misturar modificadores sem acesso. Você é livre para usarstrictfp em
combinação com final, por exemplo, mas você nunca deve marcar uma classe como
final e resumo. Você verá o porquê nas próximas duas seções.
Você não precisará saber como strictfp funciona, então estamos nos concentrando apenas em
modificar uma classe como final ou resumo. Para o exame, você precisa saber apenas questrictfp é
uma palavra-chave e pode ser usada para modificar uma classe ou um método, mas nunca uma
variável. Marcando uma classe comostrictfp significa que qualquer código de método na classe
obedecerá estritamente às regras padrão IEEE 754 para pontos flutuantes. Sem esse modificador,
os pontos flutuantes usados nos métodos podem se comportar de maneira dependente da
plataforma. Se você não declarar uma classe comostrictfp, você ainda pode obter strictfp
comportamento em uma base de método por método, declarando um método como
strictfp. Se você não conhece o padrão IEEE 754, agora não é a hora de aprendê-lo. Você
tem, como dizem, peixes maiores para fritar.

Aulas Finais
Quando usado em uma declaração de classe, o final palavra-chave significa que a classe não pode ser
subclassificada. Em outras palavras, nenhuma outra classe pode estender (herdar de) umfinal
class, e qualquer tentativa de fazer isso resultará em um erro do compilador.
Então, por que você marcaria uma aula final? Afinal, isso não viola toda a noção OO
de herança? Você deve fazer umfinal class somente se você precisar de uma garantia
absoluta de que nenhum dos métodos dessa classe será substituído. Se você é
profundamente dependente das implementações de certas
métodos, então usando final dá a você a segurança de que ninguém pode mudar a
implementação por baixo de você.
Você notará que muitas classes nas bibliotecas principais do Java são final. Por exemplo, o
Corda classe não pode ser subclassificada. Imagine o caos se você não pudesse garantir como
umCorda object funcionaria em qualquer sistema em que seu aplicativo está sendo executado!
Se os programadores fossem livres para estender oCorda classe (e assim substituir seus novos
Corda instâncias de subclasse onde
java.lang.String casos são esperados), a civilização - como a conhecemos - pode entrar em
colapso. Então usefinal por segurança, mas apenas quando tiver certeza de que seu final
classe realmente disse tudo o que precisa ser dito em seus métodos. Marcando uma aulafinal
significa, em essência, que sua classe nunca pode ser melhorada, ou mesmo especializada,
por outro programador.
Há um benefício em ter classes não finais neste cenário: imagine que você encontre um
problema com um método em uma classe que está usando, mas não tem o código-fonte.
Portanto, você não pode modificar a fonte para melhorar o método, mas pode estender a
classe e substituir o método em sua nova subclasse e substituir a subclasse em todos os
lugares em que a superclasse original for esperada. Se a aula forfinal, porém, você está preso.

Vamos modificar nosso Bebida exemplo, colocando a palavra-chave final na


declaração:

Agora vamos tentar compilar o Chá subclasse:

Na prática, você quase nunca fará uma aula final. Uma aula final elimina um benefício chave
da OO — extensibilidade. A menos que você tenha um problema sério de segurança ou proteção,
assuma que algum dia outro programador precisará estender sua classe. Se você não fizer isso, o
próximo programador forçado a manter seu código irá caçar você
para baixo e <insira uma coisa realmente assustadora>.

Aulas abstratas Um resumo classe nunca pode ser instanciada. Seu único propósito,
missão na vida, razão de ser, é ser estendido (subclassificado). (Observe, no entanto, que
você pode compilar e executar umresumo classe, contanto que você não tente fazer uma
instância dela.) Por que fazer uma classe se você não pode fazer objetos dela? Porque a
classe pode ser muito, bem,resumo. Por exemplo, imagine que você tem uma classeCarro
que possui métodos genéricos comuns a todos os veículos. Mas você não quer que
ninguém crie um resumo genéricoCarro objeto. Como eles inicializariam seu estado? Que
cor seria? Quantos assentos? Potência? Tração nas quatro rodas? Ou mais importante,
como se comportaria? Em outras palavras, como os métodos seriam implementados?

Não, você precisa de programadores para instanciar tipos reais de carros, como BMW Boxster
e Subaru Outback. Apostamos que o dono do Boxster lhe dirá que seu carro faz coisas que o
Subaru pode fazer “apenas em seus sonhos”. Dê uma olhada a seguirresumo
classe:

O código anterior compilará bem. No entanto, se você tentar instanciar umCarro


em outro corpo de código, você receberá um erro de compilador algo como este:

Observe que os métodos marcados resumo terminam em ponto e vírgula em vez


de chaves.
Procure perguntas com uma declaração de método que termine com um ponto e vírgula, em
vez de chaves. Se o método estiver em uma classe - em oposição a uma interface
— então tanto o método quanto a classe devem ser marcados resumo. Você pode receber uma
pergunta que pergunta como você pode corrigir uma amostra de código que inclui um método
terminando em ponto e vírgula, mas sem resumo modificador na classe ou método.
Nesse caso, você pode marcar o método e a classeresumo ou altere o ponto e vírgula
para código (como um par de chaves). Lembre-se que se você alterar um método de
resumo para nonabstract, não se esqueça de alterar o ponto e vírgula no final da
declaração do método para um par de chaves!
Nós vamos olhar resumo métodos em mais detalhes posteriormente neste objetivo,
mas lembre-se sempre que se mesmo um único método for resumo, toda a classe deve ser
declarada resumo. Umresumo método estraga todo o grupo. Você pode, no entanto, colocar
métodos não abstratos em umresumo classe. Por exemplo, você pode ter métodos com
implementações que não devem mudar de tipo de carro para tipo de carro, comogetColor()
ou setPreço(). Ao colocar métodos não abstratos em um
resumo class, você fornece todas as implementações de métodos herdados de subclasses
concretas (concreto significa não abstrato). A boa notícia é que as subclasses concretas
herdam a funcionalidade e precisam implementar apenas os métodos que definem o
comportamento específico da subclasse.
(A propósito, se você acha que usamos mal razão de ser antes, não envie um e-mail. Nós
gostaríamos de vervocês trabalhe-o em um livro de certificação de programador.)
Codificando com resumo tipos de classe (incluindo interfaces, discutidas posteriormente
neste capítulo) permitem que você aproveite polimorfismo e oferece o maior grau de
flexibilidade e extensibilidade. Você aprenderá mais sobre polimorfismo em Capítulo 2.

Você não pode marcar uma classe como ambas resumo e final. Eles têm significados
quase opostos. Umresumo classe deve ser subclassificada, enquanto uma classe final
classe não deve ser subclasse. Se você ver essa combinação deresumo e final
modificadores usados para uma declaração de classe ou método, o código não será compilado.

EXERCÍCIO 1-1

Criando uma superclasse abstrata e uma subclasse concreta

O exercício a seguir testará seus conhecimentos sobre público, padrão, final, e


resumo Aulas. Criar umresumo superclasse nomeada Fruta e uma subclasse concreta
chamada maçã. A superclasse deve pertencer a um pacote chamadoComida
e a subclasse pode pertencer ao pacote padrão (o que significa que não é colocada em
um pacote explicitamente). Faça a superclassepúblico e dê acesso padrão à subclasse.

1. Crie a superclasse da seguinte forma:


embalar alimentos;
public abstract class Fruit{ /* qualquer código que você quiser */}

2. Crie a subclasse em um arquivo separado da seguinte forma:

importar alimentos.Frutas;
class Apple estende Fruit{ /* qualquer código que você quiser */}

3. Crie um diretório chamado Comida fora do diretório em sua configuração de caminho de classe.

4. Tente compilar os dois arquivos. Se você quiser usar omaçã classe, certifique-
se de colocar o Fruit.class arquivo no Comida subdiretório.

OBJETIVO DE CERTIFICAÇÃO

Use Interfaces (OCA Objetivo 7.5)


7.6 Use classes e interfaces abstratas.

Declarando uma interface


Em geral, ao criar uma interface, você está definindo um contrato para que uma
classe pode fazer, sem dizer nada sobre Como as a classe o fará.
Nota: A partir do Java 8, agora você também pode descrever o Como as, mas você normalmente não
vai. Até chegarmos aos novos recursos relacionados à interface do Java 8—padrão e
estático métodos—discutiremos interfaces de uma perspectiva tradicional, que é
novamente, definindo um contrato para que uma classe pode fazer.
Uma interface é um contrato. Você poderia escrever uma interfaceDescartável, por
exemplo, que diz com efeito: “Esta é a Descartável interface. Qualquer tipo de classe
concreta que implemente essa interface deve concordar em escrever o código para o
pulo() e setBounceFactor() métodos."
Ao definir uma interface para Descartável, qualquer classe que queira ser tratada como
Descartável coisa pode simplesmente implementar o Descartável interface e fornecer código
para os dois métodos da interface.
As interfaces podem ser implementadas por qualquer classe, de qualquer árvore de herança.
Isso permite que você faça aulas radicalmente diferentes e dê a elas uma característica comum.
Por exemplo, você pode querer tanto umBola e um Pneu ter comportamento de rejeição, mas Bola e
Pneu não compartilhe nenhuma relação de herança; Bola estende Brinquedo
enquanto Pneu estende apenas java.lang.Object. Mas fazendo ambosBola e Pneu
implemento Descartável, você está dizendo isso Bola e Pneu podem ser tratadas
como “Coisas que podem saltar”, que em Java se traduz em “Coisas nas quais
você pode invocar o pulo() e setBounceFactor() métodos." Figura 1-1 ilustra a
relação entre interfaces e classes.

FIGURA 1-1 A relação entre interfaces e classes


Pense em uma interface tradicional como uma interface 100% resumo classe. Como um
resumo classe, uma interface define métodos abstratos que assumem a seguinte
forma:

Mas embora um resumo classe pode definir tanto resumo e métodos não abstratos, uma
interface geralmente tem apenas resumo métodos. Outra maneira pela qual as interfaces
diferemresumo classes é que as interfaces têm muito pouca flexibilidade em como os
métodos e variáveis definidos na interface são declarados. Essas regras são rígidas:

Os métodos de interface são implicitamente público e resumo, a menos que declarado como
padrão ou estático.
Em outras palavras, você não precisa realmente digitar o
público ou resumo modificadores na declaração do método, mas o método
ainda é sempre público e resumo.
Todas as variáveis definidas em uma interface devem ser público, estático, e final— em outras
palavras, as interfaces podem declarar apenas constantes, não variáveis de instância.

Métodos de interface não podem ser marcados final, strictfp, ou nativo. (Mais sobre esses
modificadores mais adiante no capítulo.)

Uma interface pode ampliar uma ou mais outras interfaces. Uma

interface não pode estender nada além de outra interface. Uma

interface não pode implementar outra interface ou classe. Uma

interface deve ser declarada com a palavra-chaveinterface.


Os tipos de interface podem ser usados polimorficamente (veja Capítulo 2 para mais
detalhes).

A seguir está uma declaração de interface legal:

interface abstrata pública Rollable { }

Digitando no resumo modificador é considerado redundante; interfaces são


implicitamente abstratas se você digitarresumo ou não. Você só precisa saber que
ambas as declarações são legais e funcionalmente idênticas:

public abstract interface Rollable { } public


interface Rollable { }
O público modificador é necessário se você quiser que a interface tenha público em vez de
acesso padrão.
Nós vimos a declaração da interface, mas agora vamos olhar mais de perto os métodos
dentro de uma interface:

Digitando no público e resumo modificadores nos métodos é redundante, no entanto,


uma vez que todos os métodos de interface são implicitamente público e resumo. Dada
essa regra, você pode ver que o código a seguir é exatamente equivalente à interface
anterior:

Você deve lembrar que todos os métodos de interface não declarados padrão ou estático
são público e resumo independentemente do que você vê na definição da interface.
Procure métodos de interface declarados com qualquer combinação de público,
resumo, ou nenhum modificador. Por exemplo, as cinco declarações de métodos a seguir, se
declaradas dentro de suas próprias interfaces, são válidas e idênticas!

As seguintes declarações de método de interface não serão compiladas:

Declarando Constantes de Interface


Você tem permissão para colocar constantes em uma interface. Ao fazer isso, você garante que
qualquer classe que implemente a interface terá acesso à mesma constante. Ao colocar as
constantes diretamente na interface, qualquer classe que implementa a interface tem
acesso direto às constantes, como se a classe as tivesse herdado.
Você precisa se lembrar de uma regra chave para constantes de interface. Eles devem sempre
ser

público estático final

Então isso parece simples, certo? Afinal, as constantes de interface não são diferentes de quaisquer
outras constantes publicamente acessíveis, então elas obviamente devem ser declaradas
público, estático, e final. Mas antes de passar rapidamente pelo resto desta discussão, pense
nas implicações:Como as constantes de interface são definidas em uma interface,
elas não precisam ser declarado Como público, estático, ou
final.
Eles devem serpúblico, estático, e final, mas você não precisa declará-los
dessa maneira. Assim como os métodos de interface são sempre público e
resumo quer você diga isso no código ou não, qualquer variável definida em uma interface deve ser
- e implicitamente é - um público constante. Veja se você consegue identificar o problema com o
seguinte código (suponha dois arquivos separados):

Você não pode alterar o valor de uma constante! Uma vez que o valor foi atribuído, o
valor nunca pode ser modificado. A atribuição acontece na própria interface (onde a
constante é declarada), então a classe implementadora pode acessá-la e usá-la, mas
como um valor somente leitura. Então oBAR = 27 atribuição não irá compilar.

Procure definições de interface que definam constantes, mas sem usar explicitamente
os modificadores necessários. Por exemplo, os seguintes são todos idênticos:
Qualquer combinação dos modificadores necessários (mas implícitos) é legal, assim
como não usar nenhum modificador! No exame, você pode esperar ver perguntas que
não poderá responder corretamente a menos que saiba, por exemplo, que uma
variável de interface é final e nunca pode receber um valor pela classe de
implementação (ou qualquer outra).

Declarando padrão Métodos de interface


A partir do Java 8, as interfaces podem incluir métodos herdáveis* com implementações
concretas. (*A definição estrita de “herança” ficou um pouco confusa com o Java 8; falaremos
mais sobre herança emCapítulo 2.) Esses métodos concretos são chamados padrão métodos.
No próximo capítulo falaremos muito sobre as várias regras relacionadas a OO que são
impactadas por causa depadrão métodos. Por enquanto, abordaremos apenas as regras de
declaração simples:

padrão métodos são declarados usando o padrão palavra-chave. O


padrão A palavra-chave pode ser usada apenas com assinaturas de métodos de interface, não com
assinaturas de métodos de classe.

padrão métodos são público por definição, e o público modificador é


opcional.
padrão métodos não pode ser marcado como privado, protegido, estático,
final, ou resumo.
padrão métodos devem ter um corpo de método concreto.

Aqui estão alguns exemplos de legal e ilegal padrão métodos:


Declarando estático Métodos de interface
A partir do Java 8, as interfaces podem incluir estático métodos com implementações concretas.
Com a interfacepadrão métodos, há implicações OO que discutiremos em Capítulo 2. Por
enquanto, vamos nos concentrar nos conceitos básicos de declaração e usoestático métodos de
interface:

estático métodos de interface são declarados usando o estático palavra-chave.

estático métodos de interface são públicos por padrão, e o público modificador é


opcional.

estático métodos de interface não podem ser marcados como privado, protegido,
final, ou resumo.
estático métodos de interface devem ter um corpo de método concreto.

Ao invocar um estático interface, o tipo do método (nome da


interface) DEVE ser incluído na invocação.

Aqui estão alguns exemplos de métodos de interface estática legais e ilegais e seu uso:
que produz esta saída:

42
42

Como dissemos anteriormente, voltaremos à nossa discussão sobre padrão métodos e


estático métodos para interfaces em Capítulo 2.

OBJETIVO DE CERTIFICAÇÃO

Declarar Membros da Classe (Objetivos OCA


2.1, 2.2, 2.3, 4.1, 4.2, 6.2, 6.3 e 6.4)
2.1 Declare e inicialize variáveis (incluindo conversão de tipos de dados primitivos).
2.2 Diferencie entre variáveis de referência de objeto e variáveis primitivas.
2.3 Saber ler ou escrever em campos de objetos.
4.1 Declare, instancie, inicialize e use um array unidimensional.
4.2 Declare, instancie, inicialize e use array multidimensional. (sic)
6.2 Aplique a palavra-chave static a métodos e campos.
6.3 Criar e sobrecarregar construtores; incluindo impacto nos construtores padrão.
(sic)
6.4 Aplicar modificadores de acesso.

Vimos o que significa usar um modificador em uma declaração de classe e


agora veremos o que significa modificar um método ou declaração de variável.
Métodos e variáveis de instância (não locais) são coletivamente conhecidos como
membros. Você pode modificar um membro com modificadores de acesso e não acesso e
tem mais modificadores para escolher (e combinar) do que quando declara uma classe.

Modificadores de acesso

Como os membros de método e variável geralmente recebem controle de acesso


exatamente da mesma maneira, abordaremos ambos nesta seção.
Considerando que um classe pode usar apenas dois dos quatro níveis de controle de acesso (padrão ou
público), os membros podem usar todos os quatro:

público

protegido

padrão
privado

A proteção padrão é o que você obtém quando não digita um modificador de acesso na
declaração do membro. O padrão eprotegido os tipos de controle de acesso têm
comportamento quase idêntico, exceto por uma diferença que mencionaremos mais adiante.
Nota: A partir do Java 8, a palavra padrão TAMBÉM pode ser usado para declarar certos
métodos em interfaces. Quando usado na declaração de método de uma interface,padrão
tem um significado diferente do que estamos descrevendo no restante deste capítulo.
É crucial que você conheça o controle de acesso interno e externo para o exame. Haverá
algumas perguntas onde o controle de acesso desempenha um papel. Algumas perguntas testam
vários conceitos de controle de acesso ao mesmo tempo, portanto, não conhecer uma pequena
parte do controle de acesso pode significar que você estraga uma pergunta inteira.

O que significa para o código em uma classe ter acesso a um membro de outra
classe? Por enquanto, ignore quaisquer diferenças entre métodos e variáveis. Se a classe
A tem acesso a um membro da classe B, significa que o membro da classe B é visível
para a classe A. Quando uma classe não tem acesso a outro membro, o

Você também pode gostar