Linguagem de Programação IV
Ementa da DisciplinaFundamentos do paradigma orientado a objetos em Java.     Bibliotecas de suporte, componentes gráficos...
BibliografiaLIVRO TEXTO:DEITEL, H.M., DEITEL, P.J. Java, Como Programar. 4ª Edição. Porto Alegre: Bookman, 2003.LEMAY, L. ...
A história de JavaOrigem: projeto de pesquisa da Sun Microsystems, iniciado em 1991,destinado a desenvolver uma linguagem ...
Um ambiente Java típico                               O programa                               criado no editor éFase 1   ...
Um ambiente Java típico (cont.)          Verificador    O verificador deFase 4                   bytecodes confirma       ...
Um primeiro exemplo em JavaUse o Edit ou qualquer outro editor e digite o seguinte programa Java: //Um primeiro programa e...
Ao fazer a instalação no seu computador, verifique se as seguintes alterações foramfeitas no arquivo autoexec.bat (para o ...
Entendendo o programa AloMundo AloMundo apresenta vários recursos importantes de Java:  // Um primeiro programa em Java 2C...
Os nomes de classes, por convenção, são escritos com todas as palavrasiniciando com letras maiúsculas. Nomes de classes e ...
A palavra-chave void indica o tipo de retorno do método main. Isto  significa que main não retorna valor algum.Uma chave e...
"Alo, Mundo" é uma string de caracteres, e deve ser definida entre aspas duplas.Nem toda classe necessariamente deve possu...
GUI em Java: pacote SwingJava possui dois pacotes de interfaces gráficas com o usuário. O mais antigo é aAWT (Abstract Win...
Java possui uma extensa biblioteca de classes pré-definidas disponíveis para oprogramador.Estas classes são agrupadas em c...
JOptionPane.showMessageDialog(null,"Alô, Mundo!");          O método showMessageDialog requer dois argumentos, separados  ...
VariáveisEm Java, é necessário definir formalmente uma variável antes de utilizá-la.Isto implica em declarar o seu nome e ...
As variáveis de instância podem ser declaradas em qualquer lugar dentro deuma classe. Uma boa prática de programação consi...
As variáveis de classe, definidas pelo modificador static, podem serdeclaradas em qualquer lugar dentro de uma classe.As d...
Tipos de dados Existem oito tipos de dados primitivos em Java para o armazenamento de inteiros, números de ponto flutuante...
import javax.swing.JOptionPane;public class Teste {  public static void main(String[] args) {    JOptionPane.showMessageDi...
Se o valor de uma variável não deve ser alterado durante a execução do aplicativo Java, você poderá usar uma variável cons...
public class Teste {   public static void main(String a[]){      float total;      total = 5.5F;      System.out.println(t...
Literais de caracteres são expressos por meio de um único caracter delimitadopor apóstrofos. Alguns literais de caracteres...
Saída de dados com printfUm novo recurso, introduzido em J2SE 5.0, é o método System.out.printf, capaz de formatar mais ad...
Os caracteres de formatação podem também ser usados para compor umaString, usando o método String.format, conforme no exem...
Entrada de dados com ScannerA leitura de dados de entrada em aplicativos através da janela decomando do sistema operaciona...
import java.util.Scanner;public class Teste {  public static void main(String[] args) {    Scanner entrada = new Scanner(S...
O exemplo seguinte calcula o seno de um valor fornecido em tempo de execução: import java.util.Scanner; public class Teste...
Import StaticA versão J2SE 5.0 incorporou o recurso import static, que permiteimportar os métodos e atributos estáticos, p...
Entrada de dados com SwingO próximo exemplo apresenta uma solução para a soma de dois númerosinteiros usando o pacote java...
Esta versão do método showInputDialog da classe JOptionPanerequer quatro argumentos. O primeiro será null. O segundo é a m...
O método parseInt(String) da classe Integer recebe como argumentoum valor String e retorna o valor convertido em inteiros....
AutoboxingA versão J2SE 5.0 incorporou o recurso denominado autoboxing, queconsiste na conversão automática entre tipos pr...
Comando if / elseimport javax.swing.JOptionPane;public class ParImpar{   public static void main(String args[]) {      Str...
O exemplo anterior contêm apenas uma única instrução associada as        cláusulas if e else. Para incluir várias instruçõ...
O exemplo anterior faz uma comparação entre uma variável e um literal do tipo primitivo int. Cuidado com expressões relaci...
Para comparar se o conteúdo de dois objetos String são idênticos, umasugestão é empregar o método equals() da classe Strin...
Um applet Java simplesUm applet Java é um tipo especial de programa que é executado em umnavegador de páginas da World Wid...
A palavra-chave extends indica que aclasse AloMundoApplet é uma subclasse(ou classe derivada) de JApplet (chamadasuperclas...
Para executar um applet é necessário criar um arquivo de html.          O utilitário appletviewer permite carregar o arqui...
import javax.swing.*; import java.awt.*; public class AloMundo2Applet extends JApplet {   public void paint(Graphics g) { ...
Estrutura de repetição while public class Soma {    public static void main(String[] args) {       int i = 1;       int so...
import java.text.DecimalFormat;import java.util.Scanner;public class Teste {  public static void main(String args[]) {    ...
O pacote java.text disponibiliza classes para formatação de valores e expressões. A classe DecimalFormat é usada neste exe...
A partir de J2SE 5.0, a classe Formatter, através do método printf,também pode ser usada para a formatação da saída em Sys...
A tabela a seguir apresenta alguns códigos de formatação da classeFormatter e usados em System.out.printf.         f   núm...
import java.util.Date;  public class Teste {    public static void main(String args[]){      System.out.printf("Hoje: %1$t...
Operadores de AtribuiçãoJava herda de C/C++ a característica dos operadores de atribuição, usadospara abreviar as expressõ...
public class Incremento {   public static void main(String args[]) {      int i;      i = 1;      System.out.println(i);  ...
Estrutura de repetição for A estrutura for em Java é constituída de um valor inicial, um teste e um passo, delimitados por...
Exemplo: programa para somar os números pares entre 0 e 100, usando laço for.import javax.swing.JOptionPane;import static ...
Exemplo: programa para calcular a potência de 2 dos números inteiros de 1 a 10. import javax.swing.*; public class Potenci...
Este exemplo utiliza a classe JTextArea do                           pacote javax.swing. Esta classe define um            ...
Estrutura de seleção múltipla switchimport javax.swing.*;public class Calculadora {   public static void main(String args[...
A variável ou expressão de controle da estrutura de seleção switch deveassumir um valor inteiro, ou seja, do tipo byte, sh...
Estrutura de repetição do/while A estrutura do/while testa a condição de continuação do laço depois do corpo do laço ser e...
Operadores Lógicos Java possui vários operadores lógicos que podem ser utilizados para obter combinações lógicas do tipo A...
public class TestaOR2 {   public static void main(String args[]) {      int i = 2;      int j = 3;      if((j == i++) || (...
MétodosA maioria dos programas de computador usados profissionalmente são muitomais extensos do que os exemplos apresentad...
Neste exemplo, a classe NomeUsuario, definida pelo programador, invoca ométodo readLine da classe Console. A definição des...
public class QuadInt {   public static void main(String args[]) {      int i;      for(int x = 1; x <= 10; x++) {         ...
import javax.swing.*;import java.awt.*;public class Celsius extends JApplet {   double c;   double f;   public void init()...
Regras de Escopo  Todos os exemplos vistos até aqui utilizam identificadores para nomes de  variáveis e de objetos. Identi...
public void metodoA() {        int x = 25;        System.out.println("x             em A vale " + x);        x++;        S...
Sobrecarga de MétodosJava permite que vários métodos com o mesmo nome sejam definidos, contantoque tais métodos tenham dif...
Métodos sobrecarregados são distinguidos por sua assinatura, ou        seja, uma combinação do nome do método e seu tipo d...
Arrays Um array é um grupo de posições contíguas na memória que possuem o mesmo nome e o mesmo tipo. Em java, os arrays sã...
import javax.swing.*;public class Array {   public static void main(String args[]) {      String saida = "";      int[] i;...
Os arrays, ao serem instanciados, sempre alocam valores iniciais para os seuselementos, mesmo que declarados como variávei...
Passando arrays para métodosExistem duas maneiras de se passar argumentos para métodos: por valor e porreferência. Em java...
public void modificaArray(int[] a) {       for(int j = 0; j < a.length; j++)          a[j] *= 2;       }    public void mo...
Arrays multidimensionais Arrays com dois índices são utilizados normalmente para representar tabelas de valores consistind...
Estrutura for eachJ2SE 5.0 apresenta a estrutura for each, capaz de fazer a iteração dearrays (e também outras estruturas ...
Parâmetros na linha de comandoOs argumentos digitados na linha de comando são passados para o métodomain() da classe invoc...
public class Argumentos {   public static void main(String[] args) {      int soma = 0;      for(int i = 0; i < args.lengt...
StringsEm Java, uma cadeia de caracteres é sempre um objeto da classe java.lang.String. Não existe um tipo primitivo para ...
No exemplo anterior, a referência para a instância s2 é apontada para o mesmoendereço de memória da instância s1, logo a s...
Uma instância da classe String é um objeto imutável.public class Strings3 {   public static void main(String[] args) {    ...
public class Strings4 {   public static void main(String[] args) {      for(int i = 0; i < args.length; i++)         Syste...
Classe StringBufferA classe StringBuffer é uma alternativa mais adequada para a manipulaçãode cadeias de caracteres quando...
sb1 igual a sb2O método append() da classe StringBuffer altera o valor da instância sb1,mantendo a referência a mesma posi...
Enumerated TypesJ2SE 5.0 incorpora (finalmente!) o recurso de tipos enumerados, comum emC/C++. Um enum é um tipo especial ...
É possível percorrer parte de um enum usando o método java.util.EnumSet.range, conforme no exemplo que se segue.import jav...
import java.util.Scanner;public class Teste {   enum Operador {MAIS, MENOS, VEZES, DIVIDIDO_POR};   public static void mai...
Programação baseada em objetosEm linguagens como Pascal e C, a programação é orientada à ação. Em Java, aprogramação é ori...
O exemplo anterior mostra a declaração de uma classe do usuário chamadaProduto que contém quatro atributos: codigo, nome, ...
Utilize agora o BlueJ para instanciar alguns objetos da classe Produto.                                                   ...
Inclua uma nova classe do usuário TestaProd em seu projeto no BlueJ. class TestaProd {    public static void main(String a...
A linha tracejada indica                                                      que a classe                                ...
class Empregado {    private String nome;    private double salario;    //Método Construtor    public Empregado(String n, ...
public class TestaEmpregado {   public static void main(String args[]) {      Empregado[] empregado = new Empregado[3];   ...
Os modificadores de acesso disponíveis são apresentados na tabela abaixo:Modificador           Descriçãodefault           ...
Sobrecarga de construtoresOs métodos de uma classe podem ser sobrecarregados. Para sobrecarregar ummétodo construtor, simp...
Métodos set e getAs variáveis de instância definidas como privadas só podem ser manipuladasatravés de métodos da própria c...
public class TestaCliente {    public static void main(String args[]) {       Cliente fulano = new Cliente          ("Fula...
Cliente   1:   Fulano, Rua Halfeld, 3213-5000Cliente   2:   Beltrano, Rua Marechal, 3224-1000Cliente   1:   Ciclano, Rua H...
VarargsJ2SE 5.0 apresenta um novo recurso denominado varargs, que permite passarum número variável de argumentos a um méto...
Em tempo de compilação, um varargs é convertido para um array. Isto explicaporque o código abaixo executa sem problemas, a...
Sobrecarga com VarargsO exemplo a seguir ilustra o comportamento do compilador Java no caso dehaver métodos sobrecarregado...
Chamada com tipo int Versão com tipo int Chamada com Integer Versão com IntegerObserva-se que a chamada com varargs não te...
Referência thisEm algumas situações é necessário referenciar o próprio objeto corrente. Poressa razão todo objeto possui u...
import java.awt.Color;public class TestaObjGeo {   public static void main(String args[]) {      ObjGeo obj = new ObjGeo(C...
Modificador staticCada instância de um objeto tem sua própria cópia de todas as variáveis deinstância. Porém, em certas si...
public class TestaSocio {   public static void main(String args[]) {      Socio s1 = new Socio("Pedro","Rua Santa Rita"); ...
Pacotes Pacotes é a solução proposta pela Sun para reunir interfaces e classes relacionadas formando uma biblioteca. Esta ...
package wander;  public class ObjGeo {     Color cor;     int x;     int y;     public ObjGeo (Color cor, int x, int y) { ...
import wander.ObjGeo; import java.awt.Color; public class TestaObjGeo {    public static void main(String[] args) {       ...
Redefinição da classe TestaObjGeo dentro do pacote wander: package wander; import java.awt.Color; public class TestaObjGeo...
HerançaHerança é um mecanismo que permite que características comuns a diversasclasses sejam especificadas em uma classe b...
import java.awt.Color;public class FormaGeo {   protected Color cor;   protected int x, y;   public FormaGeo(Color c, int ...
import java.awt.Color;public class Circulo extends FormaGeo {   protected double raio;   public Circulo(Color c, int x, in...
A linha contínua indica                                                       que a classe Circulo                        ...
import java.awt.Color;public class TestaHeranca {   public static void main(String[] args) {      FormaGeo fg = new FormaG...
Outro exemplo utilizando herança:public class Ponto extends Object {   protected int x;   protected int y;   public Ponto(...
public class Circulo extends Ponto {   protected double raio;   public Circulo(double r, int a, int b) {      super(a, b);...
Ponto -   Centro: [10, 6]Ponto -   Centro: [72, 29], Raio: 0.0Circulo   - Centro: [72, 29], Raio: 4.5Ponto -   Centro: [5,...
Classes abstratasUma classe abstrata não pode ser instanciada, ou seja, não há objetos quepossam ser construídos diretamen...
Um método abstrato não cria uma definição, mas apenas uma declaração de ummétodo que deverá ser implementado em uma classe...
public class America extends Time {   void meuTime() {      System.out.println("Eu sou americano...");   }}public class At...
public class MeuTime {   public static void main(String[] args) {      America america = new America();      Atletico atle...
Suponha uma classe abstrata FormaGeometrica. Como calcular a área deum objeto desta classe? Se as classes Retangulo, Elips...
public class Ponto extends Forma {   protected int x, y;   public Ponto() {      x = 0;      y = 0;   }   public Ponto(int...
public class Circulo extends Ponto {   protected double raio;   public Circulo() {      raio = 0;   }   public Circulo(dou...
public class Retangulo extends Ponto {   protected int base;   protected int altura;   public Retangulo() {      base = 0;...
As classes Circulo e Retângulo estendem Ponto e sobrescrevem osmétodos area() e getNome() de Forma e também o método toStr...
A figura apresenta todas                                             as classes e os                                      ...
InterfacesInterfaces são classes abstratas completamente não implementadas, ou seja,todos os métodos são abstratos e devem...
public interface Radio {   void setEstacao(double d);   double getEstacao();}import java.util.Date;public interface Relogi...
import java.util.Date;public class RadioRelogio implements Radio, Relogio {   private Date horario;   private double estac...
Classes InternasEm Java é possível declarar uma classe dentro da declaração de outra classe.Tais classes são denominadas c...
public class Externa {   private int x = 7;   public void instanciaInterna(){      Interna in = new Interna(); //instancia...
public class Externa {   private int x = 7;   class Interna {      public void imprimeExterna() {         System.out.print...
Classes Internas AnônimasJava permite que se crie um objeto de uma classe interna sem nome, chamadaclasse interna anônima....
Tratamento de exceçõesUm erro para o qual pode existir um tratamento é chamado, em computação, deexceção. Exemplos de exce...
Exceções são objetos que pertencem a classes organizadas em uma hierarquia. Aclasse que se encontra no topo desta hierarqu...
class Matematica {   public static void main(String[] args) {      try {         int op1 = Integer.parseInt(args[0]);     ...
import java.io.*;public class Adicao {   public static void main(String[] args) {      String s;      int num1, num2, soma...
As classes do pacote java.io podem lançar exceções do tipo IOException.O programador Java é obrigado a capturar estas exce...
import java.io.*;public class Adicao {   public static void main(String[] args) throws   IOException {      String s;     ...
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
1707331929 ltp iv   java original
Próximos SlideShares
Carregando em…5
×

1707331929 ltp iv java original

1.090 visualizações

Publicada em

Java Original

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.090
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
43
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

1707331929 ltp iv java original

  1. 1. Linguagem de Programação IV
  2. 2. Ementa da DisciplinaFundamentos do paradigma orientado a objetos em Java. Bibliotecas de suporte, componentes gráficos, interfaces e estruturas de dados, classes coletivas. Tratamento de exceção. Gerência de memória. Multithreading (concorrência). Applets Java.
  3. 3. BibliografiaLIVRO TEXTO:DEITEL, H.M., DEITEL, P.J. Java, Como Programar. 4ª Edição. Porto Alegre: Bookman, 2003.LEMAY, L. e CADENHEAD, R. Aprenda em 21 Dias Java 2: Professional Reference. 3a. Ed. São Paulo:Campus, 2003.OBRAS DE REFERÊNCIA:HORSTMANN, Cay. Big Java. Porto Alegre: Bookman, 2004.HORSTMANN, Cay, et al. Core Java 2, Volume 1: Fundamentos. S. Paulo: Makron Books, 2001.HORSTMANN, Cay, et al. Core Java 2, Volume 2: Recursos Avançados. S. Paulo: Makron Books, 2001.FURGERI, Sérgio. Java 2 Ensino Didático. São Paulo: Editora Érica, 2002.CAMARÃO, C. e FIGUEIREDO, L. Programação de Computadores em Java. Rio de Janeiro: LTC, 2003SANTOS, R. Introdução à Programação Orientada a Objetos usando Java. Rio de Janeiro: Campus, 2003.MECENAS, I. Java 2 Fundamentos, Swing e JDBC. Rio de Janeiro: Alta Books, 2003.OLIVEIRA, Alcione P. Notas de Aula DPI-UFV. Viçosa, 2001.CHAN, Mark C. et al. Java: 1001 Dicas de Programação. São Paulo: Makron Books, 1999.ECKEL, Bruce. Thinking in Java, 3rd Edition. (e-book).DAVIS, Stephen R. Aprenda Java Agora. Rio de Janeiro: Campus, 1997.LALANI, Suleiman S. e JAMSA, Kris. Java: Biblioteca do Programador. São Paulo: Makron Books, 1997.NEWMAN, A. et al. Usando Java: O Guia de Referência Mais Completo. Rio de Janeiro: Campus, 1997.WUTKA, Mark. Java: Técnicas Profissionais. São Paulo: Berkeley, 1997.DAMASCENO JR., Américo. Aprendendo Java: Programação na Internet. São Paulo: Érica, 1996.JEPSON, Brian. Programando Banco de Dados em Java. São Paulo: Makron Books, 1997.RITCHEY, Tim. Java! Indianápolis, EUA: New Riders, 1995.FLANAGAN, David. Java in a Nutshell. O’Reilley & Associates, 1997.
  4. 4. A história de JavaOrigem: projeto de pesquisa da Sun Microsystems, iniciado em 1991,destinado a desenvolver uma linguagem para a programação de dispositivoseletrônicos em geral (pagers, celulares, PDAs, TV a cabo, etc).Baseada em C e C++.Seu criador, James Gosling, inicialmente a chamou de Oak, mas descobriu-seque, na época, já havia uma outra linguagem com este mesmo nome. Conta alenda, que o nome Java foi escolhido em uma cafeteria, e refere-se a umavariedade de café, originário da ilha homônima, do Pacífico.Impulso ao uso de Java: a World Wide Web explode em popularidade apartir de 1993 e a Sun percebe o seu grande potencial para a construção depáginas com conteúdo dinâmico.Em 1995, Java é anunciada formalmente à comunidade mundial.Atualmente, a tecnologia Java divide-se em J2SE, J2EE e J2ME e está naversão 1.5.0 (o chamado Core Java Software, ou, J2SE 5.0)
  5. 5. Um ambiente Java típico O programa criado no editor éFase 1 Editor armazenado em Disco disco. O compilador cria bytecodes e osFase 2 Compilador armazena em disco Disco CarregadorFase 3 de Classe O carregador de classe coloca bytecodes na memória principal Disco
  6. 6. Um ambiente Java típico (cont.) Verificador O verificador deFase 4 bytecodes confirma de Bytecodes que todos os bytecodes são válidos e não violam restrições de segurança de JavaFase 5 Interpretador O interpretador lê os bytecodes e traduz para a linguagem de máquina do computador, e executa o programa
  7. 7. Um primeiro exemplo em JavaUse o Edit ou qualquer outro editor e digite o seguinte programa Java: //Um primeiro programa em Java 2 public class AloMundo { public static void main(String args[]) { System.out.println("Alo, mundo!"); } }Após digitá-lo, salve com o nome da classe, ou seja: AloMundo.java Java é uma linguagem case sensitive, ou seja, faz distinção entre letras maiúsculas e minúsculas em variáveis, comandos e arquivos.
  8. 8. Ao fazer a instalação no seu computador, verifique se as seguintes alterações foramfeitas no arquivo autoexec.bat (para o Windows 98): SET JAVA_HOME = C:JDK1.4.1 (ou o nome que você usou) SET PATH = C:JDK1.4.1bin;%PATH%; ( idem ) SET CLASSPATH = C:JDK1.4.1LIB;.; ( idem )Para compilar o programa, a partir da janela de comando, mude para odiretório onde o arquivo fonte foi armazenado e digite: javac AloMundo.java A compilação vai gerar um arquivo de bytecodes chamado AloMundo.class Para executar o programa, também a partir da janela de comando, digite: java AloMundoO comando java carrega o interpretador e indica que o arquivo AloMundo.classdeve ser interpretado e executado. A execução sempre começa pelo método main. Obs.: o comando java deve omitir o sufixo do arquivo a ser interpretado.
  9. 9. Entendendo o programa AloMundo AloMundo apresenta vários recursos importantes de Java: // Um primeiro programa em Java 2Comentário de linha. Um comentário de múltiplas linhas, de acordo com asespecificações da ferramenta de documentação javadoc, segue a sintaxe: /** Um primeiro programa em Java 2 * Autor: Prof. Wander */Definição de classe para AloMundo. Todo programa java consiste de uma oumais classes definidas pelo programador. public class AloMundo As palavras reservadas de Java devem ser escritas sempre em minúsculas.
  10. 10. Os nomes de classes, por convenção, são escritos com todas as palavrasiniciando com letras maiúsculas. Nomes de classes e quaisquer outros identificadores definidos pelo programador devem seguir as seguintes regras: • pode conter letras, números, caractere de sublinhar e cifrão • não pode começar com número • não pode conter espaços em brancoUma chave esquerda { inicia o corpo de cada definição de classe.Uma chave direita } correspondente termina cada definição de classe. public static void main(String args[]) O método main é parte de todo aplicativo Java, que começa a execução a partir deste ponto. Um método pode ser definido como um bloco de construção de programa. Uma definição de classe em Java possui um ou mais métodos.
  11. 11. A palavra-chave void indica o tipo de retorno do método main. Isto significa que main não retorna valor algum.Uma chave esquerda { inicia o corpo de cada definição de método.Uma chave direita } correspondente termina cada definição de método. System.out.println("Alo, Mundo!"); System.out é o objeto de saída padrão. Permite exibir informações na janela de comando a partir da qual o aplicativo Java é executado.O método System.out.println exibe uma linha de texto na janela decomando. Ao final, o cursor é posicionado no início de uma nova linha.Um método alternativo é System.out.print cuja diferença consiste emmanter o cursor imediatamente após o texto apresentado na janela de comando. Esta linha do programa Java constitui uma instrução. Toda instrução deve terminar com ponto-e-vírgula, chamado terminador de instrução.
  12. 12. "Alo, Mundo" é uma string de caracteres, e deve ser definida entre aspas duplas.Nem toda classe necessariamente deve possuir um método main e, portanto, serum aplicativo Java. O exemplo a seguir ilustra isto:public class Teste { public static void main(String a[]){ AloMundo.Alo(); }}class AloMundo { public static void Alo(){ System.out.println("Alo, mundo"); }}
  13. 13. GUI em Java: pacote SwingJava possui dois pacotes de interfaces gráficas com o usuário. O mais antigo é aAWT (Abstract Windowing Toolkit), que utiliza os componentes gráficosnativos do sistema operacional. O exemplo abaixo emprega o pacote Swing(javax.swing), que emprega componentes gráficos Java.//AloMundo com interface graficaimport javax.swing.JOptionPane;public class AloMundo2{ public static void main(String args[]) { JOptionPane.showMessageDialog( null,"Alô, Mundo!"); System.exit(0); }} Após digitá-lo, salve com o nome da classe, ou seja: AloMundo2.java
  14. 14. Java possui uma extensa biblioteca de classes pré-definidas disponíveis para oprogramador.Estas classes são agrupadas em categorias de classes relacionadas, chamadas depacotes.O conjunto de pacotes Java é denominado biblioteca de classes Java ou JavaApplication Programming Interface – API. O pacote javax.swing ajuda o programador a definir interfaces gráficas com o usuário (Graphical User Interfaces – GUIs)import javax.swing.JOptionPane;O comando import indica a localização da classe JoptionPane, presente nopacote de classes javax.swingSaída do programa AloMundo2.java:
  15. 15. JOptionPane.showMessageDialog(null,"Alô, Mundo!"); O método showMessageDialog requer dois argumentos, separados por vírgulas. O segundo argumento deve ser do tipo String. System.exit(0); O método exit() da classe System termina o programa. É obrigatório em todo programa que usa interface gráfica. O argumento 0 indica que o aplicativo terminou com sucesso.A classe System é parte do pacote java.lang, que é importado automatica-mente em todo programa Java. O método exit()termina a JVM após o encerramento da aplicação gráfica.
  16. 16. VariáveisEm Java, é necessário definir formalmente uma variável antes de utilizá-la.Isto implica em declarar o seu nome e tipo de informação que irá armazenar. int numero; String nome; double preco; boolean flag;É uma boa prática de programação definir uma variável por linha.Existem três tipos de variáveis em Java: locais, de instância e de classe.As variáveis locais podem ser declaradas em qualquer lugar dentro de ummétodo. Uma boa prática de programação consiste em defini-las imediata-mente após a chave de abertura do método.Atenção: todas as variáveis locais precisam ser inicializadas antes de seremutilizadas, caso contrário, o compilador acusará erro!
  17. 17. As variáveis de instância podem ser declaradas em qualquer lugar dentro deuma classe. Uma boa prática de programação consiste em defini-las imediata-mente após a chave de abertura da classe.As definições de variáveis de instância, ao contrário das variáveis locais, rece-bem automaticamente um valor inicial padrão, especificado pelo compilador.Variáveis numéricas recebem 0, de caracteres, 0, lógicas, false,objetos, null.class Teste { int numero; public static void main(String args[]) { Teste teste = new Teste(); System.out.println(teste.numero); }}Uma variável de instância só pode ser referenciada em uma instância daclasse.
  18. 18. As variáveis de classe, definidas pelo modificador static, podem serdeclaradas em qualquer lugar dentro de uma classe.As definições de variáveis de classe, da mesma forma que as variáveis deinstância, recebem automaticamente um valor inicial padrão, especificadopelo compilador. Variáveis numéricas recebem 0, de caracteres, 0,lógicas, false, objetos, null.class Teste { static int numero; public static void main(String args[]) { System.out.println(numero); }}Uma variável de classe pertence à classe, independe de qualquer instanciaçãode objetos da classe.
  19. 19. Tipos de dados Existem oito tipos de dados primitivos em Java para o armazenamento de inteiros, números de ponto flutuante, caracteres e valores lógicos. Ao contrário do que acontece em outras linguagens de programação, em Java estes tipos primitivos têm o mesmo tamanho e características em qualquer plataforma de hardware e sistema operacional. boolean 08 bits true ou false char 16 bits u0000 a uFFFF byte 08 bits -128 a 127 short 16 bits -32.768 a 32.767 int 32 bits -2.147.483.648 a 2.147.483.647 long 64 bits até 9.223.372.036.854.775.807 float 32 bits até 3.40292347E+38 double 64 bits até 1.7976931348623157E+308Obs.: Os caracteres Unicode são usualmente expressos em termos de um esquemade codificação hexadecimal. O prefixo u indica um valor Unicode.
  20. 20. import javax.swing.JOptionPane;public class Teste { public static void main(String[] args) { JOptionPane.showMessageDialog(null,""+Double.MAX_VALUE); System.exit(0); }}O exemplo acima ilustra a utilização de uma variável de classe, MAX_VALUE,da classe Double. Esta classe é chamada empacotadora ou wrapper. Cada umdos tipos primitivos Java possui a sua correspondente classe empacotadora.A variável de classe MAX_VALUE retorna o valor máximo do tipo primitivoutilizado, no caso, double.
  21. 21. Se o valor de uma variável não deve ser alterado durante a execução do aplicativo Java, você poderá usar uma variável constante, que é definida através da palavra-chave final.final double PI = 3.141592;final char CODIGO = &; Por convenção, programadores Java utilizam maiúsculas para definir nomes de constantes.Um outro conceito importante em Java é o de literal, que consiste em qualquernúmero – no caso de tipos numéricos – que representam diretamente um valor.public class Teste { public static void main(String a[]){ float total; total = 5.5; //Erro!! System.out.println(total); }}
  22. 22. public class Teste { public static void main(String a[]){ float total; total = 5.5F; System.out.println(total); }}O erro acontece porque Java trata todas as operações de ponto flutuante emdouble e a conversão de double para float não é automática.Também é possível declarar literais de ponto flutuante com expoentes:public class Teste { public static void main(String a[]){ double total; total = 1.0e5; System.out.println(total); }}
  23. 23. Literais de caracteres são expressos por meio de um único caracter delimitadopor apóstrofos. Alguns literais de caracteres úteis são apresentados abaixo: n nova linha t tabulação b retrocesso barra apóstrofo " aspas public class Teste { public static void main(String a[]){ System.out.println("Clube Atletico Mineiro: n"Galo forte e vingador!""); } }
  24. 24. Saída de dados com printfUm novo recurso, introduzido em J2SE 5.0, é o método System.out.printf, capaz de formatar mais adequadamente uma saída em Java, em umaforma semelhante à função printf da linguagem C.public class Teste { public static void main(String[] a) { String s = "Atlético"; System.out.printf(" Grandioso %sn",s); }}Grandioso AtléticoO primeiro argumento de printf é a string de formatação, composta deconstantes string e caracteres de formatação. No exemplo acima, odelimitador % seguido de s indica que o método deve ter um outroargumento do tipo String.
  25. 25. Os caracteres de formatação podem também ser usados para compor umaString, usando o método String.format, conforme no exemplo a seguir: public class Main { public static void main(String[] args) { int a = 65; String s = String.format("char: %c integer: %d hexa: %h octal: %o",a,a,a,a); System.out.println(s); } }Para o exemplo acima, onde é usado o mesmo argumento para a formatação,existem alternativas para a codificação: String s = String.format("char: %c integer: %<d hexa: %<h octal: %<o",a); String s = String.format("char: %1$c integer: %1$d hexa: %1$h octal: %1$o",a);
  26. 26. Entrada de dados com ScannerA leitura de dados de entrada em aplicativos através da janela decomando do sistema operacional era surpreendentemente complexa até aversão 1.4.2 do J2SE. Isto não era problema para aplicativos com recursosGUI, mas tornava-se desconfortável para estudantes interessados em escreverprogramas simples com o propósito de aprender Java.J2SE 5.0 introduz a classe java.util.Scanner para a entrada de dados,inclusive através da entrada padrão, System.in.O exemplo a seguir apresenta uma aplicação Java para a entrada de doisnúmeros pelo teclado e a saída da soma na janela de comando do sistemaoperacional.É necessário criar uma instância da classe Scanner, passando comoargumento o objeto padrão de entrada, System.in, que irá capturar asentradas de dados via o teclado. O método nextInt(), da instância daclasse Scanner, lê o valor digitado e o armazena em uma variável do tipoint.
  27. 27. import java.util.Scanner;public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); int num1; int num2; int soma; System.out.print("Entre com o primeiro número: "); num1 = entrada.nextInt(); System.out.print("Entre com o segundo número: "); num2 = entrada.nextInt(); soma = num1 + num2; System.out.printf("A soma é: %d", soma); }}Um exemplo de saída do aplicativo acima:Entre com o primeiro número: 34Entre com o segundo número: 23A soma é: 57
  28. 28. O exemplo seguinte calcula o seno de um valor fornecido em tempo de execução: import java.util.Scanner; public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); double angulo; double seno; System.out.print("Entre com o ângulo em graus: "); angulo = entrada.nextDouble(); seno = Math.sin(Math.toRadians(ângulo)); System.out.println("Seno: " + seno); } }O método nextDouble(), da classe Scanner, captura um double daentrada padrão System.in e o armazerna em uma variável do tipo double. A classe Math do pacote java.lang define a constante PI através de uma variável de classe. O método estático Math.sin(double)retorna o seno de um ângulo em radianos passado como argumento.
  29. 29. Import StaticA versão J2SE 5.0 incorporou o recurso import static, que permiteimportar os métodos e atributos estáticos, permitindo utilizá-los sem oprefixo de classe.O código anterior pode ser reescrito, a partir da versão 5.0, conforme abaixo:import java.util.Scanner;import static java.lang.Math.*;public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); double angulo; double seno; System.out.print("Entre com o ângulo em graus: "); angulo = entrada.nextDouble(); seno = sin(toRadians(ângulo)); System.out.println("Seno: " + seno); }}
  30. 30. Entrada de dados com SwingO próximo exemplo apresenta uma solução para a soma de dois númerosinteiros usando o pacote javax.swing de interface gráfica de Java.import javax.swing.JOptionPane;import static javax.swing.JOptionPane.*;public class Adição { public static void main(String[] args){ String s1, s2; int num1, num2, soma; s1 = JOptionPane.showInputDialog ("Entre com o 1º número"); s2 = JOptionPane.showInputDialog ("Entre com o 2º número"); num1 = Integer.parseInt(s1); num2 = Integer.parseInt(s2); soma = num1 + num2; JOptionPane.showMessageDialog(null,"A soma é " + soma, "Resultado", PLAIN_MESSAGE); System.exit(0); }}
  31. 31. Esta versão do método showInputDialog da classe JOptionPanerequer quatro argumentos. O primeiro será null. O segundo é a mensagema ser exibida na caixa de diálogo. O terceiro é o texto a ser exibido na barrade título. O quarto é um valor que indica o ícone do tipo de diálogo demensagem a ser exibido. No programa Adição.java, trocando-seo quarto argumento de JOptionPane para INFORMATION_MESSAGE, temos a seguinte saída para a caixa de diálogo:
  32. 32. O método parseInt(String) da classe Integer recebe como argumentoum valor String e retorna o valor convertido em inteiros. Se o argumentonão puder ser convertido, a máquina virtual Java lançará uma exceção do tipoNumberFormatException. public class ParseInt { static int i; public static void main(String[] args) { i = Integer.parseInt("um"); System.out.println(i); } }As classes empacotadoras Double e Float, dentre outras, possuem tambémseus métodos parse, para a conversão do valor de um objeto String em tiposprimitivos float e double, respectivamente. public class ParseDouble { public static void main(String[] args) { double d = Double.parseDouble("25.4"); System.out.println(d); } }
  33. 33. AutoboxingA versão J2SE 5.0 incorporou o recurso denominado autoboxing, queconsiste na conversão automática entre tipos primitivos e seus wrappers(classes empacotadoras).public class AutoBoxing { public static void main(String[] args) { int meuInt = 25; Integer meuInteger = meuInt; System.out.printf("Integer: %dtint: %d", meuInteger, meuInt); }}public class Unboxing { public static void main(String[] args) { Integer meuInteger = new Integer("12"); int meuInt = meuInteger; System.out.println(meuInt); }}
  34. 34. Comando if / elseimport javax.swing.JOptionPane;public class ParImpar{ public static void main(String args[]) { String s; String resp = "O número "; int i; s = JOptionPane.showInputDialog( "Entre com onnúmero inteiro"); i = Integer.parseInt(s); if((i % 2) == 0) resp = resp + s + " é par!"; else resp = resp + s + " é ímpar!"; JOptionPane.showMessageDialog(null, resp, "Par ou Ímpar", JOptionPane.INFORMATION_MESSAGE); System.exit(0); }}
  35. 35. O exemplo anterior contêm apenas uma única instrução associada as cláusulas if e else. Para incluir várias instruções no corpo do comando é necessário chave de abertura { e fechamento } de bloco.Os operadores aritméticos em Java são representados da seguinte forma:+(soma), -(subtração), *(multiplicação), /(divisão), %(resto da divisão inteira).Os operadores relacionais em Java são representados da seguinte forma:== (igual), != (diferente), >, <, >= e <=.public class Modulo { public static void main(String[] args) { System.out.print(5.5 % 2); }}
  36. 36. O exemplo anterior faz uma comparação entre uma variável e um literal do tipo primitivo int. Cuidado com expressões relacionais para comparar objetos, ao invés de tipos primitivos.import java.util.Scanner;public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); String string; System.out.print("Digite Sim: "); string = entrada.nextLine(); if(string == "Sim") System.out.println("Iguais"); else System.out.println("Diferentes"); }}O resultado impresso será Diferentes, uma vez que o objeto sim referenciauma posição de memória diferente do literal Sim.
  37. 37. Para comparar se o conteúdo de dois objetos String são idênticos, umasugestão é empregar o método equals() da classe String. import java.util.Scanner; public class Teste { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); String string; System.out.print("Digite Sim: "); string = entrada.nextLine(); if(string == "Sim") System.out.println("Iguais"); else System.out.println("Diferentes"); } }Outros dois métodos da classe String são equalsIgnoreCase(), seme-lhante a equals() e charAt(), que obtém o tipo primitivo char corres-pondente a posição informada como argumento para o método.
  38. 38. Um applet Java simplesUm applet Java é um tipo especial de programa que é executado em umnavegador de páginas da World Wide Web.import javax.swing.JApplet;import java.awt.Graphics;public class AloMundoApplet extends JApplet { public void paint(Graphics g){ g.drawString("Alô, Mundo!",25,25); }}Para executar o programa acima em um browser, é necessário um arquivo htmldo tipo AloMundoApplet.html, que carrega a classe AloMundoApplet:<html><applet code="AloMundoApplet.class" width=300 height=30></applet></html>
  39. 39. A palavra-chave extends indica que aclasse AloMundoApplet é uma subclasse(ou classe derivada) de JApplet (chamadasuperclasse ou classe básica).A classe JApplet faz parte do pacotejavax.swing. Herança: AloMundoApplet herda to- dos os atributos (dados) e comportamen- tos (métodos) da classe JApplet.AloMundoApplet sobrescreve o método paint da classe JApplet. Estemétodo requer como parâmetro um objeto da classe Graphics, por convençãonomeado por g, usado por paint para desenhar imagens no applet. A classeGraphics pertence ao pacote java.awt.O método drawString da classe Graphics desenha o string de caracteresAlô, Mundo! no applet, a partir da posição 25 pixels na horizontal e 25 pixels,na vertical. A origem das coordenadas é o canto superior esquerdo do applet.
  40. 40. Para executar um applet é necessário criar um arquivo de html. O utilitário appletviewer permite carregar o arquivo html e este, por sua vez, carrega o applet. Para executá-lo, use appletviewer AloMundoApplet.html Os componentes width e height do tag <applet> indicam respectiva- mente a largura e a altura do applet, em pixels, no navegador. Cuidado! Se você não definir os componentes de largura e altura adequadamente em html, seu applet pode não ser desenhado correta- mente na tela.Se você estiver utilizando o editor de programas TextPad ou o ambiente dedesenvolvimento Eclipse, não será necessário criar o arquivo html, uma vezque ele o fará automaticamente e executará o seu applet no appletviewer da Sun.Ao utilizar o ambiente integrado BlueJ, você poderá ainda escolher se desejaexecutar o applet através do appletviewer ou do navegador instalado emseu computador.
  41. 41. import javax.swing.*; import java.awt.*; public class AloMundo2Applet extends JApplet { public void paint(Graphics g) { g.setColor(Color.red); g.drawLine(15,10,210,10); g.drawLine(15,30,210,30); g.drawString("Alô, Mundo!",25,25); } } O método setColor(Color.red) de- fine a cor vermelha para a instância g da classe Graphics. red é uma constante da classe Color do pacote java.awt.O método drawLine da classe Graphicsdesenha linhas no applet. Os 4 argumentosreferem-se as coordenadas x e y do pixelinicial e do pixel final da linha a serdesenhada.
  42. 42. Estrutura de repetição while public class Soma { public static void main(String[] args) { int i = 1; int soma = 0; while (i <= 100) { soma = soma + i; i = i + 1; } System.out.println(soma); } }É necessário uma chave de abertura { e uma chave de fechamento } de bloco,delimitando o conjunto de instruções associadas a estrutura de repetição.
  43. 43. import java.text.DecimalFormat;import java.util.Scanner;public class Teste { public static void main(String args[]) { Scanner entrada = new Scanner(System.in); byte n = 0; //contador de notas int nota, soma = 0; double media; System.out.print("Nota do aluno, -1 termina: "); nota = entrada.nextInt(); while (nota != -1) { soma = soma + nota; n = (byte) (n + 1); System.out.print("Nota do aluno, -1 termina: "); nota = entrada.nextInt(); } DecimalFormat df = new DecimalFormat("0.00"); if (n != 0) { media = soma / n; System.out.println("Media igual a " + df.format(media)); } else System.out.println("Nenhuma nota foi digitada"); }}
  44. 44. O pacote java.text disponibiliza classes para formatação de valores e expressões. A classe DecimalFormat é usada neste exemplo. O formato 0.00 especifica que a saída terá pelo menos um dígito à esquerda do ponto decimal e exatamente dois dígitos à direita do ponto decimal. O método format desta classe é usado para formatar uma variável do tipo primitivo double.Este exemplo apresenta um operador de coerção explícita (casting) paraconverter o resultado da expressão (n + 1) em um valor do tipo byte. Estaconversão é necessária porque o literal 1 é do tipo int o que implica que aexpressão retornará um valor também do tipo int. public class CoercaoExplicita { public static void main(String[] args) { float f; f = (float) 5.5; System.out.print(Float.toString(f)); } }
  45. 45. A partir de J2SE 5.0, a classe Formatter, através do método printf,também pode ser usada para a formatação da saída em System.out.import java.util.Scanner;import static java.lang.Math.*;public class Teste { public static void main(String args[]){ double raio; double area; Scanner entrada = new Scanner(System.in); System.out.print("Informe o raio do círculo: "); raio = entrada.nextDouble(); area = PI * pow(raio, 2); System.out.printf ("A area do circulo equivale a %6.2f", area); }}O método estático Math.pow(base,exp) implementa a exponenciação.Este método recebe dois argumentos double e retorna um valor double.
  46. 46. A tabela a seguir apresenta alguns códigos de formatação da classeFormatter e usados em System.out.printf. f número de ponto flutuante em formato fixo e,E número de ponto flutuante em notação exponencial (formato científico) g,G número em ponto flutuante em formato genérico (fixo para números pequenos e exponencial para grandes) d inteiros em decimal. o número inteiro em octal x,X Número inteiro em hexadecimal s,S converte qualquer valor e apresenta em string t,T formato para data e hora (com códigos adicionais para dia, mês, ano, etc.)
  47. 47. import java.util.Date; public class Teste { public static void main(String args[]){ System.out.printf("Hoje: %1$td de %1$tB de %1$tY", new Date()); } }A classe Date instancia um objeto contendo a data e hora do sistemaoperacional. Os caracteres de formatação d, B e Y exibem, respectivamente, odia, com 2 caracteres, o mês, por estenso, e o ano, com 4 dígitos. A tabela decaracteres de formatação para data e hora contempla diversas outraspossibilidades de apresentação. Hoje: 05 de Janeiro de 2005
  48. 48. Operadores de AtribuiçãoJava herda de C/C++ a característica dos operadores de atribuição, usadospara abreviar as expressões de atribuição. Operador Expressão Equivalência += c += 7 c = c + 7 -= d -= 4 d = d – 4 *= e *= 5 e = e * 5 /= f /= 3 f = f / 3 %= g %= 2 g = g % 2Também estão disponíveis em Java o operador unário de incremento ++ e ooperador unário de decremento --. ++ pré-fixado ++a ++ pós-fixado a++ -- pré-fixado --b -- pós-fixado b--
  49. 49. public class Incremento { public static void main(String args[]) { int i; i = 1; System.out.println(i); System.out.println(i++); System.out.println(i); i = 1; System.out.println(i); System.out.println(++i); System.out.println(i); }}1 Os operadores de incremento e decremento (++ e --)1 incrementam e decrementam variáveis de tipo inteiro de2 uma unidade. Na forma pré-fixada o operador modifica o1 valor da variável antes que o valor seja usado na expressão.2 Na forma pós-fixada o operador modifica o valor da variável2 depois que o valor é usado na expressão onde está a variável.
  50. 50. Estrutura de repetição for A estrutura for em Java é constituída de um valor inicial, um teste e um passo, delimitados por ponto-e-vírgula. import java.awt.Graphics; import javax.swing.JApplet; public class TesteFor extends JApplet { public void paint(Graphics g) { for (int i = 1; i <= 10; i++) g.drawLine(10, 10, 250, i * 10); } }Exemplo de Applet Java utilizando a estrutura derepetição for. Observe que não foi necessáriodefinir chaves de abertura e fechamento paradelimitar um bloco de comandos associados aofor, uma vez que só há uma linha de instrução.
  51. 51. Exemplo: programa para somar os números pares entre 0 e 100, usando laço for.import javax.swing.JOptionPane;import static javax.swing.JOptionPane.*;public class SomaPar { public static void main(String args[]) { int soma = 0; for (int i = 2; i <= 100; i += 2) soma += i; JOptionPane.showMessageDialog(null, "Valor da soma: " + soma, "Soma dos pares até 100", INFORMATION_MESSAGE); System.exit(0); }}
  52. 52. Exemplo: programa para calcular a potência de 2 dos números inteiros de 1 a 10. import javax.swing.*; public class Potencia { public static void main(String args[]) { double potencia; JTextArea area = new JTextArea(); area.setText("NumerotQuadradon"); for (int i = 1; i <= 10; i++) { potencia = Math.pow(i, 2); area.append("" + i + t + potencia + n); } JOptionPane.showMessageDialog(null, area, "Quadrado dos numeros de 1 a 10", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } } Java não possui um operador nativo para exponenciação.
  53. 53. Este exemplo utiliza a classe JTextArea do pacote javax.swing. Esta classe define um componente GUI capaz de armazenar e exibir múltiplas linhas de texto. Os métodos setText(String) e append (String) permitem, respectivamente, atribuir e acrescentar Strings na instância da classe JTextArea. public class TestaFor { static int i; public static void main(String[] args) { for( ; i < 10; ) System.out.print(i++ + " "); } }Uma estrutura for pode ser construída sem um ou mais de seus componentes.
  54. 54. Estrutura de seleção múltipla switchimport javax.swing.*;public class Calculadora { public static void main(String args[]) { String s1, s2, s3; float f1, f2, f3=0; char c; s1 = JOptionPane.showInputDialog("Primeiro operando: "); s2 = JOptionPane.showInputDialog("Segundo operando: "); s3 = JOptionPane.showInputDialog("Operador aritmético: "); f1 = Float.parseFloat(s1); f2 = Float.parseFloat(s2); c = s3.charAt(0); switch (c) { case + : f3 = f1 + f2; break; case - : f3 = f1 - f2; break; case * : case x : f3 = f1 * f2; break; case / : f3 = f2 / f1; break; default: } JOptionPane.showMessageDialog(null, "Resultado: " + f3, "calculadora", JOptionPane.INFORMATION_MESSAGE); System.exit(0); }}
  55. 55. A variável ou expressão de controle da estrutura de seleção switch deveassumir um valor inteiro, ou seja, do tipo byte, short, int ou char.O comando break é necessário para impedir que a execução do programacontinue nas cláusulas case seguintes.A cláusula default não é obrigatória.O método charAt() da classe String permite selecionar o caracter cujaposição é especificada como parâmetro. A posição inicial corresponde a 0.
  56. 56. Estrutura de repetição do/while A estrutura do/while testa a condição de continuação do laço depois do corpo do laço ser executado. Portanto, o corpo do laço sempre é executado pelo menos uma vez. public class TestaDoWhile { public static void main(String args[]) { byte i; do { i = (byte) (Math.random() * 10); System.out.print(i + " "); } while (i != 0); } }O método random() da classe Math gera um número aleatório do tipodouble compreendido entre 0, inclusive, e 1, exclusive. Não é necessário ocomando import para a classe Math, que pertence ao pacote java.lang.
  57. 57. Operadores Lógicos Java possui vários operadores lógicos que podem ser utilizados para obter combinações lógicas do tipo AND, OR, XOR e NOT.Para combinações AND, os operadores lógicos & e && são utilizados. Se & forempregado, as expressões em ambos os lados são avaliadas.Para combinações OR, os operadores lógicos | e || são utilizados. A combina-ção XOR possui o operador lógico ^. Isto resulta em um valor true se aexpressão contiver um valor true e um false. A combinação NOT utiliza ooperador lógico !. public class TestaOR1 { public static void main(String args[]) { int i = 2; int j = 3; if((j == i++) | (i < ++j)) System.out.println("i = " + i + " j = " + j); } }
  58. 58. public class TestaOR2 { public static void main(String args[]) { int i = 2; int j = 3; if((j == i++) || (i < ++j)) System.out.println("i = " + i + " j = " + j); }}Os dois exemplos retornam o mesmo resultado. Na prática, para avaliação deexpressões lógicas, recomenda-se empregar os operadores && e ||.public class TestaXOR { public static void main(String args[]) { int i = 2; int j = 3; if((j == i++) ^ (i < ++j)) System.out.println("XOR OK"); else System.out.println("XOR not OK"); }}
  59. 59. MétodosA maioria dos programas de computador usados profissionalmente são muitomais extensos do que os exemplos apresentados. A abordagem para grandesprogramas é construí-los a partir de pequenas partes ou módulos.Os módulos em Java são chamados métodos e classes. Os programas sãoescritos combinando novos métodos e classes do usuário com métodos e classesdisponíveis na Java API e também com métodos e classes já disponibilizadospor outros programadores. Cada método deve se limitar a executar uma única e bem definida tarefa e o nome do método deve efetivamente expressar isto.import java.util.Scanner;public class NomeUsuario { public static void main(String args[]) { Scanner ent = new Scanner(System.in); System.out.print("Digite seu nome: "); String nome = ent.nextLine(); System.out.println("Olá, %s", nome); }}
  60. 60. Neste exemplo, a classe NomeUsuario, definida pelo programador, invoca ométodo readLine da classe Console. A definição desta classe encontra-se nopacote corejava. Esta classe não faz parte da Java API. Foi escrita poroutros programadores Java e disponibilizada para uso em [Horstmann, 2001].A classe do usuário Saudação abaixo, utiliza um método definido pelousuário chamado imprime. Este método possui um argumento do tipo Stringe não retorna nenhum valor. É um método do tipo void.import java.util.Scanner;public class Saudação { public static void main(String args[]) { Scanner entrada = new Scanner(System.in); String nome = entrada.nextLine(); imprime(nome); } static void imprime(String s){ System.out.printf("Olá, %s", s); }}
  61. 61. public class QuadInt { public static void main(String args[]) { int i; for(int x = 1; x <= 10; x++) { i = quadrado(x); System.out.printf ("Quadrado de %02d: %03dn", x, i); } } //Método quadrado public static int quadrado(int y){ return (int) Math.pow(y, 2); }}A classe do usuário QuadInt utiliza um método definido pelo usuáriochamado quadrado. Este método possui um argumento do tipo int e retornaum valor também do tipo int.
  62. 62. import javax.swing.*;import java.awt.*;public class Celsius extends JApplet { double c; double f; public void init() { String sc; sc = JOptionPane.showInputDialog ("Entre com a temperaturanem graus Celsius"); c = Double.parseDouble(sc); f = ( 9 * c ) / 5 + 32; } public void paint(Graphics g) { g.drawString("A temperatura " + c + "°C equivale a " + f + "°F", 25, 25); }}A classe do usuário Celsius sobrescreve os métodos init() e paint()de JApplet. Em um applet, o método paint() deve ser usado unicamentepara formatar uma saída utilizando métodos da classe Graphics.
  63. 63. Regras de Escopo Todos os exemplos vistos até aqui utilizam identificadores para nomes de variáveis e de objetos. Identificadores também são usados para nomear classes e métodos definidos pelo usuário.Cada identificador tem como atributos a duração e o escopo. A duração ou tempode vida é o período durante o qual o identificador existe na memória. O escopo dizrespeito ao local onde o identificador pode ser referenciado no programa. public class Escopo { int x = 1; public static void main(String args[]) { Escopo escopo = new Escopo(); int x = 5; System.out.println("x vale " + x); escopo.metodoA(); escopo.metodoB(); escopo.metodoA(); escopo.metodoB(); System.out.println("x vale " + x); }
  64. 64. public void metodoA() { int x = 25; System.out.println("x em A vale " + x); x++; System.out.println("x em A vale " + x); } public void metodoB() { System.out.println("x em B vale " + x); x *= 10; System.out.println("x em B vale " + x); }}x vale 5 Uma variável local só é visível no método onde foix em A vale 25 criada, este é o seu escopo. Uma variável de instância éx em A vale 26x em B vale 1 visível em todo o contexto da instância da classe, este é ox em B vale 10 seu escopo. Uma variável de classe é visível por todas asx em A vale 25 instâncias da classe.x em A vale 26x em B vale 10 Duração: uma variável local existe apenas durante ax em B vale 100 execução do método. Uma variável de instância existex vale 5 durante a existência da instância da classe.
  65. 65. Sobrecarga de MétodosJava permite que vários métodos com o mesmo nome sejam definidos, contantoque tais métodos tenham diferentes conjuntos de parâmetros. Esta característica échamada sobrecarga de métodos.public class Sobreposicao { public static void main(String args[]) { Sobreposicao sobre = new Sobreposicao(); System.out.println("Quadrado de 3: " + sobre.quadrado(3)); System.out.println("Quadrado de 3.5: " + sobre.quadrado(3.5)); } public int quadrado(int i) { return i*i; } public double quadrado(double f) { return f*f; }}
  66. 66. Métodos sobrecarregados são distinguidos por sua assinatura, ou seja, uma combinação do nome do método e seu tipo de parâmetro.public class Area { public static void main(String args[]) { Area area = new Area(); System.out.println("Área quadrado.:" + area.area(3)); System.out.println("Área retângulo:" + area.area(3,4)); System.out.println("Área cubo.....:" + area.area(3,2,3)); } public int area(int i) { return i * i; } public int area(int i, int j) { return i * j; } public int area(int i, int j, int k) { return i * j * k; }}
  67. 67. Arrays Um array é um grupo de posições contíguas na memória que possuem o mesmo nome e o mesmo tipo. Em java, os arrays são tratados como objetos e, portanto, devem ser instanciados com o comando new. int[] array; //declara o array int array[]; //declara o array array = new int[12]; //instancia o arrayQue também pode ser escrito na forma: int[] array = new int[12]; // ou... int array[] = new int[12];Quando um array é instanciado, seus elementos são automaticamente inicializa-dos com zero para tipos de dados numéricos e null para referências a objetos.Em Java, o primeiro elemento de um array é sempre referenciado pelo índice 0.O array array acima, poderá ser referenciado pelos índices de 0 a 11.
  68. 68. import javax.swing.*;public class Array { public static void main(String args[]) { String saida = ""; int[] i; i = new int[10]; saida += "Índice - Valorn"; for (int j = 0; j < i.length; j++) { i[j] = (int) (Math.random() * 10); saida += j + " - " + i[j] + "n"; } JOptionPane.showMessageDialog(null, saida, "Inicializando um array", JOptionPane.INFORMATION_MESSAGE); System.exit(0); }}A variável de instância length é a forma adequada de "percorrer" oselementos de um array em Java.
  69. 69. Os arrays, ao serem instanciados, sempre alocam valores iniciais para os seuselementos, mesmo que declarados como variáveis locais. public class TestaArray { public static void main(String[] args) { byte[] array; array = new byte[5]; for(byte i = 0; i < array.length; i++) System.out.println(array[i]); } } Os elementos de um array podem ser alocados e inicializados na sua própria declaração. O exemplo abaixo especifica um array instanciado implicitamente com 4 elementos.String nomes[] = {"Ana", "José", "Maria", "Rita"}; Se você tentar acessar um elemento cujo índice seja inexistente, lança- rá uma exceção do tipo ArrayIndexOutOfBoundsException.
  70. 70. Passando arrays para métodosExistem duas maneiras de se passar argumentos para métodos: por valor e porreferência. Em java, variáveis de tipo primitivo são sempre passadas por valore objetos, incluindo arrays, são sempre passados por referência.public class Parametro { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; System.out.println("Valores originais do array:"); for(int i = 0; i < array.length; i++) System.out.print(array[i] + " "); Parametro p = new Parametro(); p.modificaArray(array); System.out.println("nValores modificados no metodo:"); for(int i = 0; i< array.length; i++) System.out.print(array[i] + " "); System.out.println ("nValor de a[3] antes da passagem: " + array[3]); p.modificaElemento(array[3]); System.out.println ("Valor de a[3] depois da passagem: " + array[3]);}
  71. 71. public void modificaArray(int[] a) { for(int j = 0; j < a.length; j++) a[j] *= 2; } public void modificaElemento(int e) { e *= 2; }}Valores originais do array:1 2 3 4 5Valores modificados no metodo:2 4 6 8 10Valor de a[3] antes da passagem: 8Valor de a[3] depois da passagem: 8 Para passar um array como argumento para um método, basta especi- ficar o nome da instância, sem colchetes.
  72. 72. Arrays multidimensionais Arrays com dois índices são utilizados normalmente para representar tabelas de valores consistindo de informações organizadas em linhas e colunas.Em java, um array bidimensional, do tipo m[2][2], pode ser declarado einicializado com: int[][] m = {{1, 2}, {3, 4}};O exemplo abaixo apresenta algumas das potencialidades de arrays em Java:public class Arrays { public static void main(String[] args) { String[][] s1 = new String[2][2]; s1[0][0] = "Rita"; Rita String[] s2 = {"Julia", "Augusto"}; null s1[1] = s2; Julia for(int i = 0; i < s1.length; i++) Augusto for(int j = 0; j < s1[i].length; j++) System.out.println(s1[i][j]); }}
  73. 73. Estrutura for eachJ2SE 5.0 apresenta a estrutura for each, capaz de fazer a iteração dearrays (e também outras estruturas de dados avançadas de Java). public class TestaForEach { public static void main(String args[]) { int[] array = new int[10]; for(int i : array) { array[i] = (int) (Math.random() * 10); System.out.printf("%02dn",array[i]); } } }A nova estrutura for each torna a iteração de arrays mais simples eelegante, e deve ser empregada sempre que possível pelo programador Java.
  74. 74. Parâmetros na linha de comandoOs argumentos digitados na linha de comando são passados para o métodomain() da classe invocada por meio de um vetor de Strings. Por exemplo, sefor executada a linha de comando java Teste um dois três o métodomain() da classe Teste receberá o seguinte vetor de Strings: args[0] = "um" args[1] = "dois" args[2] = "três"O espaço serve como separador de argumentos. Se for necessário tratar umacadeia de caracteres com espaço como um único argumento será preciso delimitá-la com aspas duplas. Assim, o comando java teste um "dois três"resulta no seguinte vetor: args[0] = "um" args[1] = "dois três"O exemplo a seguir imprime a soma dos argumentos passados na linha decomando.
  75. 75. public class Argumentos { public static void main(String[] args) { int soma = 0; for(int i = 0; i < args.length; i++) soma += Integer.parseInt(args[i]); System.out.print("Soma dos argumentos: "); System.out.println(soma); }}Para uma entrada do tipo java Argumentos 1 2 3 4 a saída será:Soma dos argumentos: 10
  76. 76. StringsEm Java, uma cadeia de caracteres é sempre um objeto da classe java.lang.String. Não existe um tipo primitivo para armazenar cadeias de caracteres. String s1; s1 = new String("abcdef"); String s2 = "ghijkl"; É possível instanciar um objeto da classe String usando o operador new ou atribuindo o valor diretamente, conforme acima.public class Strings { public static void main(String[] args) { String s1 = new String("abcdef"); String s2 = s1; if(s1 == s2) System.out.print("s1 igual a s2"); else System.out.print("s1 diferente de s2"); }}
  77. 77. No exemplo anterior, a referência para a instância s2 é apontada para o mesmoendereço de memória da instância s1, logo a saída da aplicação será: s1 igual a s2public class Strings2 { public static void main(String[] args) { String s1 = new String("abcdef"); String s2 = "abcdef"; if(s1 == s2) System.out.print("s1 igual a s2"); else System.out.print("s1 diferente de s2"); }}s1 diferente de s2Neste caso, a nova instância s2 criada referencia um endereço de memóriadiferente daquele apontado pela instância s1. Trata-se de objetos distintos!
  78. 78. Uma instância da classe String é um objeto imutável.public class Strings3 { public static void main(String[] args) { String s1 = "abc"; String s2 = s1; s1 = s1.concat("def"); if(s1 == s2) System.out.print("s1 igual a s2"); else System.out.print("s1 diferente de s2"); }}s1 diferente de s2Sendo um objeto String imutável, a linha s1 = s1.concat("def"); irápassar a referência ao objeto s1 para um outro endereço de memória. Assim, asinstâncias s1 e s2 não mais referenciam à mesma posição de memória.
  79. 79. public class Strings4 { public static void main(String[] args) { for(int i = 0; i < args.length; i++) System.out.print(args[i].length()); }}Para uma execução do tipo java Strings4 Clube Atlético Mineiro,a saída é:587A classe String possui o método length(), que retorna o tamanho dacadeia de caracteres. Lembre-se que arrays possuem um atributo length quecontém o tamanho do array. Como regra geral, os métodos que modificam o conteúdo de instâncias da classe String, como concat(), visto na página anterior, passam a referenciar para uma nova posição de memória.
  80. 80. Classe StringBufferA classe StringBuffer é uma alternativa mais adequada para a manipulaçãode cadeias de caracteres quando for necessário fazer muitas alterações nosvalores armazenados.Ao contrário da classe String, objetos da classe StringBuffer podem seralterados sem que a MVJ modifique a referência na memória.public class TestaStringBuffer { public static void main(String[] args) { StringBuffer sb1 = new StringBuffer("abc"); StringBuffer sb2 = sb1; sb1 = sb1.append("def"); if(sb1 == sb2) System.out.print("sb1 igual a sb2"); else System.out.print("sb1 diferente de sb2"); }}
  81. 81. sb1 igual a sb2O método append() da classe StringBuffer altera o valor da instância sb1,mantendo a referência a mesma posição de memória. Assim, sb2 e sb1continuam apontando para o mesmo endereço.Não é possível fazer uma conversão direta de String para StringBuffer,conforme visto abaixo: StringBuffer sb = new StringBuffer(); String s = "abcdef"; sb = s;O método append() da classe StringBuffer pode ser usado para este fim: StringBuffer sb = new StringBuffer(); String s = "abcdef"; sb.append(s);Para converter um objeto StringBuffer em String, deve empregar ométodo toString(): s = sb.toString();
  82. 82. Enumerated TypesJ2SE 5.0 incorpora (finalmente!) o recurso de tipos enumerados, comum emC/C++. Um enum é um tipo especial de classe, definida em java.lang.Enum.public class TestaEnums { enum Times {ATLÉTICO, VASCO, GRÊMIO, CORITIBA,BAHIA}; public static void main(String[] args) { for(Times time : Times.values()) System.out.printf("%sn", time); }}ATLÉTICOVASCOGRÊMIOCORITIBABAHIACada identificador (ex.: Times.ATLÉTICO) é um objeto da classe Enum.
  83. 83. É possível percorrer parte de um enum usando o método java.util.EnumSet.range, conforme no exemplo que se segue.import java.util.EnumSet;public class Teste { enum Semana {DOMINGO, SEGUNDA, TERÇA, QUARTA, QUINTA, SEXTA, SÁBADO}; public static void main(String[] args){ for(Semana dia : EnumSet.range (Semana.SEGUNDA, Semana.SEXTA)) System.out.println(dia); }}Uma outra situação recomendada para o uso de enums é em comandos deseleção múltipla switch, conforme exemplo que se segue.
  84. 84. import java.util.Scanner;public class Teste { enum Operador {MAIS, MENOS, VEZES, DIVIDIDO_POR}; public static void main(String[] args) { double x = Double.parseDouble(args[0]); double y = Double.parseDouble(args[1]); double res = 0; for (Operador op : Operador.values()) { switch(op) { case MAIS: res = x + y; break; case MENOS: res = x - y;break; case VEZES: res = x * y;break; case DIVIDIDO_POR: res = x / y; } System.out.printf("%2.2f %s %.2f = %2.2fn", x, op, y, res); }
  85. 85. Programação baseada em objetosEm linguagens como Pascal e C, a programação é orientada à ação. Em Java, aprogramação é orientada a objetos.Os programadores Java concentram-se em escrever seus próprios tipos definidospelo usuário, chamados classes. Cada classe contém dados (atributos) bem comoo conjunto de métodos que manipulam os dados. class Produto extends Object { public int codigo; public String nome; public int quantidade; public double preco; public Produto(int c, String n, int q, double p){ codigo = c; nome = n; quantidade = q; preco = p; } }
  86. 86. O exemplo anterior mostra a declaração de uma classe do usuário chamadaProduto que contém quatro atributos: codigo, nome, quantidade epreco. public class Produto extends Object indica que a classe do usuário Produto estende a classe Object (do pacote Java.lang).Na realidade, o usuário nunca cria uma classe a partir do zero. Neste exemplo,a classe Produto herda os atributos (dados) e comportamentos (métodos) daclasse Object. A palavra-chave public é um modificadores de acesso aos membros da classe. O modificador public indica que o acesso é permitido a outras classes.A classe Produto possui um método chamado Produto. Este é o métodoconstrutor da classe. Um construtor é um método especial que inicializa asvariáveis de instância de um objeto de classe. O método construtor somente pode ser invocado em um comando new, para instanciar um novo objeto da classe.
  87. 87. Utilize agora o BlueJ para instanciar alguns objetos da classe Produto. Você pode criar uma nova instância da classe Produto clicando com o botão direito do mouse sobre o ícone da classe. Você pode acessar os atributos de cada um dos objetos dando um duplo clique sobre o ícone das instâncias.
  88. 88. Inclua uma nova classe do usuário TestaProd em seu projeto no BlueJ. class TestaProd { public static void main(String a[]){ String s = " "; Produto produto; produto = new Produto(10, "Sabonete", 12, 1.20); System.out.println(produto.codigo + s + produto.nome); System.out.println(produto.quantidade + s + produto.preco); produto.quantidade = 100; System.out.println(produto.quantidade + s + produto.preco); produto.preco *= 1.10; System.out.println(produto.quantidade + s + produto.preco); } } A classe TestaProd declara uma variável produto do tipo Produto e a instancia, através do comando new, que invoca o método construtor.
  89. 89. A linha tracejada indica que a classe TestaProd usa métodos e/ou atributos da classe Produto.Atente para o importante fato de que a classe TestaProd só conseguiu acessardiretamente os atributos da classe Produto porque estes foram declaradoscomo public. O que aconteceria se eles fossem declarados como private?
  90. 90. class Empregado { private String nome; private double salario; //Método Construtor public Empregado(String n, double s) { nome = n; salario = s; } public void print() { System.out.println(nome + " " + salario); } public void aumentaSalario(double percentual) { salario *= 1 + percentual / 100; } }Os modificadores de acesso tem por objetivo definir a visibilidade de ummembro de uma classe (atributo ou método) em relação à outras classes. Omodificador private permite ao acesso apenas aos membros da própria classe.
  91. 91. public class TestaEmpregado { public static void main(String args[]) { Empregado[] empregado = new Empregado[3]; empregado[0] = new Empregado("Rita", 1000); empregado[1] = new Empregado("Maria", 1200); empregado[2] = new Empregado("Julia", 1500); for(int i = 0; i < empregado.length; i++) { empregado[i].aumentaSalario(5); empregado[i].print(); } }}Rita 1050.0Maria 1260.0Julia 1575.0 Observe que empregado é um array de instâncias da classe Empregado, contendo 3 objetos desta classe.
  92. 92. Os modificadores de acesso disponíveis são apresentados na tabela abaixo:Modificador Descriçãodefault Somente classes do mesmo pacote possuem acessopublic Todos possuem acessoprivate Apenas os membros da classeprotected Idêntico a default, com uma exceção:O modificador protected, além de permitir o acesso a membros do mesmopacote, permite o acesso a partir de subclasses, ainda que em outros pacotes. O modificador default é assumido, caso nenhum dos demais modificadores seja especificado. Não existe uma palavra reservada default em Java.
  93. 93. Sobrecarga de construtoresOs métodos de uma classe podem ser sobrecarregados. Para sobrecarregar ummétodo construtor, simplesmente forneça uma definição separada de cada umdos métodos sobrecarregados. Tais métodos devem possuir listas de parâme-tros diferentes.class Empregado { private String nome; private double salario; public Empregado(String n, double s) { nome = n; salario = s; } public Empregado(String n) { nome = n; salario = 500; }
  94. 94. Métodos set e getAs variáveis de instância definidas como privadas só podem ser manipuladasatravés de métodos da própria classe. Todavia, as classes podem fornecermétodos public para permitir a clientes da classe atribuir valores (set) ouobter (get) variáveis de instância declarados como private.public class Cliente { private String nome; private String endereco; private String telefone; public Cliente(String n, String e, String t) { nome = n; endereco = e; telefone = t; } public void setNome(String n) {nome = n;} public void setEndereco(String e) {endereco = e;} public void setTelefone(String t) {telefone = t;} public String getNome() {return nome;} public String getEndereco() {return endereco;} public String getTelefone() {return telefone;}}
  95. 95. public class TestaCliente { public static void main(String args[]) { Cliente fulano = new Cliente ("Fulano", "Rua Halfeld", "3213-5000"); Cliente beltrano = new Cliente ("Beltrano", "Rua Marechal", "3224-1000"); System.out.println("Cliente 1: " + fulano.getNome()+ ", " + fulano.getEndereco() + ", " + fulano.getTelefone() + "n"); System.out.println("Cliente 2: " + beltrano.getNome() + ", "+ beltrano.getEndereco() + ", " + beltrano.getTelefone() + "n"); fulano.setNome("Ciclano"); beltrano.setEndereco("Rua Sao Joao"); fulano.setTelefone(beltrano.getTelefone()); System.out.println("Cliente 1: " + fulano.getNome()+ ", " + fulano.getEndereco() + ", " + fulano.getTelefone() + "n"); System.out.println("Cliente 2: " + beltrano.getNome() + ", "+ beltrano.getEndereco() + ", " + beltrano.getTelefone() + "n"); }}
  96. 96. Cliente 1: Fulano, Rua Halfeld, 3213-5000Cliente 2: Beltrano, Rua Marechal, 3224-1000Cliente 1: Ciclano, Rua Halfeld, 3224-1000Cliente 2: Beltrano, Rua Sao Joao, 3224-1000 Os nomes dos métodos de para atribuir e obter valores das variáveis de instância das classes não tem que ser necessariamente set e get, mas esta é uma boa prática de programação em Java.
  97. 97. VarargsJ2SE 5.0 apresenta um novo recurso denominado varargs, que permite passarum número variável de argumentos a um método, sem a necessidade deencapsulá-lo em um array, por exemplo.class VarOla { public static void printSaudação(String... nomes) { for(String n : nomes) { System.out.println("Olá " + n + ". "); } } public static void main(String[] args) { printSaudação("Wander", "Rita", "Julia","Augusto"); }}A declaração de um argumento como varargs é denotada pelo seu tipo seguidode reticências (...) e o nome.
  98. 98. Em tempo de compilação, um varargs é convertido para um array. Isto explicaporque o código abaixo executa sem problemas, alterando a clássica assinaturado método main.class VarOla { public static void printSaudação(String... nomes) { for(String n : nomes) { System.out.println("Olá " + n + ". "); } } public static void main(String... args) { printSaudação(args); }}A Sun, inclusive, aconselha o uso de varargs em lugar de arrays na assinaturado método main.
  99. 99. Sobrecarga com VarargsO exemplo a seguir ilustra o comportamento do compilador Java no caso dehaver métodos sobrecarregados com e sem varargs disputando a execução.public class QualMétodo { QualMétodo(Integer... size) { System.out.println("Versão com varargs"); } QualMétodo(int i, int j) { System.out.println("Versão com tipo int"); } QualMétodo(Integer i, Integer j) { System.out.println("Versão com Integer"); } public static void main(String[] args) { System.out.println("Chamada com tipo int"); new QualMétodo(2, 3); System.out.println("Chamada com Integer"); new QualMétodo(new Integer(2), new Integer(3)); } }
  100. 100. Chamada com tipo int Versão com tipo int Chamada com Integer Versão com IntegerObserva-se que a chamada com varargs não tem precedência, quando daexistência de métodos com assinatura igual à chamada. Ainda usando o exemploanterior, somente será chamado o método com varargs em situações como aapresentada abaixo, onde não há correspondência com um método específico.public static void main(String[] args) { System.out.println("Chamada com tipo int"); new QualMétodo(2, 3, 4); } Chamada com tipo int Versão com varargs
  101. 101. Referência thisEm algumas situações é necessário referenciar o próprio objeto corrente. Poressa razão todo objeto possui um atributo especial identificado por this que éuma referência para o próprio objeto. O exemplo abaixo mostra um uso típico doatributo this. Ele mostra um método cujo parâmetro formal possui o mesmonome de um atributo de instância. Para distingui-los é necessário qualificar oatributo da instância com o atributo this.import java.awt.Color;public class ObjGeo { private Color cor; private int larg; private int alt; public ObjGeo (Color cor, int larg, int alt) { this.cor = cor; this.larg = larg; this.alt =alt; } public Color getCor() {return cor;} public int getLarg() {return larg;} public int getAlt() {return alt;}}
  102. 102. import java.awt.Color;public class TestaObjGeo { public static void main(String args[]) { ObjGeo obj = new ObjGeo(Color.red,4,8); System.out.println("Cor: " + obj.getCor()); System.out.println("Largura: " + obj.getLarg()); System.out.println("Altura: " + obj.getAlt()); }}Cor: java.awt.Color[r=255,g=0,b=0]Largura: 4Altura: 8A classe Color, do pacote java.awt, é responsável pela manipulação dascores em Java. A Color.red define a cor vermelha para a instância obj doobjeto ObjGeo.
  103. 103. Modificador staticCada instância de um objeto tem sua própria cópia de todas as variáveis deinstância. Porém, em certas situações, pode ser útil usar uma variável de classe,estática, cujo valor é compartilhado por todas as instâncias da classe.public class Socio { private String nome; private String endereco; private static int numSocios; public Socio (String n, String e) { nome = n; endereco = e; numSocios++; } public String getNome() {return nome;} public String getEndereco() {return endereco;} public static int getNumSocios() {return numSocios;}}
  104. 104. public class TestaSocio { public static void main(String args[]) { Socio s1 = new Socio("Pedro","Rua Santa Rita"); Socio s2 = new Socio("Paulo","Av. dos Andradas"); Socio s3 = new Socio("Jose","Av. Rio Branco"); System.out.println("Socios do clube:n"+ s1.getNome() + ", " + s1.getEndereco() + "n" + s2.getNome() + ", " + s2.getEndereco() + "n" + s3.getNome() + ", " + s3.getEndereco()); System.out.println("Numero de socios: "+ Socio.getNumSocios()); }}Socios do clube:Pedro, Rua Santa RitaPaulo, Av. dos AndradasJose, Av. Rio BrancoNumero de socios: 3
  105. 105. Pacotes Pacotes é a solução proposta pela Sun para reunir interfaces e classes relacionadas formando uma biblioteca. Esta organização evita a colisão de nomes de classes. Veja a extensão do problema: sendo Java uma linguagem para atuar na internet, como evitar que classes obtidas por download não tenham os mesmos nomes de classes já existentes na máquina?!Toda classe pertence a um pacote. Apenas o pacote default, que refere-se asclasses do diretório corrente e o pacote java.lang, que agrupa as classes donúcleo básico de Java, não precisam ser importados com o comando import.As classes de um pacote devem colocadas em um diretório obedecendo a estru-tura do nome do pacote, a partir de algum diretório presente na variável deambiente classpath.Suponha que eu tenha criado um conjunto de classes de objetos geométricos.Poderia criar um pacote chamado wander para colocar as classes.
  106. 106. package wander; public class ObjGeo { Color cor; int x; int y; public ObjGeo (Color cor, int x, int y) { this.cor = cor; this.x = x; this.y = y; } } A variável de ambiente classpath poderia ser definida como: set classpath = .;c:...jdk1.4.1lib;c:java;O arquivo ObjGeo.class deve ser colocado no diretório:c:javawander Os atributos da classe ObjGeo foram definidos com o modificador de acesso default. Isto significa que somente classes do pacote wander poderão acessar estes atributos.
  107. 107. import wander.ObjGeo; import java.awt.Color; public class TestaObjGeo { public static void main(String[] args) { ObjGeo obj = new ObjGeo(Color.CYAN, 10, 10); System.out.println(obj.cor); System.out.println(obj.x); System.out.println(obj.y); } }Este programa apresentará erro de compilação, informando que os atributosobj.cor, obj.x e obj.y não são visíveis, mesmo declarando o comandoimport para importar a classe ObjGeo do pacote wander. Lembre-se, atributos definidos com o modificador de acesso default só são visíveis por classes dentro do mesmo pacote. A classe TestaObjeto não foi definida dentro do pacote wander.
  108. 108. Redefinição da classe TestaObjGeo dentro do pacote wander: package wander; import java.awt.Color; public class TestaObjGeo { public static void main(String[] args) { ObjGeo obj = new ObjGeo(Color.CYAN, 10, 10); System.out.println(obj.cor); System.out.println(obj.x); System.out.println(obj.y); } }O programa compila normalmente. Qual seria o comportamento do compiladorse os atributos da classe ObjGeo fossem definidos com o modificador de acessoprotected? E com private?
  109. 109. HerançaHerança é um mecanismo que permite que características comuns a diversasclasses sejam especificadas em uma classe base, ou superclasse. A partir destasuperclasse, outras classes podem ser especificadas. Cada classe derivada ousubclasse apresenta as características (atributos e métodos) da classe base eacrescenta a elas o que for definido de particularidade na subclasse.Por exemplo, podemos considerar que um objeto Circulo, Triangulo ouRetangulo é também um objeto FormaGeometrica.Neste contexto, FormaGeometrica é chamada uma superclasse e a classeCirculo é uma subclasse. Também é válido dizer que a classe Trianguloherda atributos e/ou métodos de FormaGeometrica. Para especificar que uma classe é subclasse de uma outra classe, Java emprega a palavra reservada extends.
  110. 110. import java.awt.Color;public class FormaGeo { protected Color cor; protected int x, y; public FormaGeo(Color c, int x, int y) { cor = C; this.x = x; this.y = y; } public Color getCor() { return cor; } public int getX() { return x; } public int getY() { return y; }}
  111. 111. import java.awt.Color;public class Circulo extends FormaGeo { protected double raio; public Circulo(Color c, int x, int y, int r) { super(c, x, y); raio = r; } public double area() { return Math.PI * Math.pow(raio, 2); }}A instrução super() é uma chamada explícita ao construtor da superclasse.Esta instrução é necessária para passar à superclasse os parâmetros recebidospelo construtor da subclasse. Observe que a subclasse não define atributoscorrespondentes a estes atributos, que pertencem a superclasse. É um erro de sintaxe se uma chamada super por uma subclasse não for a primeira instrução no construtor da subclasse.
  112. 112. A linha contínua indica que a classe Circulo herda métodos e/ou atributos da classe Forma.Observe que você pode criar objetos (instâncias) da classe Forma e também daclasse Circulo, utilizando o BlueJ.
  113. 113. import java.awt.Color;public class TestaHeranca { public static void main(String[] args) { FormaGeo fg = new FormaGeo(Color.red, 4, 8); Circulo circ = new Circul (Color.blue, 2, 5, 10); System.out.println ("Cor da Forma Geometrica: " + fg.getCor()); System.out.println ("Cor do Circulo: " + circ.getCor()); System.out.println ("Area do Circulo: " + circ.area()); System.out.println ("Coordenada X da Forma Geometrica: " + fg.getX()); System.out.println("Coordenada Y do Circulo: " + circ.getX()); }}
  114. 114. Outro exemplo utilizando herança:public class Ponto extends Object { protected int x; protected int y; public Ponto(int a, int b) { x = a; y = b; System.out.println("Ponto - " + this); } public String toString() { return "Centro: [" + x + ", " + y + "]"; }}O método toString() é definido originalmente na classe Object. Permiteconverter uma representação interna do objeto em uma string que pode serapresentada ao usuário. Aqui, o método está sendo sobrescrito para formatarmais adequadamente os atributos da classe Ponto.
  115. 115. public class Circulo extends Ponto { protected double raio; public Circulo(double r, int a, int b) { super(a, b); raio = r; System.out.println("Circulo - " + this); } public String toString() { return super.toString() + ", Raio: " + raio; }}public class TestaHeranca { public static void main(String[] args) { Ponto pt; Circulo circ1; Circulo circ2; pt = new Ponto(10, 5); circ1 = new Circulo(4.5, 72, 29); circ2 = new Circulo(10, 5, 5); }}
  116. 116. Ponto - Centro: [10, 6]Ponto - Centro: [72, 29], Raio: 0.0Circulo - Centro: [72, 29], Raio: 4.5Ponto - Centro: [5, 5], Raio: 0.0Circulo - Centro: [5, 5], Raio: 10.0As classes Ponto e Circulo apresentam uma nova utilização para this,usado para invocar implicitamente o método toString(). O objeto corrente, referenciado por this, nas instâncias da classe Circulo, é sempre desta classe. O método toString() chamado, neste caso, é o da classe Circulo.
  117. 117. Classes abstratasUma classe abstrata não pode ser instanciada, ou seja, não há objetos quepossam ser construídos diretamente de sua definição. Por exemplo, a compilaçãodo seguinte trecho de código dará erro:abstract class ClasseAbstrata { public static void main(String[] args) { ClasseAbstrata ca = new ClasseAbstrata(); }}Somente classes concretas, ou seja, que não foram definidas como abstratas, éque podem ser instanciadas.As classes abstratas definem um conjunto de funcionalidades das quais pelomenos uma está especificada mas não está definida — ou seja, contém pelomenos um método abstrato.abstract class ClasseAbstrata { public abstract int metodo();}
  118. 118. Um método abstrato não cria uma definição, mas apenas uma declaração de ummétodo que deverá ser implementado em uma classe derivada. Assim, para queuma classe derivada de uma classe abstrata possa instanciar objetos, os métodosabstratos devem ser definidos nestas classes derivadas.class ClasseConcreta extends ClasseAbstrata { public int metodo() { return 0; }}O exemplo a seguir ilustra um caso simples de uso de classe abstrata. A classeTime define o método abstrato meuTime(), que é sobrescrito em seguida por3 classes concretas.public abstract class Time { abstract void meuTime(); public static void futebol() { System.out.println("Eu gosto de futebol"); }}
  119. 119. public class America extends Time { void meuTime() { System.out.println("Eu sou americano..."); }}public class Atletico extends Time { void meuTime() { System.out.println("Eu sou ATLETICANO!"); }}public class Cruzeiro extends Time { void meuTime() { System.out.println("Eu sou cruzeirense..."); }}As classes America, Atletico e Cruzeiro redefinem o método abstratomeuTime(), de acordo com as particularidades de cada torcedor.
  120. 120. public class MeuTime { public static void main(String[] args) { America america = new America(); Atletico atletico = new Atletico(); Cruzeiro cruzeiro = new Cruzeiro(); Time.futebol(); america.meuTime(); atletico.meuTime(); cruzeiro.meuTime(); }}Eu gosto de futebol.Eu sou americano...Eu sou ATLETICANO!Eu sou cruzeirense... O método futebol() é um método estático da classe Time, portanto, não necessita de uma instância de classe para ser referenciado. Observe que uma classe abstrata tanto pode ter métodos abstratos quanto métodos concretos.
  121. 121. Suponha uma classe abstrata FormaGeometrica. Como calcular a área deum objeto desta classe? Se as classes Retangulo, Elipse e Triangulo sãoclasses concretas derivadas de FormaGeometrica, então é possível utilizarmétodos específicos de cada uma dessas classes para calcular a área. A técnica de polimorfismo permite que uma chamada de método faça com que diferentes ações ocorram de acordo com o tipo de objeto chamado.public abstract class Forma { public double area() { return 0.0; } public abstract String getNome();}A classe Forma é uma classe abstrata, com um método abstrato getNome().
  122. 122. public class Ponto extends Forma { protected int x, y; public Ponto() { x = 0; y = 0; } public Ponto(int a, int b) { x = a; y = b; } public int getX() { return x; } public int getY() { return y; } public String getNome() { return "Ponto"; } public String toString() { return "[" + x + ", " + y + "]"; }}
  123. 123. public class Circulo extends Ponto { protected double raio; public Circulo() { raio = 0; } public Circulo(double r, int a, int b) { super(a, b); raio = r; } public double area() { return Math.PI * Math.pow(raio,2); } public String toString() { return "Centro: " + super.toString() + ", Raio: " + raio; } public String getNome() { return "Circulo"; }}
  124. 124. public class Retangulo extends Ponto { protected int base; protected int altura; public Retangulo() { base = 0; altura = 0; } public Retangulo(int x, int y, int b, int h) { super(x, y); base = b; altura = h; } public double area() { return base * altura; } public String toString() { return "Centro: " + super.toString() + ", Base:" + base + ", Altura: " + altura; } public String getNome() { return "Retangulo"; }}
  125. 125. As classes Circulo e Retângulo estendem Ponto e sobrescrevem osmétodos area() e getNome() de Forma e também o método toString()de Ponto.public class Desenha { public static void main(String args[]) { Ponto pt = new Ponto(7, 11); Circulo circ = new Circulo(3.5, 22, 8); Retangulo ret = new Retangulo(10, 10, 5, 8); Forma[] forma = new Forma[3]; forma[0] = pt; forma[1] = circ; forma[2] = ret; for(int i = 0; i < forma.length; i++) System.out.println(forma[i].getNome() + ": " + forma[i].toString() + "nArea = " + forma[i].area()); }}
  126. 126. A figura apresenta todas as classes e os relacionamentos existentes entre elas em um projeto construído no BlueJ.Ponto: [7, 11]Area = 0.0Circulo: Centro: [22, 8], Raio: 3.5Area = 38.48451000647496Retangulo: Centro: [10, 10], Base:5, Altura: 8Area = 40.0
  127. 127. InterfacesInterfaces são classes abstratas completamente não implementadas, ou seja,todos os métodos são abstratos e devem ser sobrescritos por métodos das classesconcretas que as implementam.A forma geral de uso de uma interface em Java é:class Identificador implements Interface1,Interface2...Considerando que todos os métodos de uma interface são abstratos, quando umaclasse implementa esta interface, deve escrever o código de todos esses métodosabstratos. Este é o chamado contrato entre a interface e a classe que aimplementa.O conceito de interface permite a implementação de uma espécie de herançamúltipla em Java, sobrepondo a regra de que uma subclasse somente pode serherdada de uma única superclasse.O exemplo a seguir define uma interface Radio e uma interface Relogio. Aclasse concreta RadioRelogio que herda os métodos destas interfaces.
  128. 128. public interface Radio { void setEstacao(double d); double getEstacao();}import java.util.Date;public interface Relogio { void setHorario(Date d); Date getHorario();} Todos os métodos definidos em uma interface são obrigatoriamente public e abstract, mesmo que isto não seja declarado esplicitamente. A interface Radio abaixo é idêntica a anterior.public interface Radio { public abstract void setEstacao(double d); public abstract double getEstacao();}
  129. 129. import java.util.Date;public class RadioRelogio implements Radio, Relogio { private Date horario; private double estacao; public void setEstacao(double d) { estacao = d; } public double getEstacao() { return estacao; } public void setHorario(Date d) { horario = d; } public Date getHorario() { return horario; } public static void main(String[] args) { RadioRelogio rr = new RadioRelogio(); rr.setEstacao(1.5); rr.setHorario(new Date()); System.out.println(rr.getEstacao()); System.out.println(rr.getHorario()); }}
  130. 130. Classes InternasEm Java é possível declarar uma classe dentro da declaração de outra classe.Tais classes são denominadas classes internas.public class Externa { private int x = 7; class Interna { public void imprimeExterna() { System.out.println("x vale " + x); } }}Neste exemplo, a classe interna está acessando um membro privado da classeexterna. Isto está correto, afinal, a classe interna é também um membro daclasse externa.
  131. 131. public class Externa { private int x = 7; public void instanciaInterna(){ Interna in = new Interna(); //instancia interna in.imprimeExterna(); //invoca método da interna } class Interna { public void imprimeExterna() { System.out.println("x vale " + x); } } //fim da classe interna public static void main(String[] args){ Externa ex = new Externa(); //instancia externa ex.instanciaInterna(); //invoca método da externa }}Para instanciar uma classe interna, é necessário uma instância da classeexterna. Acima, a instância ex é que instancia um objeto in da classe interna.
  132. 132. public class Externa { private int x = 7; class Interna { public void imprimeExterna() { System.out.println("x vale " + x); } } public static void main(String[] args){ Externa ex = new Externa(); Externa.Interna in = ex.new Interna(); in.imprimeExterna(); }}Voltando a classe Externa da página anterior, este exemplo ilustra como criarum objeto da classe interna fora do código da instância da classe externa.A instanciação de uma classe interna é o único cenário em Java em que se faznecessário chamar new a partir de uma instância.
  133. 133. Classes Internas AnônimasJava permite que se crie um objeto de uma classe interna sem nome, chamadaclasse interna anônima.class Externa { public void imprime(){ System.out.println("Eu sou a classe externa"); }}public class TestaAnonima { Externa ex = new Externa() { public void imprime() { System.out.println ("Eu sou a classe interna anônima"); } }; public static void main(String[] args){ TestaAnonima ta = new TestaAnonima(); ta.ex.imprime(); }}
  134. 134. Tratamento de exceçõesUm erro para o qual pode existir um tratamento é chamado, em computação, deexceção. Exemplos de exceções incluem divisão por zero, parâmetros demétodos inválidos, overflow e subscrito de arrays fora dos limites.Utilizar tratamento de exceções permite ao programador remover o código detratamento de erros da linha principal de execução do programa. Isso melhora aclareza e a modificabilidade do código fonte.public class Excecao { public static void main(String[] args) { System.out.println("Antes do erro"); try { System.out.print(10 / 0); } catch(RuntimeException e){ System.out.println("Erro"); } System.out.println("Depois do erro"); }}
  135. 135. Exceções são objetos que pertencem a classes organizadas em uma hierarquia. Aclasse que se encontra no topo desta hierarquia é a classe Throwable, quepossui duas subclasses: Exception e Error. Exception e suas subclassessão usadas para indicar condições que podem ser recuperadas. Error e suassubclasses indicam condições que em geral não podem ser recuperadas, causandoa terminação do programa.Todos os objetos da classes Exception devem ser capturados ou explicitamenterelançados para um nível acima na pilha de chamadas. Isto só não é válido paraos objetos das classes RuntimeException, que definem as exceções quepodem ser lançadas durante a execução normal da máquina virtual, como divisãopor zero ou indexação fora dos limites do array. O exemplo anterior, classe Excecao, captura uma exceção da classe RuntimeException, o que, portanto, não é exigido pela máquina virtual Java. Um método pode lançar mais de uma exceção, portanto, muitas vezes é preciso definir um bloco try/catch capaz de tratar mais de uma exceção. Neste caso, cada cláusula catch trata uma exceção.
  136. 136. class Matematica { public static void main(String[] args) { try { int op1 = Integer.parseInt(args[0]); int op2 = Integer.parseInt(args[1]); System.out.println("Soma = " + (op1 + op2)); System.out.println("Subtracao = " + (op1 - op2)); System.out.println("Produto = " + (op1 * op2)); System.out.println("Divisao = " + (op1 / op2)); } catch(ArithmeticException ae) { System.out.println("Erro de divisao por zero"); } catch(ArrayIndexOutOfBoundsException aie) { System.out.println("Numero de argumentos invalido"); } catch(NumberFormatException nfe) { System.out.println("Digite apenas numeros inteiros"); } }}Soma = 15 ArithmeticException, ArrayIndexOutOfBoundsSubtracao = 5 Exception e NumberFormatException são subclassesProduto = 50 de RuntimeException e, portanto, o programador nãoDivisao = 2 é obrigado a capturar estas exceções.
  137. 137. import java.io.*;public class Adicao { public static void main(String[] args) { String s; int num1, num2, soma; try { System.out.println("Entre com o 1o. numero: "); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); s = br.readLine(); num1 = Integer.parseInt(s); System.out.println("Entre com o 2o. numero: "); s = br.readLine(); num2 = Integer.parseInt(s); soma = num1 + num2; System.out.println("Soma = " + soma); } catch(IOException e) { System.out.println("Erro na entrada de dados"); } }}
  138. 138. As classes do pacote java.io podem lançar exceções do tipo IOException.O programador Java é obrigado a capturar estas exceções, usando blocos try /catch (ou relançá-las explicitamente para o nível acima). Não capturar ou lançar uma exceção causa um erro de compilação.Para indicar que um método pode lançar uma exceção, Java utiliza a palavrareservada throws, usada na declaração do método, e colocada antes da chavede abertura do corpo do método.A inclusão da cláusula throws à definição do do método simplesmente significaque o método poderá lançar uma exceção, em caso de ocorrer algum problema.A classe Adicao é reescrita a seguir, utilizando a cláusula throws, semcapturar e tratar uma possível exceção da classe IOException.
  139. 139. import java.io.*;public class Adicao { public static void main(String[] args) throws IOException { String s; int num1, num2, soma; System.out.println("Entre com o 1o. numero: "); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); s = br.readLine(); num1 = Integer.parseInt(s); System.out.println("Entre com o 2o. numero: "); s = br.readLine(); num2 = Integer.parseInt(s); soma = num1 + num2; System.out.println("Soma = " + soma); }}

×