Baixar Capítulo

Propaganda
Parte I
Elementos
Fundamentais
do Java
CAPÍTULOS
1
Empacotando, Compilando e Interpretando o
Código Java
2
Programando com Instruções Java
3
Programando com Operadores e Strings Java
1
Empacotando,
Compilando e
Interpretando o
Código Java
OBJETIVOS DA CERTIFICAÇÃO
∑∑
Compreender os Pacotes
∑∑
Compreender as Classes
Derivadas de Pacotes
P&RTeste Individual
∑∑
Compilar e Interpretar Código
Java
Exercícios Rápidos
4
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
C
omo está lendo este livro, seja na forma impressa ou eletrônica, você deve
ter uma afinidade com Java. Você também deve ter vontade de anunciar para
todo mundo através do processo para a Certificação Sun Java Associado que
é um verdadeiro conhecedor de Java. Sendo assim, você deve ser – ou quer ser – um
programador Java e, no longo prazo, um verdadeiro desenvolvedor Java. Você deve
ser, ou planeja ser, um gerente de projetos, que lidera uma equipe de programadores
e/ou desenvolvedores Java. Neste caso, você precisará ter um conhecimento básico da
linguagem Java e suas tecnologias. Seja qual for o caso, este livro é para você.
Para começar, você deve estar pensando nos principais elementos funcionais
oferecidos pela plataforma básica do Java Standard Edition com relação a
bibliotecas e utilitários, além de como estes elementos estão organizados. Este
capítulo responde a estas perguntas falando sobre os pacotes e classes Java,
juntamente com seus processos de empacotamento, compilação e interpretação.
Ao terminar este capítulo, você terá um bom entendimento do empacotamento
das classes Java, detalhes em alto nível dos pacotes Java SE mais comuns, e os
fundamentos das ferramentas de compilação e interpretação Java.
OBJETIVO DA CERTIFICAÇÃO
Compreendendo os Pacotes
Objetivo do Exame 5.1 Descrever o objetivo de pacotes na linguagem Java e
reconhecer o uso apropriado das instruções import e package.
O empacotamento é uma abordagem comum usada para organizar classes e
interfaces relacionadas. O código mais reutilizável é empacotado. As classes não
empacotadas geralmente são encontradas em livros e tutoriais on-line, bem como
em aplicativos de software com foco mais estreito. Esta seção mostrará a você como
e quando empacotar suas classes Java e como importar classes externas a partir de
seus pacotes Java. Os seguintes assuntos serão abordados:
� Design do pacote
� Instruções package e import
Compreendendo os Pacotes
5
Design do Pacote
Os pacotes são vistos como recipientes para classes, mas, na verdade, eles definem
a localização das classes na estrutura hierárquica dos diretórios. Os pacotes são
incentivados pelos padrões de codificação Java para diminuir a probabilidade
de colisão de classes. Empacotar suas classes também promove a reutilização do
código, a sustentabilidade e o princípio orientado a objetos do encapsulamento e da
modularidade.
Ao criar pacotes Java, como o agrupamento de classes, as seguintes áreas
(mostradas na Tabela 1-1) devem ser consideradas.
Vamos dar uma olhada em um exemplo real. Como gerente de programas,
você precisa de dois grupos de classes com funcionalidade exclusiva, e que serão
usados pelo mesmo produto final. Você pede que o Desenvolvedor A construa o
primeiro grupo, e que o Desenvolvedor B construa o segundo. Você não define
os nomes das classes, mas define o objetivo do pacote e o que ele deve conter. O
Desenvolvedor A deve criar diversas classes baseadas em geometria, inclusive uma
classe ponto, uma classe polígono e uma classe plano. O Desenvolvedor B deve
construir classes que serão incluídas para simulação, incluindo objetos como balões
de ar quente, helicópteros e aviões. Você pede que eles construam suas classes
(sem pedir que eles as empacotem). No momento da entrega, os dois entregam
uma classe chamada Plane.java – isto é, um para a classe plano e outro para
a classe avião. Agora, você tem um problema, pois os dois arquivos de origem (que
também são arquivos de classe) não podem coexistir no mesmo diretório, pois eles
têm o mesmo nome. A solução é o empacotamento. Se você tivesse indicado nomes
de pacotes para os desenvolvedores, este conf lito nunca teria acontecido (como
mostra a Figura 1-1). A lição aprendida é: sempre empacote seu código, a menos
que seu projeto de codificação seja trivial por natureza.
TABELA 1-1
Atributo do Pacote
Benefícios de Aplicar o Atributo do
Pacote
Considerações
sobre os
Atributos do
Pacote
Acoplamento de Classe
As dependências do pacote são reduzidas com o
acoplamento de classe.
Acoplamento de Sistema
As dependências do pacote são reduzidas com o
acoplamento de sistema.
Tamanho do Pacote
Tipicamente, pacotes maiores suportam
reutilização, enquanto pacotes menores suportam
sustentabilidade.
Sustentabilidade
Geralmente, as alterações no software podem ser
limitadas a um único pacote quando este abriga a
funcionalidade principal.
Nome
Considere usar convenções ao nomear seus
pacotes. Use o nome do domínio ao contrário para
a estrutura do pacote. Use caracteres minúsculos
delimitados por underscores para separar as
palavras nos nomes de pacotes.
6
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
FIGURA 1-1
Empacotamento separado de classes com os mesmos nomes
com.scjaexam.geometry
com.scjaexam.simulator
Plano
Ponto
Plano
Polígono
BalãoArQuente
Helicóptero
Instruções package e import
Você já deve ter uma ideia geral de quando e por que empacotar seus arquivos
fonte. Agora, você precisa saber exatamente como fazer isso. Para colocar um
arquivo fonte em um pacote, use a instrução package no início do arquivo. Você
pode usar zero ou uma instrução package por arquivo fonte. Para importar
classes de outros pacotes para seu arquivo fonte, utilize a instrução import. O
pacote java.lang, que abriga as principais classes da linguagem, é importado
por padrão.
A listagem de código a seguir mostra o uso das instruções package e
import. Você pode voltar a esta listagem enquanto discutimos as instruções
package e import com mais detalhes ao longo do capítulo.
package com.scjaexam.tutorial; // Instrução package
/* Importa a classe ArrayList do pacote java.util */
import java.util.ArrayList;
//* Importa todas as classes do pacote java.io */
import java.io.*;
public class MainClass {
public static void main(String[] args) {
/* Cria console a partir do pacote java.io */
Console console = System.console();
String planet = console.readLine(“\nEnter your
favorite planet: “);
/* Cria lista de planetas */
ArrayList planetList = new ArrayList();
planetList.add(planet); // Adiciona as entradas
dos usuários à lista planetList.add(“Gliese 581 c”);
// Adds a string to the list
System.out.println(“\nTwo cool planets: “ + planetList);
}
}
$ Digite seu planeta preferido: Júpiter
$ Dois planetas legais: [Júpiter, Gliese 581 c]
Compreendendo os Pacotes
7
A Instrução package
A instrução package inclui a palavra-chave package seguida pelo caminho do
pacote delimitado por pontos. A Tabela 1-2 mostra exemplos válidos de instruções
package. As instruções package têm os seguintes atributos:
� As instruções package são opcionais.
� As instruções package são limitadas a uma por arquivo fonte.
� A convenção padrão de codificação para as instruções package inverte
o nome da organização ou grupo que cria o pacote. Por exemplo: os
proprietários do nome de domínio scjaexam.com podem usar
o seguinte nome para um pacote de utilitários: com.scjaexam.
utilities.
�Os nomes dos pacotes são similares a estruturas de diretório. O nome
de pacote com.scjaexam.utils seria equivalente ao diretório com/
scjaexam/utils.
� Os nomes dos pacotes que começam com java.* e javax.* são
reservados para uso da JavaSoft, a unidade comercial da Sun Microsystems
responsável pelas tecnologias Java.
� Os nomes dos pacotes devem ser em letra minúscula. As palavras dentro
do nome do pacote devem ser separadas por underscores.
A API Java SE contém diversos pacotes. Estes pacotes estão detalhados na
documentação JavaDoc Online da Sun no endereço http://java.sun.com/
javase/6/docs/api.
Os pacotes mais comuns que você encontrará no exame são os pacotes da API
Java Abstract Windows Toolkit, a API Java Swing, a API Java Basic Input/Output,
a API Java Networking, a API Java Utilities, e a API da Linguagem Java. Você terá
que conhecer a funcionalidade básica de cada pacote/API.
A Instrução import
Uma instrução import permite a você incluir o código-fonte de outras classes em
um arquivo fonte no momento da compilação. No J2SE 1.4, a instrução
TABELA 1-2
Instrução package
Estrutura de Diretório
Relacionada
Instruções package
Válidas
package java.net;
[directory_path]\java\net\
package com.scjaexam. [directory_path]\com\scjaexam\
utilities;
utilities\
package package_name; [directory_path]\package_name\
8
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
SITUAÇÃO & SOLUÇÃO
Para pintar gráficos e imagens básicas, qual
pacote deve ser usado?
Para criar componentes leves para a GUI, qual
pacote deve ser usado?
Para utilizar f luxos de dados, qual pacote deve
ser usado?
Para desenvolver um aplicativo de rede, qual
pacote deve ser usado?
Para trabalhar com framework, modelos de
evento e ferramentas de data e hora, qual
pacote deve ser usado?
Para utilizar as principais classes e interfaces
Java, qual pacote deve ser usado?
Você precisa usar o pacote Java com a API
do AWT.
Você precisa usar o pacote Java com API
do Swing.
Você precisa usar o pacote Java com I/O
Básico.
Você precisa usar o pacote Java com a API
de Rede.
Você precisa usar o pacote Java com a API
de Utilitários.
Você precisa usar o pacote com núcleo da
Linguagem Java.
import inclui a palavra-chave import seguida pelo caminho do pacote,
delimitado por pontos, e termina com um nome de classe ou um asterisco, como
mostra a Tabela 1-3. Estas instruções import ocorrem após a instrução package
opcional e antes da definição de classe. Cada instrução import só pode se
relacionar a um pacote.
TABELA 1-3
Instruções import
Válidas
Instrução import
Definição
import java.net.*;
Importa todas as classes do pacote
java.net.
import java.net.URL; Importa apenas a classe URL do pacote
import static java.
awt.Color.*;
import static
java.awt.color.
ColorSpace.CS_GRAY;
java.net.
Importa todos os membros estáticos da
classe Color do pacote java.awt
(somente do J2SE 5.0 em diante).
Importa o membro estático CS_GRAY
da classe Color do pacote java.awt
(somente a partir do J2SE 5.0).
Compreendendo os Pacotes
9
Para facilitar a manutenção, é melhor fazer a importação explícita de
suas classes. Isto permitirá que o programador determine rapidamente
quais classes externas são usadas na classe. Como exemplo, em vez de
usar import java.util.*, use import java.util.Vector. Neste
exemplo real, o codificador poderia ver rapidamente que a classe só
importa uma classe e que se trata de um tipo collection. Neste caso, tratase de um tipo de herança, e a determinação para atualizar a classe com
um tipo collection mais novo poderia ser executada rapidamente..
Os programadores de C e C++ verão algumas similaridades entre a instrução
import do Java e a instrução #include do C/C++, embora não haja uma
correspondência direta na funcionalidade.
As importações estáticas são um recurso novo no Java SE 5.0.
Elas permitem que você importe membros estáticos. As instruções do exemplo
a seguir seriam válidas no Java SE 5.0, mas não no J2SE 1.4.
/* Importar membro estático ITALY */
import static java.util.Locale.ITALY;
/* Importa todos os membros estáticos da classe Locale */
import static java.util.Locale.*;
EXERCÍCIO 1-1
Substituindo Instruções import Implícitas por Instruções import
Explícitas
Considere a seguinte amostra de aplicativo:
import
import
import
import
java.io.*;
java.text.*;
java.util.*;
java.util.logging.*;
public class TestClass {
public static void main(String[] args) throws IOException {
10
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
}
}
/* Verificar se o diretório foi criado */
new File(“logs”).mkdir();
/* Obter a data a ser usada em filename */
DateFormat df = new SimpleDateFormat(“yyyyMMddhhmmss”);
Date now = new Date();
String date = df.format(now);
/* Configurar filename no diretório logs */
String logFileName = “logs\\testlog-” + date + “.txt”;
/* Configurar Logger */
FileHandler myFileHandler = new FileHandler(logFileName);
myFileHandler.setFormatter(new SimpleFormatter());
Logger scjaLogger = Logger.getLogger(“SCJA Logger”);
scjaLogger.setLevel(Level.ALL);
scjaLogger.addHandler(myFileHandler);
/* Mensagem Log */
scjaLogger.info(“\nThis is a logged information message.”);
/* Fechar o arquivo */
myFileHandler.close();
Pode haver importações implícitas que permitem que todas as classes necessárias
de um pacote sejam importadas.
import java.io.*; // Exemplo de importação implícita
Pode haver importações explícitas que só permitem que a classe ou interface
designada de um pacote seja importada.
import java.io.File; // Exemplo de importação explícita
Este exercício fará com que você utilize as instruções import explícitas
no lugar das instruções import implícitas em todas as classes necessárias
da aplicação do exemplo. Se você ainda não sabe como compilar e interpretar
programas Java, termine este capítulo e volte para este exercício. Caso contrário,
vamos começar.
1. Digite a aplicação do exemplo em um novo arquivo e dê a ele o nome
TestClass.java. Salve o arquivo.
2. Compile e execute o aplicativo para certificar-se de ter criado o conteúdo
do arquivo sem erros; javac TestClass.java para compilar, java
TestClass para executar. Verifique se a mensagem de registro aparece
na tela. Além disso, verifique se um arquivo foi criado no subdiretório logs
com a mesma mensagem.
Compreendendo as Classes Derivadas de Pacotes
11
3. Comente todas as instruções import.
//import
//import
//import
//import
java.io.*;
java.text.*;
java.util.*;
java.util.logging.*;
4. Compile o aplicativo; javac TestClass.java. Você verá vários
erros de compilação relacionados às importações das classes ausentes.
Como exemplo, a ilustração a seguir demonstra os erros que são
visualizados quando apenas o pacote java.io é comentado.
5. Para cada classe que não pode ser encontrada, utilize a especificação online da API Java para determinar a qual pacote ela pertence e, em seguida,
atualize o arquivo fonte com a instrução import explícita necessária. Feito
isso, você terá substituído as quatro instruções import implícitas por nove
instruções import explícitas.
6. Execute o aplicativo novamente para garantir que ele funcione da mesma
forma com as importações explícitas e implícitas.
OBJETIVO DA CERTIFICAÇÃO
Compreendendo as Classes
Derivadas de Pacotes
Objetivo do Exame 5.3 Descrever o objetivo e os tipos de classes dos seguintes
pacotes Java: java.awt, javax.swing, java.io, java.net, java.util.
12
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
A Sun possui mais de 100 pacotes na API Java SE. Cada pacote tem um foco
específico. Felizmente, você só precisa conhecer alguns deles para o exame SCJA.
Entre eles estão os pacotes de utilitários Java, entrada/saída básica, redes, AWT e
Swing.
�API Java Utilities
� API Java Basic Input/Output
� API Java Networking
� API Java Abstract Window Toolkit
� API Java Swing
API Java Utilities
A API Java Utilities fica dentro do pacote java.util. Esta API fornece
funcionalidade para várias classes utilitárias. As principais classes e interfaces da
API podem ser divididas em várias categorias. As categorias das classes que podem
aparecer no exame incluem o Java Collections Framework, ferramentas de data e
hora, internacionalização e algumas classes utilitárias diversas.
Dentre estas categorias, o Java Collections Framework tem mais peso, já que é
usado com frequência e fornece as estruturas de dados fundamentais necessárias à
construção de bons aplicativos Java. A Tabela 1-4 detalha as classes e interfaces da
API Collections que podem aparecer no exame.
Para ajudar as coleções a determinar onde a ordem não é natural, a API
Collections fornece a interface Comparator. De modo similar, a interface
Comparable que reside no pacote java.lang é usada para ordenar objetos
em sua ordem natural.
TABELA 1-4
Diversas
Classes do Java
Collections
Framework
Interface
Implementações
Descrição
List
ArrayList,
LinkedList, Vector
Estruturas de dados baseadas no
acesso posicional.
Map
Set
Queue
HashMap,
Hashtable,
LinkedHashMap,
TreeMap
HashSet,
LinkedHashSet,
TreeSet
PriorityQueue
Estruturas de dados que
direcionam chaves para valores.
Estruturas de dados baseadas na
exclusividade de elementos.
Enfileira elementos de ordem de
modo FIFO. As filas de prioridade
ordenam os elementos de acordo
com um comparador fornecido.
Compreendendo as Classes Derivadas de Pacotes
13
Várias outras classes e interfaces residem no pacote java.util. Ferramentas
de data e hora são representadas pelas classes Date, Calendar e TimeZone.
As regiões geográficas são representadas pela classe Locale. A classe Currency
representa as moedas correntes pelo padrão ISO 4217. Um gerador de números
aleatórios é fornecido pela classe Random. E StringTokenizer divide strings
em tokens. Existem muitas outras classes em java.util, mas estas (e interfaces
e classes collections) são as que têm mais probabilidade de aparecer no exame. As
classes discutidas no início estão representadas na Figura 1-2.
Muitos pacotes têm classes e interfaces relacionadas com funcionalidade
exclusiva, e que são incluídas em seus próprios pacotes secundários.
Por exemplo: as expressões regulares são armazenadas em um pacote
secundário do pacote de utilitários Java (java.util). O pacote secundário
chama-se java.util.regex e abriga as classes Matcher e Pattern. Quando
necessário, considere a criação de pacotes secundários para seus projetos.
FIGURA 1-2
Diversas classes utilitárias
14
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
API Java Basic Input/Output
A API Java Basic Input/Output fica dentro do pacote java.io. Esta API fornece
a funcionalidade para as entradas e saídas do sistema em relação a f luxo de
dados, serialização e o sistema de arquivos. As classes de f luxo de dados incluem
subclasses de f luxo de bytes das classes InputStream e OutputStream. As
classes de f luxo de dados também incluem subclasses de f luxo de caracteres das
classes Reader e Writer. A Figura 1-3 ilustra parte da hierarquia de classe para
as classes abstratas Reader e Writer.
Outras classes e interfaces importantes de java.io incluem File,
FileDescriptor, FilenameFilter e RandomAccessFile. A
classe File fornece uma representação dos caminhos de arquivos e diretórios.
A classe FileDescriptor fornece um meio para funcionar como uma
alavanca para abrir arquivos e dispositivos. A interface FilenameFilter,
como o nome diz, define a funcionalidade de filtrar nomes de arquivos. A classe
RandomAccessFile permite a leitura e gravação de arquivos em locais
específicos.
API Java Networking
A API Java Networking está localizada dentro do pacote java.net. Esta
API fornece funcionalidade no suporte à criação de aplicativos de rede. As
principais classes e interfaces desta API estão representadas na Figura 1-4. Você
provavelmente não verá algumas destas classes no exame, mas a figura ajuda você
a conceitualizar o que faz parte do pacote java.net. O pacote de desempenho
melhorado da API New I/O (java.nio), que fornece uma rede sem bloqueios e
o pacote de suporte para dispositivos (javax.net), não estão no exame.
FIGURA 1-3
Hierarquia das classes Reader e Writer
java.io
Reader
BufferedReader
InputStreamReader
FileReader
Writer
FilterReader
BufferedWriter
OutputStreamWriter
FileWriter
FilterWriter
Compreendendo as Classes Derivadas de Pacotes
FIGURA 1-4
15
Várias classes da API Java Networking
java.net
Socket
ServerSocket
Auxilia na
implementação de
dispositivos clientes
Auxilia na
implementação de
dispositivos
servidores
URL
Inet4Address
Representa um
Uniform Resource
Locator (URL)
Representa um
endereço Internet
Protocol versão
4 (IPv4)
API Java Abstract Window Toolkit
A API Java Abstract Window Toolkit fica dentro do pacote java.awt. Esta API
fornece funcionalidade para criar componentes pesados relacionados à criação de
interfaces de usuário e à pintura de gráficos e imagens associados. A API AWT
era a API GUI original do Java e foi substituída pela API Swing. Nos pontos onde
se recomenda o uso de Swing, certas partes da API AWT ainda são usadas com
frequência, como o subsistema AWT Focus, que foi retrabalhado no J2SE 1.4. O
subsistema AWT Focus auxilia no controle de navegação entre componentes. A
Figura 1-5 ilustra os principais elementos AWT.
API Java Swing
A API Java Swing fica no pacote javax.swing. Esta API fornece funcionalidade
para criar recipientes e componentes leves (Java puro). A API Swing substituiu a
API AWT. Muitas das novas classes simplesmente receberam a letra “J” no início,
em contraste com o componente de herança equivalente em AWT.
FIGURA 1-5
Principais
elementos AWT
java.awt
AWT Heavyweight
Component API
AWT Focus
Subsystem
16
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
SITUAÇÃO & SOLUÇÃO
Você precisa criar componentes Java Swing
básicos, como botões, painéis e janelas. Informe
o código para importar as classes necessárias de
um pacote.
// API Java Swing API importar
pacote javax.swing.*;
Você precisa suportar aspectos relacionados a
texto de seus componentes Swing. Informe o
código para importar as classes necessárias de um
pacote.
// API Java Swing importar pacote
secundário de texto javax.swing.
text.*;
Você precisa implementar e configurar um
suporte básico a pluggable look-and-feel. Informe
o código para importar as classes necessárias de
um pacote.
// API Java Swing importar pacote
secundário plaf javax.swing.
plaf.*;
Você precisa usar os listeners e adaptadores
de eventos do Swing. Informe o código para
importar as classes necessárias de um pacote.
// API Java Swing importar pacote
secundário de evento javax.swing.
event.*;
Por exemplo: o Swing usa a classe JButton para representar um container botão,
enquanto AWT usa a classe Button.
O Swing também tem suporte a look-and-feel, permitindo alterações
universais no estilo dos componentes da GUI. Outros recursos incluem tooltips,
funcionalidade para acessibilidade, um modelo de evento e componentes
melhorados, como tabelas, árvores, componentes textuais, barras e barras de
progresso. Algumas das principais classes da API Swing estão representadas na
Figura 1-6. Consulte o Capítulo 11 para obter mais informações sobre a API Swing
como solução para interface de usuário no cliente.
FIGURA 1-6
Várias classes da API Swing
Javax.swing
JDialog
JTextComponent
JTextArea
JComponent
JPanel
JFrame
JLabel
JToolTip
JTable
JMenuBar
AbstractButton
JButton
Compreendendo as Classes Derivadas de Pacotes
17
A API Swing faz excelente uso dos pacotes secundários, sendo que há 16 deles
no Java SE 6. Como mencionado anteriormente, quando as classes comuns são
separadas em seu próprio pacote, a usabilidade e a sustentabilidade são melhoradas.
A Swing tira proveito da arquitetura model-view-controller (MVC). O
modelo representa o estado atual de cada componente. A visualização (view)
é a representação dos componentes na tela. O controlador (controller) é a
funcionalidade que liga os componentes da IU aos eventos. É importante
compreender a arquitetura correspondente ao Swing, mas não será necessário para
o exame. Para obter informações sobre a API Swing, consulte o livro Swing: A
Beginner’s Guide, de Herbert Schildt (McGraw-Hill Professional, 2007).
Familiarize-se com os prefixos dos pacotes java e javax. O
prefixo java é usado comumente para os pacotes centrais. O prefixo javax
geralmente é usado para pacotes compostos por extensões Java padrão.
Repare especialmente no uso dos prefixos nas APIs AWT e Swing: java.awt
e javax.swing.
EXERCÍCIO 1-2
Compreendendo a Funcionalidade Estendida da API Java Utilities
No Java SE 6, um total de dez pacotes tem relação direta com a API Java Utilities,
sendo que o pacote básico chama-se java.util. O J2SE 5.0 tem apenas nove
pacotes; o J2SE 1.4 tem apenas seis. Este exercício fará com que você explore os
detalhes dos pacotes secundários da API Java Utilities que foram acrescentados em
versões subsequentes da plataforma Java SE 1.4.
1. Acesse as especificações on-line da API J2SE 1.4.2 API: http://java.sun.
com/j2se/1.4.2/docs/api/.
2. Use a barra de rolagem do navegador para buscar os pacotes da API Java
Utilities.
3. Clique no link de cada pacote relacionado. Explore os detalhes das classes
e interfaces de cada pacote.
18
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
4. Acesse as especificações on-line da API J2SE 5.0: http://java.sun.com/
j2se/1.5.0/docs/api/ (em inglês). Estas são as especificações da API que você
deve consultar para o exame. Elas são mostradas na ilustração a seguir.
5. Use a barra de rolagem do navegador web para procurar os pacotes da API
Java Utilities.
6. Determine quais foram os três novos pacotes secundários que foram
acrescentados à API Java Utilities. Clique no link de cada um dos novos
pacotes. Explore os detalhes das classes e interfaces dentro de cada pacote.
7. Acesse as especificações on-line da API Java SE 6: http://java.sun.com/
javase/6/docs/api/.
Compilando e Interpretando o Código Java
19
8. Utilize a barra de rolagem do navegador web para procurar os pacotes da
API Java Utilities.
9. Determine qual novo pacote secundário foi acrescentado à API Java
Utilities. Clique no link do novo pacote. Explore os detalhes das classes
contidas no pacote.
OBJETIVO DA CERTIFICAÇÃO
Compilando e Interpretando o Código Java
Objetivo do Exame 5.2 Demonstrar o uso adequado do comando “javac” (incluindo
as opções da linha de comando -d e –classpath) e demonstrar o uso apropriado do
comando “java” (incluindo as opções da linha de comando -classpath, -D e –version).
O Java Development Kit possui diversos utilitários para compilar, depurar e
executar aplicativos Java. Esta seção irá detalhar dois utilitários do kit: o compilador
Java e o interpretador de Java. Para obter mais informações sobre o JDK e suas
outras funcionalidades, consulte o Capítulo 10.
Compilador Java
Precisaremos de uma aplicação do exemplo para usar em nossos exercícios sobre
compiladores e intérpretes de Java. Empregaremos o arquivo fonte simples
GreetingsUniverse.java, mostrado na listagem a seguir e no restante da seção.
public class GreetingsUniverse {
public static void main(String[] args) {
System.out.println(“Greetings, Universe!”);
}
}
Vamos dar uma olhada na compilação e interpretação de programas Java
simples, com as opções mais básicas na linha de comando.
20
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
Compilando Seu Código-fonte
O compilador Java é apenas uma das diversas ferramentas do JDK. Quando tiver
tempo, dê uma olhada nas ferramentas da pasta do JDK, como mostra a Figura
1-7. Para o escopo do exame SCJA, você só precisará conhecer os detalhes do
compilador e do interpretador.
O compilador Java simplesmente converte arquivos fonte Java em bytecode. Para
usar o compilador Java:
javac [options] [source files]
A maneira mais direta de compilar uma classe Java é prefaciar os arquivos
fonte Java com o utilitário compilador na linha de comando: javac.exe
FileName.java. O .exe é a extensão padrão para os arquivos executáveis
em máquinas Windows, e é opcional. A extensão .exe não está presente nos
executáveis de sistemas Unix e similares.
javac GreetingsUniverse.java
Isso resultará em um arquivo bytecode com o mesmo prefixo, como
GreetingsUniverse.class. Este arquivo bytecode será inserido na mesma pasta do
código-fonte, a menos que o código esteja empacotado e/ou tenha uma instrução na
linha de comando para ser inserido em outro local.
FIGURA 1-7
Utilitários do Java
Development Kit
Compilando e Interpretando o Código Java
21
DENTRO DO EXAME
Ferramentas da Linha de Comando
A maioria dos projetos utiliza os
Ambientes de Desenvolvimento (IDEs)
para compilar e executar código. O
benefício claro de se usar IDEs é que
construir e executar um código pode ser
tão fácil quanto apertar alguns botões de
menu, ou simplesmente apertar uma tecla
de atalho. A desvantagem é que embora
seja possível estabelecer suas definições
em uma janela de configuração e ver os
comandos e argumentos em uma das
janelas da área de trabalho, você não
tem uma experiência direta na criação
da estrutura completa dos comandos
e argumentos associados. O exame é
estruturado para garantir que você tenha
experiência em escrever invocações do
compilador e do interpretador. Não
ignore este pré-requisito. Só faça o exame
depois de se aperfeiçoar em quando e
como usar as ferramentas, comutadores
e argumentos associados. Mais tarde,
você pode pensar em tirar proveito dos
“atalhos” dos IDEs mais populares,
como os fornecidos por NetBeans,
Eclipse, IntelliJ IDEA e JDeveloper.
Compilando Seu Código-fonte com a Opção -d
Você pode querer especificar explicitamente onde gostaria que os arquivos
compilados da classe bytecode fossem inseridos. Você pode fazer isso usando a
opção -d.
javac -d classes GreetingsUniverse.java
Esta estrutura de linha de comando colocará o arquivo da classe no diretório
classes, e, como o código-fonte foi empacotado (isto é, o arquivo fonte
inclui uma instrução package), o bytecode será inserido nos subdiretórios
relacionados.
[present working directory]\classes\com\scjaexam\tutorial\
GreetingsUniverse.class
Compilando Seu Código com a Opção -classpath
Se você deseja compilar seu aplicativo com classes e pacotes definidos pelo
usuário, pode precisar informar ao JVM onde ele deve procurar estes elementos,
especificando-os no caminho da classe. Esta inclusão do caminho da classe pode
22
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
ser conseguida informando o compilador onde estão as classes e pacotes desejados
através da opção de linha de comando -cp ou -classpath. Na invocação do
compilador a seguir, o compilador inclui em sua compilação todos os arquivos
fonte localizados no diretório 3rdPartyCode\classes, bem como quaisquer classes
localizadas no diretório funcional atual (o ponto). A opção -d (novamente) irá
inserir o bytecode compilado no diretório classes.
javac -d classes -cp 3rdPartyCode\classes\;.
GreetingsUniverse.java
Repare que você não precisa incluir a opção do caminho da classe se ele estiver
definido com a variável de ambiente CLASSPATH, ou se os arquivos desejados
estiverem no diretório funcional atual.
Em sistemas Windows, os diretórios de caminho de classe são delimitados por
barras inversas, e os caminhos são delimitados por ponto e vírgula:
-classpath .:/dir_a/classes_a/;/dir_b/classes_b/
Novamente, o ponto representa o diretório funcional atual.
Conheça seus comutadores. Os criadores do exame tentarão
confundi-lo com perguntas que misturam comutadores de compilador e
interpretador. Você poderá ver alguns comutadores fictícios que não existem
em lugar nenhum. Para se preparar para isso, liste o conjunto completo de
comutadores digitando “java -help” ou “javac -help”. Os comutadores
também são conhecidos como parâmetros da linha de comando, comutadores
da linha de comando, opções e sinalizadores.
Interpretador Java
Interpretar os arquivos Java é a base para criar um aplicativo Java, como mostra a
Figura 1-8. Vamos analisar como invocar o interpretador e suas opções de linha de
comando.
java [-options] class [args…]
Compilando e Interpretando o Código Java
23
Conversão de bytecode
FIGURA 1-8
GreetingsUniverse.java
Compiler (javac)
GreetingsUniverse.class
Interpreter (java)
GreetingsUniverse
application
Interpretando Seu Bytecode
O interpretador Java é chamado com o comando java[.exe]. Ele é usado para
interpretar bytecode e executar seu programa.
Você pode invocar o interpretador facilmente em uma classe que não esteja
empacotada, como mostrado a seguir:
java MainClass
Opcionalmente, você pode iniciar o programa com o comando javaw no
Microsoft Windows para excluir a janela de comando. Este é um ótimo recurso
para aplicativos baseados em GUI, pois a janela de console geralmente não é
necessária.
javaw.exe MainClass
De modo similar, nos sistemas baseados em POSIX, você pode usar o &
comercial para executar o aplicativo como processo paralelo.
java MainClass &
Interpretando Seu Código com a Opção -classpath
Ao interpretar seu código, você pode precisar definir a localização de determinadas
classes e pacotes. Você pode encontrar suas classes no tempo de execução ao incluir
a opção -cp ou -classpath com o interpretador. Se as classes que você deseja
incluir estão empacotadas, você pode iniciar seu aplicativo apontando o caminho
completo do aplicativo para o diretório base de classes, como na seguinte invocação
do interpretador:
java -cp classes com.scjaexam.tutorial.MainClass
A sintaxe de delimitação é a mesma para as opções -cp e -classpath,
como foi definido anteriormente na seção “Compilando Seu Código com a Opção
-classpath”.
24
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
Interpretando Seu Bytecode com a Opção -D
A opção de linha de comando -D permite a configuração de novos valores de
propriedade. O uso é o seguinte:
java -D<name>=<value> class
O seguinte aplicativo de arquivo único composto pela classe PropertiesManager
imprime todas as propriedades do sistema.
import java.util.Properties;
public class PropertiesManager {
public static void main(String[] args) {
Properties props = System.getProperties();
/* Novo exemplo de propriedade */
props.setProperty(“new_property2”, “new_value2”);
if (args[0].equals(“-list_all”)) {
props.list(System.out); // Lista todas as
propriedades
} else if (args[0].equals(“-list_prop”)) {
/* Lista valor */
System.out.println(props.getProperty(args[1]));
} else {
System.out.println(“Usage: java PropertiesManager
[-list_all]”);
System.out.println(“
java PropertiesManager
[-list_prop [property]]”);
}
}
}
Vamos executar o aplicativo enquanto configuramos uma nova propriedade de
sistema chamada “new_propert y1” para o valor de “new_value1”.
java -Dnew_property1=new_value1 PropertiesManager -list_all
Você verá na saída padrão que a listagem das propriedades do sistema inclui a
nova propriedade que configuramos e seu valor.
…
new_property1=new_value1
java.specification.name=Java Platform API Specification
…
Opcionalmente, você pode configurar um valor instanciando a classe
Properties e, em seguida, configurando uma propriedade e seu valor com o
método setProperty.
Compilando e Interpretando o Código Java
25
Para ajudá-lo a conceitualizar melhor as propriedades do sistema, a Tabela 1-5
detalha um subconjunto de propriedades padrão do sistema.
Encontrando a Versão do Interpretador com a Opção
-version
A opção de linha de comando -version é usada com o interpretador Java
para retornar a versão do JVM e sair. Não subestime a simplicidade do comando,
pois os criadores do exame podem confundi-lo incluindo argumentos adicionais
após o comando. Separe um tempo para brincar com o comando, adicionando
argumentos e inserindo a opção -version em vários locais. Não tire nenhuma
conclusão sobre como você acha que o aplicativo irá responder. A Figura 1-9
mostra os resultados que variam com base em onde a opção -version é usada.
TABELA 1-5
Subconjunto de Propriedades do Sistema
Propriedade do Sistema
Descrição da Propriedade
file.separator
Separador de arquivos específico da plataforma (‘/’ para POSIX,
‘\’ para Windows)
java.class.path
Caminho de classe como definido para a variável de ambiente
do sistema
java.class.version
Número de versão da classe Java
java.home
java.vendor
java.vendor.url
java.version
Diretório da instalação Java
Fornecedor da plataforma Java
URL do fornecedor
Versão do Interpretador Java /JVM
line.separator
Separador de linhas específico da plataforma (“\r” no Mac OS
9, “\n” para POSIX, “\r\n” para Microsoft Windows)
os.arch
Arquitetura do sistema operacional
os.name
os.version
Nome do sistema operacional
Versão do sistema operacional
path.separator
Separador de caminhos específico da plataforma (“:” para
POSIX, “;” para Windows)
user.dir
Diretório atual do usuário
user.home
user.language
user.name
user.timezone
Diretório principal do usuário
Código de linguagem do local padrão
Nome de usuário do usuário atual
Fuso horário padrão do sistema
26
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
FIGURA 1-9
Opção -version
da linha de comando
Consulte os outros utilitários JDK que estão à sua disposição. Você pode
encontrá-los no diretório bin de seu JDK. JConsole, especificamente,
é uma valiosa ferramenta baseada na GUI utilizada para monitorar e
gerenciar aplicativos Java. Entre suas diversas características, o JConsole
permite a visualização da memória e usos de thread. O JConsole foi
lançado com o J2SE 5.0.
EXERCÍCIO 1-3
Compilando e Interpretando Software Empacotado
Ao compilar e executar um software empacotado a partir de um IDE, o processo
pode ser tão simples quanto clicar em um ícone de execução do IDE e determinar
os caminhos necessários que serão usados pelo compilador e pelos intérpretes.
No entanto, quando você tenta compilar e interpretar o código sozinho a partir
da linha de comando, precisa saber exatamente como inserir os caminhos dos
arquivos. Considere nossa amostra de aplicativo, que agora está inserida no pacote
com.scjaexam.tutorial.
package com.scjaexam.tutorial;
public class GreetingsUniverse {
public static void main(String[] args) {
System.out.println(“Greetings, Universe!”);
}
}
Compilando e Interpretando o Código Java
27
Neste exercício, você irá compilar e executar o aplicativo com novas classes
criadas em um pacote separado.
1. Compile o programa.
javac -d . GreetingsUniverse.java
2. Execute o programa para verificar se ele está livre de erros.
java -cp . com.scjaexam.tutorial.GreetingsUniverse
3. Crie três classes chamadas Earth, Mars e Venus e coloque-as no pacote
com.scja.exam.tutorial.planets. Crie construtores que
imprimirão os nomes dos planetas a serem padronizados. Repare que os
detalhes da classe Earth são dados aqui como um exemplo do que você
precisará fazer.
package com.scja.exam.tutorial.planets;
public class Earth {
public Earth {
System.out.println(“Hello from Earth!”);
}
}
4. Instancie cada classe a partir do programa principal, acrescentando os
códigos necessários à classe GreetingsUniverse.
Earth e = new Earth();
5. Verifique se todo o código-fonte está nos caminhos src/com/scjaexam/
tutorial/ e src/com/scjaexam/tutorial/planets/, respectivamente.
6. Determine os argumentos da linha de comando necessários para compilar
todo o programa. Compile o programa e depure, se necessário.
7. Determine os argumentos da linha de comando necessários para
interpretar o programa. Execute o programa.
A saída padrão será:
$ Greetings, Universe!
Hello from Earth!
Hello from Mars!
Hello from Venus!
28
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
RESUMO DA CERTIFICAÇÃO
Este capítulo falou sobre pacotes, compilação e interpretação de código Java. O
capítulo começou com uma discussão sobre a importância de organizar suas classes
em pacotes, bem como de usar as instruções package e import para definir
e incluir diferentes trechos de código-fonte. No meio do capítulo, discutimos as
principais características dos pacotes Java usados com mais frequência: java.
awt, javax.swing, java.net, java.io e java.util. Concluímos o
capítulo fornecendo informações detalhadas sobre como compilar e interpretar
arquivos fonte e de classe Java, e também como trabalhar com suas opções de linha
de comando. Neste ponto, você deve ser capaz de empacotar, construir e executar
programas Java básicos de forma independente (fora de um IDE).
Exercícios Rápidos
29
EXERCÍCIOS RÁPIDOS
Compreendendo os Pacotes
TT Pacotes são recipientes para as classes.
TT Uma instrução package define o caminho do diretório onde os
arquivos são armazenados.
TT Uma instrução package usa pontos como delimitadores.
TT Os nomes dos pacotes devem ser em letra minúscula e as palavras
devem ser separadas por underscores.
TT Os nomes dos pacotes que começam com java.* e javax.* são
reservados para uso do JavaSoft.
TT Pode haver zero ou uma instrução package por arquivo fonte.
TT Uma instrução import é usada para incluir código-fonte de classes
externas.
TT Uma instrução import ocorre depois da instrução package
opcional e antes da definição de classe.
TT Uma instrução import pode definir um nome de classe específico
a ser importado.
TT Uma instrução import pode usar um asterisco para incluir todas
as classes de um determinado pacote.
Compreendendo as Classes Derivadas de Pacotes
TT A API Java Abstract Window Toolkit está incluída nos pacotes e
pacotes secundários java.awt.
TT O pacote java.awt inclui criação de GUI e ferramenta para
pintura de gráficos e imagens.
TT A API Java Swing está no pacote e pacotes secundários de javax.
swing.
TT O pacote java.swing inclui classes e interfaces que suportam a
funcionalidade do componente GUI leve.
TT As classes relacionadas ao Java Basic Input/Output estão no pacote
java.io.
TT O pacote java.io inclui classes e interfaces que suportam
funcionalidade de entrada/saída do sistema de arquivos, f luxos de
dados e serialização.
TT As classes de rede Java estão no pacote java.net.
30
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
TT O pacote java.net inclui classes e interfaces que suportam
funcionalidade básica de rede, que também é estendida ao pacote
javax.net.
TT Os utilitários Java básicos estão no pacote java.util.
TT O pacote java.util e seus pacotes secundários incluem classes
e interfaces que suportam o Java Collections Framework, classes
collection de herança, modelos de vento, ferramentas de data e hora
e funcionalidade de internacionalização.
Compilando e Interpretando o Código Java
TT O compilador Java é invocado com o comando javac[.exe].
TT A extensão .exe é opcional nas máquinas Microsoft Windows e
não está presente em sistemas UNIX e similares.
TT A opção de linha de comando -d do compilador define onde os
arquivos de classe compilados devem ser inseridos.
TT A opção de linha de comando -d do compilador inclui a localização
do pacote caso a classe tenha sido declarada com uma instrução
package.
TT A opção de linha de comando -classpath do compilador define
caminhos de diretórios na busca por classes.
TT O interpretador Java é invocado com o comando java[.exe].
TT O comutador -classpath do interpretador define caminhos de
diretório para serem usados no tempo de execução.
TT A opção de linha de comando -D do interpretador permite a
configuração dos valores de propriedade do sistema.
TT A sintaxe do interpretador para a opção de linha de comando -D é
-Dproperty=value.
TT A opção de linha de comando -version do interpretador é usada
para retornar a versão do JVM e sair.
Teste Individual
31
TESTE INDIVIDUAL
Compreendendo os Pacotes
1. Quais instruções import permitirão a importação da classe HashMap?
A. import java.util.HashMap;
B. import java.util.*;
C. import java.util.HashMap.*;
D. import java.util.hashMap;
2. Qual instrução determinaria que seu arquivo pertence ao pacote com.scjaexam.
utilities?
A. pack com.scjaexam.utilities;
B. package com.scjaexam.utilities.*
C. package com.scjaexam.utilities.*;
D. package com.scjaexam.utilities;
3. Qual das alternativas a seguir contém o único pacote Java importado por padrão?
A. java.awt
B. java.lang
C. java.util
D. java.io
4. Quais recursos relacionados a Java são novos no J2SE 5.0?
A. Importações estáticas
B.Instruções package e import
C. Autoboxing e unboxing
D. O laço for melhorado
Compreendendo as Classes Derivadas de Pacotes
5. As classes JCheckBox e JComboBox pertencem a qual pacote?
A. java.awt
B. javax.awt
C. java.swing
D. javax.swing
32
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
6. Qual pacote contém o Java Collections Framework?
A. java.io
B. java.net
C. java.util
D. java.utils
7. A API Java Basic I/O contém quais tipos de classes e interfaces?
A.Internacionalização
B. RMI, JDBC e JNDI
C. Fluxos de dados, serialização e sistema de arquivos
D. API Collection e f luxos de dados
8. Qual API fornece uma solução leve para componentes de GUI?
A.AWT
B. Abstract Window Toolkit
C.Swing
D. AWT e Swing
9. Considere a ilustração a seguir. Qual é o problema no empacotamento? Você pode
precisar consultar o Capítulo 9 para ajudá-lo com a UML.
com.scjaexam.backing_beans
BeanA
COM.SCJAEXAM.UTILS
BeanB
UtilityA
UtilityB
A. Só é possível ter uma classe por pacote.
B. Os pacotes não podem ter associações entre eles.
C. O pacote com.scjaexam.backing_beans não obedece às convenções de
nomes de pacotes.
D. O pacote COM.SCJAEXAM.UTILS não obedece às convenções de nomes de
pacotes.
Teste Individual
33
Compilando e Interpretando o Código Java
10.Qual uso representa um modo válido de compilar uma classe Java?
A. java MainClass.class
B. javac MainClass
C. javac MainClass.source
D. javac MainClass.java
11.Qual par de invocações de linha de comando do interpretador Java retorna a versão do
interpretador?
A. java -version
B. java --version
C. java -version ProgramName
D. java ProgramName -version
12.Qual par de usos de linha de comando identifica corretamente o caminho da classe?
A. javac -cp /project/classes/ MainClass.java
B. javac -sp /project/classes/ MainClass.java
C. javac -classpath /project/classes/ MainClass.java
D. javac -classpaths /project/classes/ MainClass.java
13.Quais usos da linha de comando configuram corretamente um valor de propriedade
do sistema?
A. java -Dcom.scjaexam.propertyValue=003 MainClass
B. java -d com.scjaexam.propertyValue=003 MainClass
C. java -prop com.scjaexam.propertyValue=003 MainClass
D. java -D:com.scjaexam.propertyValue=003 MainClass
34
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
RESPOSTAS DO TESTE INDIVIDUAL
Compreendendo os Pacotes
1. Quais instruções import permitirão a importação da classe HashMap?
A. import java.util.HashMap;
B. import java.util.*;
C. import java.util.HashMap.*;
D. import java.util.hashMap;
Resposta:
;; A e B. A classe HashMap pode ser importada diretamente através de import
java.util.HashMap ou com um caractere coringa através de import
java.util.*;.
44 C e D estão incorretas. C está incorreta porque a resposta é uma instrução
import estática que importa membros estáticos da classe HashMap, e não
a classe em si. D está incorreta porque os nomes de classes são case-sensitive.
Portanto, o nome de classe hashMap não é igual a HashMap.
2. Qual instrução determinaria que seu arquivo pertence ao pacote com.scjaexam.
utilities?
A. pack com.scjaexam.utilities;
B. package com.scjaexam.utilities.*
C. package com.scjaexam.utilities.*;
D. package com.scjaexam.utilities;
Resposta:
;; D. A palavra-chave package foi usada corretamente, seguida pelo nome do
pacote delimitado por pontos e seguido por ponto e vírgula.
44 A, B e C estão incorretas. A está incorreta porque a palavra pack não é uma
palavra-chave válida. B está incorreta porque uma instrução package deve
terminar com ponto e vírgula. C está incorreta porque não se pode usar asteriscos
em instruções package.
Respostas do Teste Individual
35
3. Qual das alternativas a seguir contém o único pacote Java importado por padrão?
A. java.awt
B. java.lang
C. java.util
D. java.io
Resposta:
;; B. O pacote java.lang é o único pacote que tem todas as suas classes
importadas por padrão.
44 A, C e D estão incorretas. As classes dos pacotes java.awt, java.util e
java.io não são importadas por padrão.
4. Quais recursos relacionados a Java são novos no J2SE 5.0?
A. Importações estáticas
B.Instruções package e import
C. Autoboxing e unboxing
D. O laço for melhorado
Resposta:
;; A, C e D. Importações estáticas, autoboxing/unboxing e o laço for melhorado são
todos novos recursos do J2SE 5.0.
44 B está incorreta porque as instruções básicas package e import não são novas
no J2SE 5.0.
Compreendendo as Classes Derivadas de Pacotes
5. As classes JCheckBox e JComboBox pertencem a qual pacote?
A. java.awt
B. javax.awt
C. java.swing
D. javax.swing
36
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
Resposta:
;; D. Os componentes que pertencem à API Swing geralmente são prefaciados com
a letra J maiúscula. Portanto, JCheckBox e JComboBox fariam parte da API
Java Swing e não da API Java AWT. O pacote básico da API Java Swing é javax.
swing.
44 A, B e C estão incorretas. A está incorreta porque o pacote java.awt não
inclui as classes JCheckBox e JComboBox, pois elas pertencem à API Java
Swing. Repare que o pacote java.awt inclui a classe CheckBox, e não a classe
JCheckBox. B e C estão incorretas porque os nomes de pacotes javax.awt e
java.swing não existem.
6. Qual pacote contém o Java Collections Framework?
A. java.io
B. java.net
C. java.util
D. java.utils
Resposta:
;; C. O Java Collections Framework faz parte da API Java Utilities no pacote java.
util.
44 A, B e D estão incorretas. A está incorreta porque o pacote básico da API Java
Basic I/O chama-se java.io e não contém o Java Collections Framework. B está
incorreta porque o pacote básico da API Java Networking chama-se java.net e
também não contém o Colletcions Framework. D está incorreta porque não existe
um pacote chamado java.utils.
7. A API Java Basic I/O contém quais tipos de classes e interfaces?
A.Internacionalização
B. RMI, JDBC e JNDI
C. Fluxos de dados, serialização e sistema de arquivos
D. API Collection e f luxos de dados
Respostas do Teste Individual
37
Resposta:
;; C. A API Java Basic I/O contém classes e interfaces para f luxos de dados,
serialização e sistema de arquivos.
44 A, B e D estão incorretas porque internacionalização (i18n), RMI, JDBC, JNDI e o
Collections Framework não estão incluídos na API Basic I/O.
8. Qual API fornece uma solução leve para componentes de GUI?
A.AWT
B. Abstract Window Toolkit
C.Swing
D. AWT e Swing
Resposta:
44 C. A API Swing fornece uma solução leve para componentes de GUI, o que
significa que as classes da API Swing são construídas a partir de código Java puro.
44 A, B e D estão incorretas. AWT e Abstract Window Toolkit são a mesma coisa e
fornecem uma solução mais pesada para os componentes da GUI.
9. Considere a ilustração a seguir. Qual é o problema no empacotamento? Você pode
precisar consultar o Capítulo 9 para ajudá-lo com a UML.
com.scjaexam.backing_beans
BeanA
COM.SCJAEXAM.UTILS
BeanB
UtilityA
UtilityB
A. Só é possível ter uma classe por pacote.
B. Os pacotes não podem ter associações entre eles.
C. O pacote com.scjaexam.backing_beans não obedece às convenções de
nomes de pacotes.
D. O pacote COM.SCJAEXAM.UTILS não obedece às convenções de nomes de
pacotes.
38
Capítulo 1: Empacotando, Compilando e Interpretando o Código Java
Resposta:
;; D. COM.SCJAEXAM.UTILS não obedece às convenções de nomes de pacotes.
Os nomes de pacotes devem ser em letras minúsculas. Repare que os nomes dos
pacotes também devem ter um underscore entre as palavras; no entanto, as palavras
de “scjaexam” estão juntas na URL, portanto, excluir o underscore neste caso é
aceitável. O nome do pacote deveria ser com.scjaexam.utils.
44 A, B e C estão incorretas. A está incorreta porque é um absurdo restringirse a apenas uma classe por pacote. Não há limites. B está incorreta porque os
pacotes podem ter associações com outros pacotes. C está incorreta porque com.
scjaexam.backing_beans obedece às convenções de nomes para os
pacotes.
Compilando e Interpretando o Código Java
10.Qual uso representa um modo válido de compilar uma classe Java?
A. java MainClass.class
B. javac MainClass
C. javac MainClass.source
D. javac MainClass.java
Resposta:
;; D. O compilador é invocado pelo comando javac. Ao compilar uma classe Java,
você deve incluir o nome do arquivo, que abriga as principais classes que contêm a
extensão .java.
44 A, B e C estão incorretas. A está incorreta porque MainClass.class é um
já compilado. B está incorreta porque MainClass não possui extensão.java.
C está incorreta porque MainClass.source não é um nome válido para
qualquer tipo de arquivo Java.
11.Qual par de invocações de linha de comando do interpretador Java retorna a versão do
interpretador?
A. java -version
B. java --version
C. java -version ProgramName
D. java ProgramName -version
Respostas do Teste Individual
39
Resposta:
;; A e C. O sinalizador -version deve ser usado como primeiro argumento. O
aplicativo retornará as strings apropriadas para a saída padrão com as informações
de versão e, em seguida, fechará imediatamente. O segundo argumento é ignorado.
44 B e D estão incorretas. B está incorreta porque o sinalizador de versão não permite
dois hífens. Você pode encontrar sinalizadores com dois hífens em utilitários,
principalmente nos que seguem a licença da GUI. No entanto, os dois hífens não
se aplicam ao sinalizador de versão do interpretador Java. D está incorreta porque o
sinalizador de versão deve ser usado como primeiro argumento ou sua funcionalidade
será ignorada.
12.Qual par de usos de linha de comando identifica corretamente o caminho da classe?
A. javac -cp /project/classes/ MainClass.java
B. javac -sp /project/classes/ MainClass.java
C. javac -classpath /project/classes/ MainClass.java
D. javac -classpaths /project/classes/ MainClass.java
Resposta:
;; A e C. O sinalizador de opção é usado para especificar que o caminho da classe é
-cp ou -classpath.
44 B e D estão incorretas porque os sinalizadores de opção -sp e -classpaths
são inválidos.
13.Quais usos da linha de comando configuram corretamente um valor de propriedade
do sistema?
A. java -Dcom.scjaexam.propertyValue=003 MainClass
B. java -d com.scjaexam.propertyValue=003 MainClass
C. java -prop com.scjaexam.propertyValue=003 MainClass
D. java -D:com.scjaexam.propertyValue=003 MainClass
Resposta:
;; A. A configuração de propriedade é usada com o interpretador e não com o
compilador. O nome da propriedade deve estar entre o sinalizador -D e o sinal de
igual. O valor desejado deve vir imediatamente após o sinal de igual.
44 B, C e D estão incorretas porque -d, -prop e “-D:” são formas inválidas de
designar uma propriedade de sistema.
Download