Java: Sintaxe

Propaganda
Estrutura de uma aplicação
uEm Java:
ðDesenvolver uma aplicação consiste em escrever
classes de objetos
ðAs classes podem representar objetos reais do domínio
da aplicação ou estruturas abstratas
Java: Sintaxe
Estrutura de uma aplicação
Tipos, variáveis, operadores e comandos
Métodos e classes
Arranjos, Strings e outras classes
slides: jfsintaxe
ðUma aplicação em execução consiste num conjunto de
objetos, criados a partir das classes, trocando
mensagens entre si
ðSaber como fatorar a solução do problema em classes
requer experiência e prática
Frederico Costa Guedes Pereira © 2000
Fred (C) 2003
Java: Sintaxe
2
Estrutura de uma aplicação
Estrutura de uma aplicação
uUma classe em Java é uma coleção identificada de
uA classe é a menor unidade de código Java à não é
variáveis (estado) e métodos (comportamento)
que operam sobre essas variáveis.
possível escrever um programa Java sem construir
uma classe!
ðUnidade fundamental de programação em Java!
ðO compilador não reconhece fragmentos de código
menores que uma classe
uUma aplicação Java pode possuir dezenas,
ðA classe também é a unidade básica de execução de Java
centenas ou até milhares de classes
uA aplicação inicia a execução a partir de um método
especial chamado main existente numa das classes
(classe de aplicação)
Fred (C) 2003
Java: Sintaxe
3
Fred (C) 2003
Java: Sintaxe
4
Estrutura de uma aplicação
Estrutura de uma aplicação
u Estrutura de uma classe Java:
uClasse que define um cliente num sistema de loja:
public class Cliente {
private String nome;
private String endereco;
private char sexo;
estado
class NomeDaClasse {
declarações de variáveis membro;
comportamento
}
Java: Sintaxe
public Cliente(String nome,
String endereco) {
this.nome = nome;
this.endereco = endereco;
}
Operadores
public void mudeNome(String novoNome) {
this.nome = novoNome;
}
Fred (C) 2003
Java: Sintaxe
Métodos
declarações de métodos() {
declarações de variáveis locais;
comandos;
}
Fred (C) 2003
Variáveis membro
5
6
1
Estrutura de uma aplicação
Estrutura de uma aplicação
uContinuação da classe Cliente...
uA classe Cliente é salva no arquivo Cliente.java
public String informeNome(){
return nome;
}
uA classe é compilada para produzir o arquivo de
bytecodes chamado Cliente.class
Métodos
ðC:\ javac Cliente. java
}
public String imprima() {
String c = "Cliente ";
c += "\n - Nome: " + nome;
c += "\n - Endereco: " + endereco;
c += "\n - Sexo: " + sexo;
System.out.println(c); Variável
}
local a um método
Fred (C) 2003
Java: Sintaxe
(à Cliente.class)
uEm geral, cada arquivo .java contém a definição de
uma classe pública
uComo podemos usar a classe Cliente (isto é, onde
podemos criar objetos desta classe)?
7
Fred (C) 2003
Java: Sintaxe
Estrutura de uma aplicação
Estrutura de uma aplicação
uClasse de aplicação:
uA classe AplicacaoCliente é salva no arquivo
variáveis locais ao método main
8
AplicacaoCliente.java
uA classe é compilada para produzir o arquivo de
bytecodes chamado AplicacaoCliente.class
public class AplicacaoCliente {
public static void main (String[] args){
Cliente a, b;
ðC:\ javac AplicacaoCliente.java
a = new Cliente("Bart", "Springfield");
b = new Cliente("Cartman", "South Park");
System.out.println("Nome do cliente a ="+
a.informeNome());
b.imprima();
uA classe é executada com o interpretador Java:
ðC:\ java AplicacaoCliente
}
}
Nome da classe, sem a extensão .class!
Fred (C) 2003
Java: Sintaxe
9
Fred (C) 2003
Java: Sintaxe
Estrutura de uma aplicação
Estrutura de uma aplicação
uExemplo de execução em linha de comando:
uExemplo de execução no BlueJ:
Y:\projetos> javac AplicacaoCliente.java
Y:\projetos> java AplicacaoCliente
Nome do cliente a =Bart
Cliente
- Nome: Cartman
- Endereço: South Park
-Sexo: •
Y:\projetos> _
Fred (C) 2003
Java: Sintaxe
10
Terminal
11
Fred (C) 2003
Java: Sintaxe
12
2
Estrutura de uma aplicação
Estrutura de uma aplicação
uClasses de aplicação:
uElementos da linguagem, em ordem crescente de
complexidade:
ðSão aquelas por onde a execução do sistema inicia
ðPossuem um método main com a seguinte assinatura:
COMPLEXIDADE
public static void main(String[] args)
ðO interpretador Java só aceita executar classes que
possuam o método main definido conforme acima
uQualquer classe pode possuir um método main e
ser classe de aplicação (embora não seja usual)
Java: Sintaxe
ðOperadores e expressões
ðComandos
ðMétodos
ðClasses
ðPacotes
ðEm geral, o main destas classes serve para testes
Fred (C) 2003
ðCaracteres
ðTipos de dados, valores literais, identificadores
13
Fred (C) 2003
Java: Sintaxe
Caracteres
Comentários
uUso do padrão Unicode: conjunto de caracteres de
uTrês tipos de comentários:
16 bits
ð// comentário de linha
ð65536 caracteres distintos!
ð/*
uCaracteres Unicode são gravados em arquivos
usando um formato chamado UTF-8
ð/**
Classe <b>Cliente</b>
Comentário de bloco para o <i>javadoc </i>
@author Frederico Costa
*/
\uxxxx
ð\u3c00 = π
Java: Sintaxe
comentário de bloco
*/
uInserção de caracteres Unicode no código fonte:
Fred (C) 2003
14
15
Fred (C) 2003
Java: Sintaxe
Identificadores
Identificadores (estilo a ser adotado)
uIdentificadores nomeiam variáveis (membro, locais,
uClasses:
parâmetros, etc), métodos e classes
uApenas os caracteres especiais "_" e "$" são
permitidos, além de letras e números unicode
uDevem iniciar por uma letra ou pelos símbolos _ ou
$ (evite-os, pois o compilador os utiliza)
16
ðPrimeira letra de cada palavra maiúscula
Ex: MinhaClasse, Pilha
uMembros de uma classe e variáveis locais:
ðPrimeira letra minúscula
Ex: idade, marcaModelo, getCor(), getSalarioFinal(), i,
cont, somaTotal
uConstantes de classe (static final):
ðMAIÚSCULAS ≠ minúsculas
ðTodas as letras maiúsculas
Ex: PI, MAX_ALUNOS, MEDIA
Fred (C) 2003
Java: Sintaxe
17
Fred (C) 2003
Java: Sintaxe
18
3
Palavras reservadas
abstract
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
extends
false
final
finally
float
for
goto
assert
if
implements
import
instanceof
int
interface
long
native
new
null
Fred (C) 2003
Tipos de Dados em Java
package
private
protected
public
return
short
static
strictfp
super
switch
synchronized
this
throw
throws
transient
true
try
void
volatile
while
Java: Sintaxe
19
Tipos primitivos
uTipos primitivos: possuem representações
definidas em termos de bytes
ðAs variáveis destes tipos guardam valores dentro da
faixa definida pelo tipo
uTipos referenciáveis: contêm uma referência para
os dados na memória, cujas representações são
definidas pela classe do objeto
ðAs variáveis destes tipos contém um ponteiro p/ objeto
Fred (C) 2003
Default
false
\u0000
0
0
0
long
0
64bits
float
0.0f
32bits
±1.4E-45 a
±3.4028235E+38
double
0.0
64bits
± 4.9E-324 a
±1.797693134862E+308
Tamanho
1bit
16bits
8bits
16bits
32bits
ðDois valores: true e false
uTipo char
ðValores delimitados por apóstrofos: char c = 'c'
ðUso de literais unicode: char c = \u0041
ðCaracteres especiais:
\b (backspace)
\t (tabulação)
\n (nova linha)
\r (return)
\' (apóstrofos)
\" (aspas)
9223372036854775807
21
Tipos primitivos
Fred (C) 2003
22
uTipos de ponto flutuante (float e double)
ðLiterais na base decimal:
ðLiterais:
• 0, 1, 123, -23456
• 0.0, 1.0, .01, -3.5
ðLiterais nas bases hexadecimal e octal:
ðNotação científica:
//51966 em hexa
//255 em octal
• 1.2345E02
• 1e-6
ðInteiros(32 bits) x inteiros longos (64bits)
Fred (C) 2003
Java: Sintaxe
Tipos primitivos
uTipos inteiros (byte, short, int, long)
• 1234
• 1234L
• 0xF34L
20
uTipo boolean
Domínio
NA
\u0000 a \uFFFF
-128 a 127
-32768 a 32767
-2147483648 a
2147483647
-9223372036854775808 a
Java: Sintaxe
• 0xcafe
• 0377
Java: Sintaxe
Tipos primitivos
Tipo
boolean
char
byte
short
int
Fred (C) 2003
uJava possui duas categorias de tipos de dados:
ðLiterais ponto-flutuante são sempre double!
• 12.34
• 12.34f
• 6.02e23F
//long
//long em hexa
Java: Sintaxe
//1.2345 x 102
//1 x 10-6
23
Fred (C) 2003
//double
//float
//float
Java: Sintaxe
24
4
Conversão de tipos
Conversões ampliadoras
uJava permite conversões entre inteiros (byte ,
short , int , long ), caractere (char ) e pontos
flutuantes (float e double )
uUm valor de um tipo é convertido para um tipo
maior, isto é, um representado por mais bits
uSão realizadas automaticamente
uExemplos:
uO tipo boolean é o único primitivo que não é
convertido em nenhum outro
uTipos de conversão
ðConversões ampliadoras (widening conversions )
ðConversões redutoras (narrowing conversions )
Fred (C) 2003
Java: Sintaxe
25
int i = 20;
float f = i;
//20 convertido para float
int i = ´A´;
Math.sqrt(4);
//65 convertido para int
//4 convertido para double
Fred (C) 2003
Java: Sintaxe
Conversões redutoras
Tipos de referência
uUm valor é convertido para um tipo com menos bits
uAs variáveis são referências para objetos em
memória
uUma classe define um tipo referenciado
uOs arranjos também são tipos referenciados
uNão são realizadas automaticamente
uO programador deve confirmar a redução com um
cast, do contrário o código não é compilado
cast
uExemplos:
int i = 13;
byte b = i;
b = (byte) i;
i = (int) 32.601;
Fred (C) 2003
Referência
(variável)
//Erro de compilação!
//Ok!
//i recebe 32
Java: Sintaxe
Tipos referenciados serão
abordados mais adiante
27
Fred (C) 2003
Objeto em memória
Java: Sintaxe
Operadores
Operadores
uOperadores aritméticos
uOperadores de atribuição
ðResultam num valor numérico (inteiro ou ponto flutuante)
u Operador condicional
ðCondiciona seu valor de retorno a uma expressão lógica
uOperadores relacionais: comparam expressões
uOperador instaceof: verifica se um objeto é
instância de uma classe
ðResultam num valor booleano (true ou false)
ðResulta num valor boolean
uOPeradores lógicos: compõem expressões lógicas
ðProduzem um valor booleano
Java: Sintaxe
28
ðExecutam uma operação seguida de uma atribuição
u Operadores de incremento e decremento
ðResultam num valor numérico (inteiro ou ponto flutuante)
Fred (C) 2003
26
uOperador new: instancia uma classe
ðProduz um objeto da classe
29
Fred (C) 2003
Java: Sintaxe
30
5
Operadores aritméticos
Operadores incremento/decremento
uSímbolos:
uSímbolos:
ðAdição: +
ðIncremento: ++
ðSubtração: ðMultiplicação: *
ðDecremento: -ðO comportamento deste operador depende da posição
relativa ao operando
ðDivisão: /
ðResto da divisão inteira: %
uExemplos:
uExemplos:
c = 7 % 3;
x = 5 + 10 / 2;
Fred (C) 2003
c = 10;
c++; //cß
ß 11
//c receberá 1
//x receberá 10
Java: Sintaxe
31
Fred (C) 2003
y=1; x=0; z=0;
x = y++;
//xß
ß 1 e yß
ß2
z = ++x;
//zß
ß 2 e xß
ß2
Java: Sintaxe
32
Operadores relacionais
Operadores lógicos ou booleanos
uSímbolos:
uSímbolos:
ðMaior que, maior ou igual a: >, >=
ðAND: && (curto circuito) ou &
ðMenor que, menor ou igual a: <, <=
ðIgual a: ==
ðOR: || (curto circuito) ou |
ðNOT: !
ðDiferente de: !=
ðXOR: ^
uExemplos:
uExemplos:
if ( c == 10 ) ...
(c != 0) && (a > (x/c))
(c != 0) & (a > (x/c))
!(a > b)
return x != null;
Fred (C) 2003
Java: Sintaxe
33
Fred (C) 2003
//ok
//erro se c==0
Java: Sintaxe
Operadores de atribuição
Operador condicional
uSímbolos:
uSímbolo:
ðEquivalem a uma soma entre o operando da direita e o
operando da esquerda seguida por uma atribuição
ðOperador ternário: ?:
ðEquivale a um comando de decisão que resulta num
valor
ðForma geral: var op= valor ↔ var = var op valor
ðSintaxe: expr_booleana ? expressaoV : expressãoF
ðAritméticos+atribuição: +=, -=, *-, /= e %=
uExemplos:
c
a
f
e
+=
-=
%=
+=
Fred (C) 2003
5;
b;
(c+a);
1;
34
uExemplos:
//c = c +
//a = a –
//f = f %
// e++ ou
Java: Sintaxe
5
b
(c+a)
e = e + 1
j
a
v
a
35
=
=
=
=
Fred (C) 2003
(a>b)?a:b;
(a != null) ? a : "<vazio>";
r>0 ? 10 : 10.5;
//erro!
(x<y)&&(z<y) ? y : ((x<z) ? z : x);
Java: Sintaxe
36
6
Operador instanceof
Operador new
uSintaxe:
ð(objeto ou array) instanceof nome_da_classe
uSintaxe:
ðnew construtor_da_classe
ðRetorna true se o objeto for instância da classe
ðCria um objeto da classe especificada no construtor
uExemplos:
uExemplos:
"string" instanceof String
"" instanceof Object
null instanceof Object
Fred (C) 2003
//true
//true (H)
//false
Java: Sintaxe
c = new Cliente("Bart", "Springfield");
linguagem = new String("Java");
venda.adicioneProduto(new Produto());
faixa = new int[] {1,2,3,4,5};
37
Operadores
Fred (C) 2003
Java: Sintaxe
Operadores
u(P)recedência e (A)ssociatividade
8
A Operador
E p == p p != p r == r r != r
7
E & (bitwise) & (lógico)
D + - !
D new ( tipo )
6
E ^ (bitwise) ^ (lógico)
5
E | (bitwise) | (lógico)
12
E * / %
4
11
E + - + (concatenação de strings)
3
E &&
E ||
10
E << >> <<<
2
D ?:
9
E < <= > >= instanceof
1
D = *= /= %= += -= <<= >>= >>>= &= ^= |=
P
A Operador
15
E . [ ] ( params ) ++
14
13
Fred (C) 2003
P
--
Java: Sintaxe
39
Fred (C) 2003
Comandos
uElementos da linguagem, em ordem crescente de
uEstruturas de decisão:
complexidade:
40
ðif-else e switch-case
ðCaracteres
ðTipos de dados, valores literais, identificadores
uEstruturas de repetição:
ðfor, while e do-while
ðOperadores e expressões
uTratamento de exceções:
ðComandos
ðMétodos
ðthrow e try-catch-finally
uDesvio de fluxo:
ðClasses
ðPacotes
Fred (C) 2003
(p=primitivo, r=referência)
Java: Sintaxe
Estrutura de uma aplicação
COMPLEXIDADE
38
ðbreak, continue e return
Java: Sintaxe
41
Fred (C) 2003
Java: Sintaxe
42
7
Comando simples x bloco de comandos
Comando if-else
uUm comando em Java pode ser um comando
uSintaxe: if ( expr_booleana )
simples ou um bloco de comandos
uUm comando simples pode ser: uma expressão,
um dos comandos anteriores ou uma ativação de
método;
uUm bloco de comandos é um conjunto de um ou
mais comandos simples delimitados por "{" e "}" e
separados entre si por ";".
Fred (C) 2003
Java: Sintaxe
comando simples ou bloco;
else
comando simples ou bloco;
uExemplo:
if (n != 0){
if (a>b)
maior = a;
else
maior = b;
43
Fred (C) 2003
c += n;
n = 0;
} else
c++;
Java: Sintaxe
Comando switch-case
Comando for
uSintaxe: switch ( var_inteira ) {
uSintaxe: for ( inic; teste; inc )
}
[case val: comando ou bloco; break;]1-n
[default: comando ou bloco; break;]0-1
uExemplo:
switch (mes) {
case 1: nome
case 2: nome
case 3: nome
case 4: nome
default: nome
}
Fred (C) 2003
comando simples ou bloco;
uOnde:
ðinic: inicialização da variável contadora. A variável
também pode ser declarada aqui.
ðteste: expressão booleana que determina a parada ou
continuação do laço
ðinc: incremento da variável contadora
ðInteressante à todas as três cláusulas são opcionais!
(char | byte | short | int)
=
=
=
=
=
"Janeiro" ; break;
"Fevereiro" ; break;
"Março" ; break;
"Abril" ; break;
"Mês inválido"; break ;
Java: Sintaxe
45
Fred (C) 2003
Comando for
Comando for
uExemplos:
uExemplos:
int i;
for (i=0 ; i<10 ; i++)
x += 5;
//outra forma
for (int i=0 ; i<10 ; i++)
x += a[i];
Java: Sintaxe
Java: Sintaxe
//mais de uma variável declaradas
for (int i=0, j=10 ; i<10 ; i++, j--)
soma += i*j;
i só pode ser usada no
corpo do laço for
46
;
//não precisa ser uma contagem
for (Node n = cabeca ; n!=null ; n=n.next())
System .out.println (n);
//laço infinito
for( ;; ) {
if (x != null) break ;
else { ... }
}
Fred (C) 2003
44
//laço vazio (e possível erro de compilação)
for (int i=0 ; i<10 ; i++);
soma += i;
47
Fred (C) 2003
Java: Sintaxe
48
8
Comando while
Comando while
uSintaxe: while ( expressão )
uExemplos:
comando ou bloco;
int c=0;
while (c < 10) {
System .out.println (c);
c++;
}
uOnde:
ðexpressão: expressão que retorne um booleano
• Se o valor for true, o corpo do laço é executado
• Se for false, o laço é encerrado
//equivale a
for (int c=0; c<10 ;c++)
System.out. println(c);
ðPode ser análogo a um for, desde que se acrescente
uma operação de inicialização antes do comando
Fred (C) 2003
Java: Sintaxe
49
Fred (C) 2003
Java: Sintaxe
Comando do-while
Comando do-while
uSintaxe: do
uExemplos:
comando ou bloco;
while (expressão);
ðO laço do-while é executado pelo menos uma vez
ðSó pára se a expressão for false (cuidado para não
confundi-lo como repeat-until do Pascal)
Java: Sintaxe
51
Fred (C) 2003
Java: Sintaxe
Comando throw
Comando throw
uSintaxe: throw exceção;
uExemplo:
uObservações:
Java: Sintaxe
52
/** Método que adiciona um produto à venda
atualmente aberta de um caixa */
public void adicioneProduto (Produto item)
throws VendaNaoAbertaException {
//há venda aberta no caixa?
if (vendaAtual == null)
throw new VendaNaoAbertaException (this);
vendaAtual .insereItem(item);
}
ðLançar uma exceção que indique um erro ou condição
que impossibilite o prosseguimento da execução
ðO método que possui este comando deve indicar na
sua assinatura que pode lançar tal exceção, isto é feito
com a cláusula throws
ðUma exceção é um objeto cuja classe herda de
Throwable
Fred (C) 2003
50
//equivalente ao laço while do exemplo
int c=0;
do {
System .out.println (c);
c++;
} while (c < 10);
uOnde:
ðexpressão: expressão que retorne um booleano
Fred (C) 2003
i só pode ser usada no
corpo do laço for
53
Fred (C) 2003
Java: Sintaxe
54
9
Comando try-catch-finally
Comando try-catch-finally
uSintaxe: try {
uMecanismo de tratamento de exceções de Java
[comando;]1-n
} catch (Exceção e1) {
[comando;]1-n
} catch (OutraExceção e2) {
[comando;]1-n
} finally {
[comando;]1-n
}
Fred (C) 2003
uA cláusula try define o trecho de código protegido
uA cláusula catch (0 ou mais) trata um determinado
tipo de exceção que possa ocorrer no try
ðOs comandos só serão executados se a exceção ocorrer
ðApenas um catch, dentre todos, é executado
zero ou mais
uA cláusula finally é opcional e é sempre executada
uO uso de chaves faz parte do comando e não é
um ou zero
Java: Sintaxe
opcional
55
Fred (C) 2003
Java: Sintaxe
Comando try-catch-finally
Comando break
uExemplo:
uSintaxe: break;
uObjetivo:
public static void main(String[] args) {
Caixa c = new Caixa();
Produto p;
try {
p = = new Produto("Celular", 600);
c.adicioneProduto(p);
} catch (VendaNaoAbertaException e) {
//trata erro aqui...
}
}
Fred (C) 2003
Java: Sintaxe
ðFaz a execução saltar para o final de um dos
comandos: while, do-while, for ou switchcase
ðNo comando switch-case seu uso é necessário
para evitar que a execução de uma cláusula case
continue na seguinte
57
Fred (C) 2003
Java: Sintaxe
Comando break
Comando continue
uExemplo:
uSintaxe: continue;
Java: Sintaxe
58
uObjetivo:
ðInterrompe a iteração atual do laço e inicia a próxima
...
for (int i=0; i<dados. length ;i++) {
if (dados[i] == procurado) {
posicao = i;
break;
}
} //a execução continua daqui
...
Fred (C) 2003
56
ðSó pode ser usado dentro de laços while, dowhile e for
• while: volta para o início do laço e testa a condição de
parada para decidir se entra no laço ou não
• do-while: vai para o final do laço, onde a condição de
parada é testada para decidir se entra no laço ou não
• for: volta para o início, executa o incremento e depois o
teste
59
Fred (C) 2003
Java: Sintaxe
60
10
Comando continue
Comando return
uExemplo:
uSintaxe: return;
ou
return expressão;
uObjetivo:
...
for (int i=0; i<dados. length ;i++) {
if (dados[i] == VAZIO)
continue;
processe(dados[i]);
}
...
Fred (C) 2003
ðPára a execução do método corrente
ðMétodos com tipo de retorno void pedem a primeira
sintaxe do return
ðMétodos que retornam dados pedem a segunda
Java: Sintaxe
61
Fred (C) 2003
Java: Sintaxe
Comando return
Métodos
uExemplos:
uColeção de comandos Java encapsulados por um
nome:
String informeNome () {
return this.nome;
}
public void insereProduto (Produto item)
if (item == null)
return ;
itens. add(item);
}
Fred (C) 2003
Java: Sintaxe
ðEm linguagens imperativas: funções, subrotinas e
procedimentos
uMétodos podem possuir zero ou mais parâmetros e
{
podem conter declarações locais de variáveis
uA invocação de um método é uma expressão Java
ðExceção: métodos com retorno void não são
expressões
63
Métodos
Fred (C) 2003
Java: Sintaxe
64
Métodos
uAssinatura de um método:
uNome do método: mesmas regras dos
identificadores de variáveis
ðNome do método
ðTipo e nome de cada parâmetro
uTipo de retorno: um tipo primitivo, um tipo
referenciável, um array ou void.
ðTipo do valor retornado
ðLista de exceções
ðModificadores
uParâmetros são separados por vírgulas e, quando
uSintaticamente:
modif tipo nome (params)[throws exceções]{
corpo_do_método
}
Fred (C) 2003
62
Java: Sintaxe
65
não existirem, o nome do método vem seguido por
'()'
uA cláusula throws informa as exceções (erros)
que o método pode lançar.
Fred (C) 2003
Java: Sintaxe
66
11
Métodos
Pacotes
uExemplos de assinaturas de métodos:
uColeção de classes e interfaces relacionadas com
um espaço de proteção e de nomes comuns.
ðpublic static void main(String[] args) {...}
ðpublic final int indexOf (Object e, int s) {...}
ðIdentificar classes com características comuns.
ðFacilidade para encontrar classes desejadas.
ðdouble distanciaDaOrigem () {...}
ðstatic double raiz(double e)
throws IllegalArgumentException {...}
ðNomes de classes num pacote não entram em conflito
com nomes de classes de outros pacotes.
ðFacilitar o acesso entre classes no mesmo pacote.
ðprotected abstract String readText(File f)
throws FileNotFoundException,
UnsupportedEncondingException {...}
Fred (C) 2003
Java: Sintaxe
67
Fred (C) 2003
Java: Sintaxe
Pacotes
Importação de pacotes e classes
uPacotes em Java possuem nomes compostos
uDentro de um pacote pacote1 , uma classe A
separados por "." (ponto)
pode se referir a uma outra classe B apenas por
seu nome simples
uClasses de outro pacote pacote2 devem
adicionar o nome do pacote pacote1 para
utilizarem as classes A e B
ðNomes de pacotes da plataforma começam por java,
javax ou sun
uExemplos de pacotes:
ðjava.lang: pacote com várias classes fundamentais da
linguagem Java, tais como, String, Math, etc.
ðjava.util: pacote com classes utilitárias e estruturas de
dados
Fred (C) 2003
Java: Sintaxe
68
ðExemplo: pacote1.A a = new pacote1.A();
ðExemplo: java.io.File f;
f = new java.io.File("abc.txt");
69
Fred (C) 2003
Java: Sintaxe
Importação de pacotes e classes
Importação de pacotes e classes
uA diretiva import dispensa o uso do nome
uExemplos:
qualificado de uma classe de outro pacote
uDeve ser colocada depois da diretiva package
import
import
import
import
uPode ser usada mais de uma vez
uDisponível em duas formas:
ðImportação de uma classe de um pacote
70
java.util.ArrayList;
java.util.Iterator ;
java.io.*;
//importa tudo
java.lang.*;
//dispensável
public class Cliente {
...
}
ðImportação de todas as classes de um pacote
O pacote java.lang é sempre importado automaticamente!
Fred (C) 2003
Java: Sintaxe
71
Fred (C) 2003
Java: Sintaxe
72
12
Definição de pacotes
Definição de pacotes
uA diretiva package define o pacote ao qual a
uCada arquivo fonte deve estar num diretório que
classe pertence
uDeve ser a primeira palavra reservada Java a
aparecer em um arquivo
uSintaxe: package nome_do_pacote;
reflita o nome do pacote
package v3;
public class Cliente {
...
}
uPacotes devem ser rotulados com o nome de
Java: Sintaxe
Cliente.java
Produto. java
package v3;
public class Produto {
...
}
domínio invertido, para garantir unicidade global
uExemplo: package br.nti.ufpb.contacad;
Fred (C) 2003
v3
73
Fred (C) 2003
v3.Produto
v3\Produto.java
Java: Sintaxe
74
Definição de pacotes
Definição de pacotes
uOs bytecodes também exigem a mesma hierarquia:
uO diretório base do pacote pode estar em qualquer
package v3;
public class Cliente
{
...
}
C:\
v3
loja
Cliente.class
package v3;
public class Produto
{
...
}
Fred (C) 2003
ponto do sistema de arquivos.
uExemplo:
Compilador Java
package v3;
public class Produto {
...
}
Produto. class
Java: Sintaxe
75
Fred (C) 2003
pacote
v3
Produto. java
Java: Sintaxe
Definição de pacotes
Definição de pacotes
uSugestão para organização do código:
C:\
uO compilador e o interpretador devem estar
informados onde encontrar os arquivos fontes e de
classes.
uDefinindo um CLASSPATH:
loja
fontes
v3
Fred (C) 2003
ðConjunto de diretórios que contêm pacotes onde o
compilador e o interpretador devem procurar por
arquivos fontes e bytecodes
classes
v3
Cliente.java
Cliente.class
Produto. java
Produto. class
Java: Sintaxe
76
77
Fred (C) 2003
Java: Sintaxe
78
13
Definição de pacotes
Definição de pacotes
uApenas diretórios que contêm diretórios base de
uExemplos:
pacotes devem ser listados.
uExemplo:
ðCompilando o código em linha de comando:
C:\> javac –classpath c:\loja\fontes
Cliente.java
C:\> _
ðc:\loja\fontes deve estar no classpath
ðc:\loja\fontes\v3 não deve!
ðExecutando uma classe:
uDefinindo um classpath:
ðSET CLASSPATH=c:\loja\fontes;c:\loja\classes
C:\> java –classpath c:\loja\classes
Cliente
C:\> _
• Inserido no arquivo AUTOEXEC.BAT
ðDiretiva -classpath do compilador/interpretador
Fred (C) 2003
Java: Sintaxe
79
Fred (C) 2003
Java: Sintaxe
Estrutura de um código fonte Java
Estrutura de um código fonte Java
uArquivo: menor unidade compilável de Java
uTodo arquivo Java deve conter no máximo uma
classe com acesso public.
uEstrutura:
ð Uma diretiva package (opcional)
ð Zero ou mais diretivas import
ð Uma ou mais definições de classe
uO nome do arquivo deve ser o mesmo de sua
classe public com a extensão .java.
uÉ boa prática de programação declarar apenas
uTodo comando Java deve estar contido dentro dos
uma classe por arquivo, mesmo quando estas
pertencerem a um mesmo pacote.
métodos das classes
uTodo método deve aparecer dentro de alguma
classe.
Fred (C) 2003
80
Java: Sintaxe
81
Estrutura de um código fonte Java
Fred (C) 2003
Java: Sintaxe
82
Estrutura de um código fonte Java
uSintaticamente:
[package NomeDoPacote]
{[import * ou Classe]}
public class NomeDaClasse
[extends Superclasse]{
Corpo da classe
}
CLASSE
ARQUIVO
Fred (C) 2003
class OutraClasse
[extends Superclasse]{
Corpo da classe
}
COMANDO
MÉTODO
Java: Sintaxe
PACOTE
83
Fred (C) 2003
Java: Sintaxe
84
14
Estrutura de um código fonte Java
uClasses de um mesmo pacote:
package figuras;
package figuras;
package figuras;
class Circulo {
class Retangulo {
class Poligono {
corpo da
classe...
}
Circulo.java
Fred (C) 2003
corpo da
classe...
}
Retangulo.java
Arranjos e Strings
corpo da
classe...
}
Poligono.java
Java: Sintaxe
85
Fred (C) 2003
Arranjos
Arranjos
uArranjos são objetos em Java!
uSintaxe geral:
86
tipo[ ] referência = new tipo[tamanho]
uArranjos devem ser declarados e depois
instanciados.
uExemplo:
uO tipo base de um arranjo pode ser primitivo ou de
referência (objetos)
uUma vez criados, não podem mudar de tamanho
uSão indexados a partir do índice 0 (zero)
uPossuem uma propriedade pública length que
contém o tamanho do arranjo
int[] inteiros;
//declaração
inteiros = new int[20]; //instanciação
Ou:
int[] inteiros = new int[20]; //2 em 1
Fred (C) 2003
Java: Sintaxe
Java: Sintaxe
87
Arranjos
Fred (C) 2003
Java: Sintaxe
88
Arranjos
uTipo primitivo:
int[] arrayDeInteiros = new int[10];
int arrayDeInteiros[] = new int[10];
Cada caixinha é uma
referência para um
objeto Produto a ser
criado!
vendas
uTipo referência:
String[][] nomes = new String[2][3];
Produto[] vendas = new Produto[3];
Object coisas[] = new Object[10];
uA declaração acima só cria os arranjos, os objetos
devem ser criados depois!
Fred (C) 2003
Java: Sintaxe
= null
89
Fred (C) 2003
Java: Sintaxe
90
15
Arranjos
Arranjos
uArranjos literais:
uPovoando um arranjo de referências:
ðNa declaração de uma referência:
Produto[] vendas = new Produto[3];
vendas[0] = new Produto("Celular", 600);
vendas[1] = new Produto("DVD", 700);
vendas[2] = new Produto("Mesa", 100);
System.out.println(vendas.length);
int[] inteiros = {1, 2, 3, 4, 5};
ðNa passagem de um valor literal:
String r = abrirDialogo("Deseja sair?",
uCada posição do arranjo é uma referência para um
new String[] {"Sim", "Não"});
objeto da classe Produto
uA inicialização é feita em tempo de execução!
Fred (C) 2003
Java: Sintaxe
91
Arranjos
Fred (C) 2003
Java: Sintaxe
92
Strings
uStrings também são objetos em Java.
vendas
uDevem ser declarados e instanciados.
uExemplos:
String linguagem;
linguagem = new String(“Java”);
linguagem = “Java”;
"Celular"
600.0
"DVD"
700.0
Fred (C) 2003
Java: Sintaxe
//...instancia
//mais prático!
uConcatenação: “Java ” + “é a melhor”
“2+2=” + 4
“Produto = ” + p
//p é um Produto
"Mesa"
100.0
93
Strings
Fred (C) 2003
Java: Sintaxe
94
Strings
uInterface da classe String
String s = new String("Java é a melhor");
s.charAt(3);
// 'a'
s.compareTo("Java é");
// 9
"Java é".compareTo(s);
// –9
s.compareToIgnoreCase("java é a melhor"); // 0
s.equalsIgnoreCase("jAvA É a meLhoR");
// true
s.length();
// 15
"Isto é um string".length(); // 16
s.substring(7);
// "a melhor"
s.substring(0,4);
// "Java"
ðchar charAt(int pos)
ðint compareTo(String s)
ðint compareToIgnoreCase(String s)
ðboolean endsWith(String s)
ðboolean equals(String s)
ðboolean equalsIgnoreCase(String s)
ðint length()
ðString substring(int ini)
ðString substring(int ini, int fim)
Fred (C) 2003
//declara...
Java: Sintaxe
95
Fred (C) 2003
Java: Sintaxe
96
16
Strings
Strings
uInterface da classe String
String s = new String("Java é a melhor");
s.indexOf("a ");
// 3
s.indexOf("a ", 4);
// 7
s.indexOf('e');
// 10
s.indexOf('é', 2);
// 5
s.lastIndexOf("a ");
// 7
s.lastIndexOf("a ", 6);
// 3
"Nabucodonosor".lastIndexOf('o');
// 11
"Nabucodonosor".lastIndexOf('o', 7); // 7
ðint indexOf(String s)
ðint indexOf(String s, int ini)
ðint indexOf(int ch)
ðint indexOf(int ch, int ini)
ðint lastIndexOf(String s)
ðint lastIndexOf(String s, int ini)
ðint lastIndexOf(int ch)
ðint lastIndexOf(int ch, int ini)
Fred (C) 2003
Java: Sintaxe
97
Strings
Java: Sintaxe
String s = new String("Java é a melhor");
s.toLowerCase();
// "java é a melhor"
s.toUpperCase();
// "JAVA É A MELHOR"
" Joao Pessoa ".trim(); // "Joao Pessoa"
s.replace('a','o');
// "Jovo é o melhor"
s.startsWith("java");
// false
s.startsWith("Java", 2); // false
s.toCharArray();
// {'J'','a','v',..}
s.regionMatches(9,"melhor",0,6); // true
ðString toLowerCase()
ðString toUpperCase()
ðString trim()
ðString replace(char c1, char c2)
ðboolean startsWith(String s)
ðboolean startsWith(String s, int desloc)
ðchar[ ] toCharArray()
ðboolean regionMatches(int d1, String s, int d2, int tam)
Java: Sintaxe
99
String – Exemplo mais completo
Fred (C) 2003
Java: Sintaxe
uEsquematicamente:
nomes de arquivos no Windows/DOS ou Unix
e
ðA classe deve guardar um nome completo de arquivo e
permitir o acesso a cada uma de suas partes:
• nome
• caminho
• extensão do arquivo
e
xt
ns
ão
()
?
nomeCompleto
separador
ca
Java: Sintaxe
100
String – Exemplo mais completo
uConstruir uma classe que facilite a manipulação de
Fred (C) 2003
98
Strings
uInterface da classe String
Fred (C) 2003
Fred (C) 2003
101
mi
Fred (C) 2003
nh
?
o()
Java: Sintaxe
nom
nome!
e()
?
102
17
String – Exemplo mais completo
String – Exemplo mais completo
public class NomeArquivo {
private String nomeCompleto;
private char separador;
//Retorna o nome do arquivo
public String nome() {
int ponto = nomeCompleto.lastIndexOf(‘.’);
int sep = nomeCompleto.lastIndexOf(separador);
return nomeCompleto.substring(sep + 1, ponto);
}
// Retorna o caminho (path) do arquivo
public String caminho() {
int sep = nomeCompleto.lastIndexOf(separador);
return nomeCompleto.substring(0, sep);
}
} // fim da classe NomeArquivo
// construtor da classe
public NomeArquivo(String nome, char sep) {
nomeCompleto = nome;
separador = sep;
}
// método para retornar a extensão do arquivo
public String extensao () {
int ponto = nomeCompleto.lastIndexOf(‘.’);
return nomeCompleto.substring(ponto + 1);
}
Fred (C) 2003
Java: Sintaxe
103
Fred (C) 2003
Java: Sintaxe
104
String – Exemplo mais completo
public class AplicacaoNomes {
public static void main(String[] args) {
Operações de entrada e saída
NomeArquivo arq;
arq = new NomeArquivo("c:\\temp\\teste.doc", '\\');
System.out.println("Extensao: " + arq.extensao());
System.out.println("Caminho:" + arq.caminho());
System.out.println("Nome:" + arq.nome());
}
} // fim da classe AplicacaoNomes
Fred (C) 2003
Java: Sintaxe
105
Entrada e saída
Fred (C) 2003
Java: Sintaxe
106
Entrada e saída
System
uEncontram-se na classe System (java.lang)
ðSystem.in e System.out
uin é uma variável de classe do tipo InputStream
ðEla referencia um objeto InputStream que representa
a entrada padrão do sistema
um objeto InputStream
in
out
um objeto PrintStream
uout é uma variável de classe do tipo PrintStream
ðEla referencia um objeto PrintStream que representa
a saída padrão do sistema
Fred (C) 2003
Java: Sintaxe
107
Fred (C) 2003
Java: Sintaxe
108
18
Entrada e saída
Entrada e saída
uLendo da entrada padrão:
ðSystem.in.read()
System.in ß
ß read()
System
System.out ß
ß println("...")
in
out
uEscrevendo na saída padrão:
ðSystem.out.println(...)
uAmbos são métodos enviados para os objetos
referenciados por in e out. As classes
InputStream e PrintStream
implementam estes métodos.
Fred (C) 2003
Java: Sintaxe
109
Fred (C) 2003
Java: Sintaxe
Entrada e saída
Entrada e saída
uComo Java não foi projetada para produzir
uInterface da classe EasyIn
aplicações com interfaces baseadas em texto, a
entrada (principalmente) e saída de dados é
muito pouco prática (para não dizer inexistente!)
uUtilizaremos uma classe não padrão chamada
EasyIn para facilitar a entrada de dados das
primeiras aplicações
Fred (C) 2003
Java: Sintaxe
110
ðboolean readBoolean()
ðbyte readByte()
ðshort readShort()
ðint readInt()
ðboolean readLong()
ðfloat readFloat()
ðdouble readDouble()
ðchar readChar()
ðString readString()
111
Fred (C) 2003
Java: Sintaxe
Exemplo
Classes da API de Java
uExemplo de uso de EasyIn:
ujava.lang.StringBuffer
ðStrings que podem ser alterados dinamicamente
(mais eficientes que String)
public static void main(String args[]){
NomeArquivo meuArquivo;
EasyIn in = new EasyIn ();
PrintStream out = System .out;
String nome;
char sep;
112
uAlguns métodos
ðStringBuffer append(tipo dado)
ðStringBuffer insert(int por, tipo dado)
out.print (" Forneca um nome de arquivo completo:") ;
nome = in.readString();
out.print (" Forneca o separador utilizado:" );
sep = in. readChar ();
nomeArquivo = new NomeArquivo(nome, sep) ;
ðString toString()
ðvoid setCharAt(int pos , char c)
}
Fred (C) 2003
Java: Sintaxe
113
Fred (C) 2003
Java: Sintaxe
114
19
Classes da API de Java
Classes da API de Java
ujava.util.Calendar
ðGuarda e manipula datas e horas
ujava.util.Calendar
ðGuarda e manipula datas e horas
uAlguns métodos
uConstantes (para usar em campo)
ðCalendar.DAY_OF_MONTH
ðCalendar.DAY_OF_WEEK
ðCalendar.HOUR
ðCalendar.MINUTE
ðCalendar.MONTH
ðetc. (veja API da classe Calendar)
ðCalendar getInstance()
ðboolean after(Object data)
ðboolean before(Object data)
ðint add(int campo, int qtde)
ðvoid get(int campo)
ðvoid set(int campo, int valor)
Fred (C) 2003
Java: Sintaxe
115
Fred (C) 2003
Java: Sintaxe
116
Calendar
Classes encapsuladoras
uExemplo
uClasses encapsuladoras
ðByte, Integer, Long, Float, Double e Boolean
import java .util. Calendar;
ðPacote java.lang
public class UsandoCalendar {
public static void main (String[] args ) {
uPrincipais utilidades:
ðEncapsular um valor primitivo na forma de um objeto
Calendar cal = Calendar. getInstance(); //data atual
cal.add (Calendar.DAY_OF_WEEK, 2);
System.out. println("Dia da semana: " +
cal.get( Calendar .DAY_OF_WEEK));
System.out. println("Dia do mes : " +
cal.get( Calendar .DAY_OF_MONTH));
System.out. println("Hora: " +
cal.get( Calendar .HOUR));
ðUtilização de tipos primitivos em escopos exclusivos de
tipos de referência
ðConversões: String ó tipos primitivos
}
}
Fred (C) 2003
Java: Sintaxe
117
Fred (C) 2003
Java: Sintaxe
118
Classes empacotadoras
Classes empacotadoras
uUtilização de tipos primitivos em escopos
uUtilização de tipos primitivos em escopos
exclusivos de tipos de referência
exclusivos de tipos de referência
Object[] coisas = new Object[3];
coisas[0] = new NomeArquivo("teste.doc", '\\');
coisas[1] = new String("java");
coisas[2] = new Integer(3);
//Ok!
Object[] coisas = new Object[3];
coisas[0] = new NomeArquivo("teste.doc", '\\');
coisas[1] = new String("java");
coisas[2] = 3;
NÃO PODE!!!
ANTES
3 é um literal do tipo primitivo int
Literal primitivo
ð Os elementos do arranjo só podem ser objetos da
classe Object ou de quaisquer subclasses desta.
Fred (C) 2003
Java: Sintaxe
DEPOIS
Objeto de Integer
3
119
Fred (C) 2003
3
Java: Sintaxe
120
20
Classes empacotadoras
Classes empacotadoras
uConversões tipos primitivos à String
uClasse Integer
ðConstantes
à
à
De
boolean
int
long
float
double
Para String
• static final int MIN_VALUE, MAX_VALUE
String. valueOf( boolean)
String. valueOf( int) , Integer .toString( int)
String. valueOf( long ), Long .toString( long )
String. valueOf( float) , Float .toString( float)
String. valueOf( double ), Double. toString (double)
ðPrincipais métodos
•
•
•
•
•
•
uConversões String à tipos primitivos
De String para:
boolean
int
long
float
double
new Boolean (String s).booleanValue ()
Integer .parseInt(String s, int base)
Long. parseLong(String s, int base)
Float .parseFloat(String s)
Double. parseDouble(String s)
Fred (C) 2003
GERAM
UMA
EXCEÇÃO
Java: Sintaxe
121
Integer(String s) throws NumberFormatException
static int parseInt(String s) idem
static String toBinaryString(int i)
int intValue()
long longValue()
float floatValue()
Fred (C) 2003
Java: Sintaxe
Classes empacotadoras
Classes empacotadoras
uClasse Boolean
uClasse Float
ðConstantes
ðConstantes
• static final float MIN_VALUE, MAX_VALUE
• static final float NEGATIVE_INFINITY
• static final Boolean FALSE;
• static final Boolean TRUE;
ðPrincipais métodos
ðPrincipais métodos
•
•
•
•
•
•
•
•
•
•
Boolean (boolean b)
Boolean (String s)
boolean booleanValue()
static Boolean valueOf(String s)
Fred (C) 2003
Java: Sintaxe
123
Float (String s) throws NumberFormatException
Float (float f)
static float parseFloat(String s) throws NumberFormatException
static Float valueOf(String s) throws NumberFormatException
float floatValue()
static String toString(float f)
Fred (C) 2003
Java: Sintaxe
Classes empacotadoras
Classes empacotadoras
uClasse Double
uExemplos:
ðConstantes
124
class Conversao {
• static final double MIN_VALUE, MAX_VALUE
• static final double NEGATIVE_INFINITY
public static void main(String[] args) {
String numero;
int inteiro;
ðPrincipais métodos
•
•
•
•
•
•
122
Double (String s) throws NumberFormatException
Double (double f)
static double parseDouble(String s) throws NumberFormatException
static Double valueOf(String s) throws NumberFormatException
double doubleValue()
static String toString(double f)
numero = new EasyIn().readString();
try {
inteiro = Integer.parseInt(numero, 10);
} catch (NumberFormatException nfe) {
inteiro = 0;
}
for(int i=0; i<inteiro; i++) { //processa }
}
}
Fred (C) 2003
Java: Sintaxe
125
Fred (C) 2003
Java: Sintaxe
126
21
Bibliografia
Ken e Gosling, James. Programando em
Java. Makron Books. 1997.
u Arnold,
Mary e Walrath, Kathy. The Java Tutorial Object Oriented Programming for the Internet. Addyson
Wesley. 1996.
u Campione,
H. M. e Deitel, P. J. Java - How To Program.
Prentice Hall. 1997.
u Flanagan , David. Java in a Nutshell. O’Reilly. 1999.
u Deitel,
Fábio. Java – Guia de Consulta Rápida.
Novatec 1999.
u Ramon,
Fred (C) 2003
Java: Sintaxe
127
22
Download