Java Básico
Java Básico
Elementos
Básicos da
Linguagem Java
Histórico
E t t de
Estrutura d um programa JJava
Sintaxe básica de Java
Reinaldo Gomes
reinaldo@cefet-al.br
Definição
O que é a linguagem Java?
1
Histórico
Um pouco de história...
Janeiro de 1991: A Sun cria o projeto Green;
Objetivo do projeto Green: definir uma linguagem
portável para programação de aparelhos eletro-
eletrônicos de consumo geral – surge Oak ;
Parceria com a Time Warner é desfeita e o projeto
Green é quase que totalmente desativado;
Em 1993: explosão da Internet e da Web faz os
remanescentes do projeto Green direcionarem Oak
para aplicações na Internet;
Em 1993-1994: Oak torna-se Java;
3
Histórico
Um pouco de história...
Maio de 1995: Sun anuncia oficialmente Java na
SunWorld Expo´95
Dezembro de 1995: a Microsoft assinou um acordo de
intenções com a Sun para licenciamento da tecnologia
Java;
Fevereiro de 1996: Netscape Communications
(Navigator) incorporou Java em seu browser Navigator
2.0: surgem os applets;
Novembro de 1998: Sun lança plataforma Java 2.
2
Histórico
Autores...
James Gosling Æ
3
Estrutura do código fonte Java
Arquivo: menor unidade compilável de Java
Estrutura:
Zero ou uma diretiva package
Zero ou mais diretivas import
Uma ou mais definições de classe (uma é o padrão!)
Todo comando Java deve estar contido dentro dos
métodos das classes
Todo método deve aparecer dentro de alguma
classe.
7
4
Estrutura do código fonte Java
Um sistema em Java:
CLASSE COMANDO
<corpo da classe>
[ ] indicam opcionalidade
{ } indicam repetição
10
5
Estrutura de uma aplicação
Em 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
Uma aplicação em execução consiste num conjunto
de objetos,
objetos criados a partir das classes,
classes trocando
mensagens entre si
Saber como fatorar a solução do problema em classes
requer experiência e prática
11
6
Estrutura de um código fonte Java
Exemplo de uma classe Aluno:
13
7
Estrutura de um código fonte Java
Adicionando comportamento à classe:
public class Aluno {
p
private String nome;
private String matricula;
private double nota1;
private double nota2;
private double nota3;
//métodos anteriores...
método qque informa
a média do aluno
public double getMedia() {
return (nota1+nota2+nota3) / 3.0;
}
}
15
a.setNome("Joao");
a.setMatricula("021013123");
a.setNota1(7.0);
a.setNota2(8.0);
a.setNota3(9.0);
tN t 3(9 0)
System.out.println("Nome = " + a.getNome());
System.out.println("Media = " + a.getMedia());
}
AppNotas.java
16
8
Estrutura de um código fonte Java
Compilando e executando:
W:\projetos> javac Aluno.java
Aluno java
W:\projetos> javac AppNotas.java
W:\projetos> java AppNota
Nome = Joao
Media = 8.0
Y:\projetos> _
Compilador Java
Produz arquivos .class chamados bytecodes
17
setMatricula("0210131123")
setNota1(7.0)
...
18
9
A portabilidade de Java
Portabilidade
Uso de uma linguagem de máquina virtual (bytecode)
Interpreter
java
Compiler
jjavac
19
A portabilidade de Java
Portabilidade Write once, run anywhere!
20
10
Plataformas Java
Java atualmente é distribuída em 3 plataformas:
Java 2 Enterprise Edition (J2EE): para
desenvolvimento de aplicações coorporativas
distribuídas
Java 2 Standard Edition (J2SE): para
desenvolvimento de aplicações desktop comuns
http://java.sun.com/j2se/downloads/index.html
21
Plataformas Java
Plataformas para diferentes requisitos:
22
11
Plataformas Java
Pequeno Glossário de Java
API
• Aplication Program Interface ou interface para programação
de aplicações (as bibliotecas de Java! É a alma de Java!)
JDK
• Nome antigo do SDK (obsoleto, mas ainda muito usado!)
SDK ou J2SDK
• Software Development Kit: nome do kit da Sun com
f
ferramentas
t e APIs
API dad linguagem
li para desenvolvimento
d l i t
• Ferramentas do kit: javac, java, jar, javadoc, jdb, etc.
JRE
• Java Runtime Environment: É um pedaço do JDK
consistindo apenas do interpretador e algumas poucas
ferramentas. É para quem usa e não programa.
23
24
12
Caracteres
Uso do padrão Unicode: conjunto de caracteres de
16 bits
65536 caracteres distintos!
Caracteres Unicode são gravados em arquivos
usando um formato chamado UTF-8
Inserção de caracteres Unicode no código fonte:
\uxxxx
\u3c00 = π
25
Comentários
Três tipos de comentários:
// comentário de linha
/*
comentário de bloco
*/
/**
Classe <b>Cliente</b>
Comentário de bloco para o <i>javadoc</i>
@author Nome do autor
*/
26
13
Identificadores
Identificadores nomeiam variáveis (membro, locais,
parâmetros, etc), métodos e classes
14
Palavras reservadas
30
15
Tipos primitivos
Tipo Default Tamanho Domínio
boolean false 1bit NA
char
h \ 0000
\u0000 16bit
16bits \ 0000 a \uFFFF
\u0000 \ FFFF
byte 0 8bits -128 a 127
short 0 16bits -32768 a 32767
int 0 32bits -2147483648 a
2147483647
long 0 64bits -9223372036854775808 a
9223372036854775807
float 0.0f 32bits ±1.4E-45 a
±3.4028235E+38
double 0.0 64bits ± 4.9E-324 a
±1.797693134862E+308
31
Tipos primitivos
Tipo boolean
Dois valores: true e false
Tipo 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)
32
16
Tipos primitivos
Tipos inteiros (byte, short, int, long)
Literais na base decimal:
• 0, 1, 123, -23456
Literais nas bases hexadecimal e octal:
• 0xcafe //51966 em hexa
• 0377 //255 em octal
Inteiros(32 bits) x inteiros longos (64bits)
• 1234
• 1234L //long
• 0xF34L //long em hexa
33
Tipos primitivos
Tipos de ponto flutuante (float e double)
Literais:
• 0.0, 1.0, .01, -3.5
Notação científica:
• 1.2345E02 //1.2345 x 102
• 1e-6 //1 x 10-6
Literais ponto
ponto-flutuante
flutuante são sempre double!
• 12.34 //double
• 12.34f //float
• 6.02e23F //float
34
17
Conversão de tipos
Java permite conversões entre inteiros (byte,
short, int, long g), caractere (char) e pontos
p
flutuantes (float e double)
O tipo boolean é o único primitivo que não é
convertido em nenhum outro
Tipos de conversão
Conversões ampliadoras (widening conversions)
Conversões redutoras (narrowing conversions)
35
Conversões ampliadoras
Um valor de um tipo é convertido para um tipo
maior, isto é, um representado por mais bits
São realizadas automaticamente
Exemplos:
int i = 20;
float f = i; //20 convertido para float
36
18
Conversões redutoras
Um valor é convertido para um tipo com menos bits
Não são realizadas automaticamente
O programador deve confirmar a redução com um
cast, do contrário o código não é compilado
Exemplos: cast
int i = 13
13;
byte b = i; //Erro de compilação!
b = (byte) i; //Ok!
i = (int) 32.601; //i recebe 32
37
Operadores
Operadores aritméticos
Resultam num valor numérico ((inteiro ou ponto
p
flutuante)
Operadores de incremento e decremento
Resultam num valor numérico (inteiro ou ponto
flutuante)
Operadores
p relacionais
Resultam num valor booleano (true ou false)
Operadores lógicos
Produzem um valor booleano
38
19
Operadores
Operadores de atribuição
Executam uma operação
p ç seguida
g de uma atribuição
ç
Operador condicional (?:)
Condiciona seu valor de retorno a uma expressão
lógica
Operador instaceof: verifica se um objeto é
instância de uma classe
Resulta num valor boolean
Operador new: instancia uma classe
Produz um objeto da classe
39
Operadores aritméticos
Símbolos:
Adição: +
Subtração: -
Multiplicação: *
Divisão: /
Resto da divisão inteira: %
Exemplos:
c = 7 % 3; //c receberá 1
x = 5 + 10 / 2; //x receberá 10
40
20
Operadores incremento/decremento
Símbolos:
Incremento: ++
Decremento: --
O comportamento deste operador depende da posição
relativa ao operando
Exemplos:
41
Operadores relacionais
Símbolos:
Maior que,
que maior ou igual a: >,
> >>=
Menor que, menor ou igual a: <, <=
Igual a: ==
Diferente de: !=
Exemplos:
if ( c == 10 ) ...
return x != null;
42
21
Operadores lógicos ou booleanos
Símbolos:
AND: && ou &
OR: || ou |
NOT: !
XOR: ^
Exemplos:
Operadores de atribuição
Símbolos:
Aritméticos+atribuição: +
+=, -=, *-, //= e %
%=
Equivalem a uma soma entre o operando da direita e o
operando da esquerda seguida por uma atribuição
Forma geral: var op= valor ↔ var = var op valor
Exemplos:
c += 5; //c = c + 5
a -= b; //a = a – b
f %= (c+a); //f = f % (c+a)
e += 1; // e++ ou e = e + 1
44
22
Operador condicional
Símbolo:
Operador ternário: ?:
Equivale a um comando de decisão que resulta num
valor
Sintaxe: expr_booleana ? expressaoV : expressãoF
Exemplos:
j = (a>b)?a:b;
a = (a != null) ? a : "<vazio>";
v = r>0 ? 10 : 10.5; //erro!
a = (x<y)&&(z<y) ? y : ((x<z) ? z : x);
45
Operador instanceof
Sintaxe:
((objeto
j ou array)
y) instanceof nome_da_classe
Retorna true se o objeto for instância da classe
Exemplos:
"string" instanceof String //true
"" instanceof Object //true
null instanceof Object //false
46
23
Operador new
Sintaxe:
new construtor_da_classe
Cria um objeto da classe especificada no construtor
Exemplos:
c = new Cliente("Bart", "Springfield");
linguagem = new String("Java");
venda.adicioneProduto(new
d di i d t ( Produto());
d t ())
faixa = new int[] {1,2,3,4,5};
47
Operadores
(P)recedência e (A)ssociatividade
P A O
Operador
d
15 E . [ ] ( params ) ++ --
14 D + - !
13 D new ( tipo )
12 E * / %
11 E + - + (concatenação de strings)
10 E << >> <<<
9 E < <= > >= instanceof
48
24
Operadores
P A Operador
8 E p == p p != p r == r r != r (p=primitivo, r=referência)
7 E &
6 E ^
5 E |
4 E &&
3 E ||
2 D ?:
1 D = *= /= %= += -= <<= >>= >>>= &= ^= |=
49
Comandos
Estruturas de decisão:
if else e switch
if-else switch-case
case
Estruturas de repetição:
for, while e do-while
Tratamento de exceções:
throw e try-catch-finally
y y
Desvio de fluxo:
break, continue e return
50
25
Comando simples x bloco de comandos
Um comando em Java pode ser um comando
simples ou um bloco de comandos
Um comando simples pode ser: uma expressão,
um dos comandos anteriores ou uma ativação de
método;
Um bloco de comandos é um conjunto de um ou
mais comandos simples delimitados por "{" e "}" e
separados entre si por ";".
51
Comando if-else
Sintaxe: if ( expr_booleana )
comando simples ou bloco;
else
comando simples ou bloco;
Exemplo:
if (n != 0){
if (a>b) c += n;
maior = a; n = 0;
else } else
maior = b; c++;
52
26
Comando switch-case
Sintaxe: switch ( var_inteira ) {
[case val: comando ou bloco; break;]1-n
[default: comando ou bloco; break;]0-1
}
Exemplo:
(char | byte | short | int)
switch (mes) {
case 1: nome = "Janeiro";
Janeiro ; break;
case 2: nome = "Fevereiro"; break;
case 3: nome = "Março"; break;
case 4: nome = "Abril"; break;
default: nome = "Mês inválido"; break;
}
53
Comando for
Sintaxe: for ( inic; teste; inc )
comando simples ou bloco;
Onde:
O
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!
54
27
Comando for
Exemplos:
int i;
for (i=0 ; i<10 ; i++)
x += 5;
//outra forma
for (int i=0 ; i<10 ; i++) i só pode ser usada no
x += a[i]; corpo do laço for
//laço i
//l infinito
fi i
for( ;; ) {
if (x != null) break;
else { ... }
}
55
Comando for
Exemplos:
//mais de uma variável declaradas
for (int i=0, j=10 ; i<10 ; i++, j--)
soma += i*j;
;
//não precisa ser uma contagem
for (Node n = cabeca ; n!=null ; n=n.next())
System.out.println(n);
56
28
Comando while
Sintaxe: while ( expressão )
comando ou bloco;
Onde:
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
57
Comando while
Exemplos:
int c=0;
while (c < 10) {
System.out.println(c);
c++;
}
//equivale a
for (int c=0; c<10 ;c++) c só pode ser usada no
System.out.println(c);
( ) corpo do laço for
58
29
Comando do-while
Sintaxe: do
comando ou bloco;
while (expressão);
Onde:
expressão: expressão que retorne um booleano
59
Comando do-while
Exemplos:
60
30
Comando break
Sintaxe: break;
Objetivo:
Faz a execução saltar para o final de um dos
comandos: while, do-while, for ou switch-
case
No comando switch-case seu uso é necessário
para evitar que a execução de uma cláusula case
continue na seguinte
61
Comando break
Exemplo:
...
for (int i=0; i<dados.length ;i++) {
if (dados[i] == procurado) {
posicao = i;
break;
}
} //a execução continua daqui
...
62
31
Comando continue
Sintaxe: continue;
Objetivo:
Interrompe a iteração atual do laço e inicia a próxima
Só pode ser usado dentro de laços while, do-
while e for
• while: volta para o início do laço e testa a condição de
pparada ppara 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
63
Comando continue
Exemplo:
...
for (int i=0; i<dados.length ;i++) {
if (dados[i] == VAZIO)
continue;
processe(dados[i]);
}
...
64
32
Comando return
Sintaxe: return; ou
return expressão;
Objetivo:
Pára a execução do método corrente
Métodos com tipo de retorno void pedem a primeira
sintaxe do return
Métodos
Mét d que retornam
t ddados
d pedem
d a segunda
d
65
Comando return
Exemplos:
String informeNome() {
return this.nome;
}
66
33
Aula Prática 2
Objetivos:
Implementar classes simples
Testar classes implementadas
Executar uma classe de aplicação
67
Bibliografia
[1] Booch, G. Object Oriented Design. 1991.
[2] Campione,
Campione M. M Walrath,
Walrath K. K The Java Tutorial.
Tutorial
Disponível em
http://java.sun.com/docs/books/tutorial/index.html.
[3] Flanagan, D. Java in a Nutshell. O'Reilly. 1999.
68
34
Programação Orientada a Objetos
Elementos
Básicos da
Linguagem Java
Histórico
E t t de
Estrutura d um programa JJava
Sintaxe básica de Java
Reinaldo Gomes
reinaldo@cefet-al.br
Operadores
P A Operador
8 E p == p p != p r == r r != r (p=primitivo, r=referência)
7 E & (bitwise) & (lógico)
6 E ^ (bitwise) ^ (lógico)
5 E | (bitwise) | (lógico)
4 E &&
3 E ||
2 D ?:
1 D = *= /= %= += -= <<= >>= >>>= &= ^= |=
70
35