A maior rede de estudos do Brasil

Grátis
118 pág.
poojava

Pré-visualização | Página 12 de 37

para applets remotos.
2.7.3 Desenvolvimento de aplicações
Aplicações Java são programas autônomos, cujo código gerado a partir de um programa fonte
pode ser interpretado diretamente pela Máquina Virtual Java. Como tudo em Java está estruturado
através de classes e objetos, para desenvolver uma aplicação é preciso desenvolver pelo menos uma
classe que contenha um método denominado main.
Assim, uma classe que vá estabelecer o ponto de partida para a execução de uma aplicação
na JVM deve conter pelo menos esse método. Esse exemplo clássico define uma aplicação que
simplesmente envia uma string para a saída padrão, identificada pelo objeto público System.out:
c
�
2001 FEEC/UNICAMP 35
Programação orientada a objetos com Java 2.7. O ambiente de Java
1 public class Hello {
2 public static void main(String[] args) {
3 System.out.println("Oi!");
4 System.exit(0);
5 }
6 }
Uma vez que o programa tenha sido salvo em um arquivo com extensão .java, é preciso
compilá-lo. Para compilar um programa Java, a ferramenta oferecida pelo kit de desenvolvimento
Java é o compilador Java, javac. Na forma mais básica de execução, o javac é invocado da linha
de comando tendo por argumento o nome do arquivo com o código Java a ser compilado:
> javac Hello.java
A unidade de compilação é o arquivo com extensão .java; esse arquivo pode conter a definição
de várias classes, mas apenas uma delas pode ser pública. A classe pública em um arquivo fonte
define o nome desse arquivo, que obrigatoriamente deve ter o mesmo nome dessa classe.
Para cada definição de classe na unidade de compilação, o compilador Java irá gerar um arquivo
com bytecodes com a extensão .class, tendo como nome o próprio nome da classe.
Uma vez que um programa Java tenha sido compilado e esteja pronto para ser executado, isto
se dá através do comando java — o interpretador Java, que ativa a máquina virtual Java, carrega a
classe especificada e ativa seu método main.
Por exemplo, para interpretar o arquivo Hello.class contendo o bytecode correspondente ao
código fonte do arquivo Hello.java, utiliza-se a linha de comando
> java Hello
Observe que a extensão .class não é incluída nessa linha de comando — se o for, uma mensa-
gem de erro será gerada, pois para a máquina virtual Java o caráter ’.’ está associado à definição de
uma hierarquia de pacotes.
Se a máquina virtual Java do interpretador não encontrar um método de nome main com a
assinatura correta (public, static, void e com um argumento do tipo String[]) na classe
especificada, uma exceção será gerada em tempo de execução:
Exception in thread "main" java.lang.NoSuchMethodError: main
Essa mensagem pode ser emitida pela ausência completa de um método main na classe ou por uma
declaração incorreta para o método.
Se um programa Java for desenvolvido como applet (ver Seção 4.3), ele não poderá ser executado
diretamente através do interpretador Java mas sim através da ativação de uma página HTML. Para
executar esse tipo de aplicação pode-se utilizar um navegador; porém, o ambiente de desenvolvimento
Java oferece a aplicação appletviewer que extrai da página HTML apenas o espaço de exibição
do applet e permite controlar sua execução através de comandos em sua interface gráfica.
c
�
2001 FEEC/UNICAMP 36
Capítulo 3
Uso das classes da API padrão de Java
Um dos grandes atrativos da programação orientada a objetos é a possibilidade de adaptar funcio-
nalidades oferecidas em classes existentes às necessidades de cada aplicação. Java, não diferentemen-
te, oferece essa facilidade, aliando-a ao oferecimento de um amplo conjunto de classes organizadas
nos pacotes da API padrão.
As classes que compõem o núcleo de funcionalidades Java estão organizadas em pacotes, grupos
de classes, interfaces e exceções afins ou de uma mesma aplicação. Entre os principais pacotes
oferecidos como parte do núcleo Java estão: java.lang, java.util, java.io, java.awt,
java.applet e java.net.
Observe que esses nomes seguem a convenção Java, pela qual nomes de pacotes (assim como
nomes de métodos) são grafados em letras minúsculas, enquanto nomes de classes têm a primeira
letra (de cada palavra, no caso de nomes compostos) grafada com letra maiúscula.
3.1 Funcionalidades básicas
O pacote java.lang contém as classes que constituem recursos básicos da linguagem, necessários
à execução de qualquer programa Java.
A classe Object expressa o conjunto de funcionalidades comuns a todos os objetos Java, sendo
a raiz da hierarquia de classes Java.
As classes Class e ClassLoader representam, respectivamente classes Java e o mecanismo
para carregá-las dinamicamente para a Máquina Virtual Java.
A classe String permite a representação e a manipulação de strings cujo conteúdo não pode ser
modificado. Para manipular string modificáveis — por exemplo, através da inserção de um caráter
na string — a classe StringBuffer é oferecida.
A classe Math contém a definição de métodos para cálculo de funções matemáticas (trigono-
métricas, logarítimicas, exponenciais, etc.) e de constantes, tais como E e PI. Todos os métodos
e constantes definidos nessa classe são estáticos, ou seja, para utilizá-los basta usar como prefixo o
nome da classe.
O pacote oferece também um conjunto de classes wrappers. Um objeto de uma classe wrapper
contém um único valor de um tipo primitivo da linguagem, permitindo assim estabelecer uma ponte
entre valores literais e objetos. Essas classes são Boolean, Character, Byte, Short, Inte-
ger, Long, Float e Double. Além dos métodos para obter o valor associado ao objeto de cada
37
Programação orientada a objetos com Java 3.2. Entrada e saída
uma dessas classes, métodos auxiliares como a conversão de e para strings são suportados.
As classes System, Runtime e Process permitem interação da aplicação Java com o ambi-
ente de execução. Por exemplo, a classe System tem três atributos públicos e estáticos associados
aos arquivos padrão de um sistema operacional: System.in, para a entrada padrão; System.out,
para a saída padrão; e System.err, para a saída padrão de erros. Adicionalmente, as classes Th-
read e ThreadGroup, assim como a interface Runnable, dão suporte à execução de múltiplas
linhas de execução que podem ser associadas a um processo.
As classes que definem erros e exceções, respectivamente Error e Exception, são também
definidas nesse pacote. A classe Error é a raiz para condições de erro não-tratáveis, tais como Ou-
tOfMemoryError. Já a classe Exception está associada à hierarquia de condições que podem
ser detectados e tratados pelo programa, como ArithmeticException (divisão inteira por zero)
e ArrayIndexOutOfBoundsException (acesso a elemento de arranjo além da última posição
ou antes da primeira posição). Ambas as classes são derivadas de Throwable, também definida
nesse pacote.
Sub-pacotes relacionados à java.lang incluem java.lang.ref, de referências a objetos,
e o pacote java.lang.reflect, que incorpora funcionalidades para permitir a manipulação do
conteúdo de classes, ou seja, identificação de seus métodos e campos.
Deve-se ressaltar ainda que funções matemáticas são definidas em java.lang.Math. Outro
pacote, java.math, contém funcionalidades para manipular números inteiros e reais de precisão
arbitrária.
3.2 Entrada e saída
Por entrada e saída subentende-se o conjunto de mecanismos oferecidos para que um programa
executando em um computador consiga respectivamente obter e fornecer informação de dispositivos
externos ao ambiente de execução, composto pelo processador e memória principal.
De forma genérica, havendo um dispositivo de entrada de dados habilitado, o programa obtém
dados deste dispositivo através de uma operação read(). Similarmente, um dado pode ser enviado
para um dispositivo de saída habilitado através de uma operação write().
A manipulação de entrada e saída de dados em Java é suportada através de classes do paco-