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.