Linguagem Java Introdução ao Java

Propaganda
03-03-2011
Linguagem Java
Introdução ao Java
Diapositivos elaborados por:
José Magno
José Ribeiro
Ricardo Antunes
Diapositivos com base em:
Vitor Carreira
Carlos Urbano
1
Do Código à Execução em Java
O programa é compilado uma só vez e gera um ficheiro .class (Java
bytecode)
A aplicação (java bytecode) é interpretada por uma máquina virtual Java Virtual Machine
2
1
03-03-2011
Do Código à Execução em Java
●
Write once, run everywhere
3
Gestão de Memória em Java
Não existem ponteiros
−
O ponteiro é substituído por referências
−
A aritmética de ponteiros desaparece
Verifica em runtime o acesso a tabelas
−
Garbage Collection automático
−
Não permite que um índice aceda fora dos limites de uma
tabela
Não é preciso libertar memória
Operação de casting é restrita e é verificada em
runtime
4
2
03-03-2011
Plataforma Java
Disponível gratuitamente
●
●
Java Development Kit 1.6
−
Compilador (javac)
−
Intérprete (java)
−
Gerador de documentação (javadoc)
−
Conjunto de bibliotecas standard
−
Documentação para todas as bibliotecas
Java Tutorial
−
http://java.sun.com/docs/books/tutorial/
5
Primeira Aplicação em C
void main (int argc, char* argv[]) {
if (argc == 2)
printf ("Ola %s\n",argv[1]);
else
printf ("Ola mundo!\n");
}
6
3
03-03-2011
Primeira Aplicação em Java
public class OlaMundo {
public static void main(String[] args) {
if (args.length == 1)
System.out.println("Olá " + args[0]);
else
System.out.println("Olá mundo!");
}
}
7
Comentários
●
Existem três tipos de comentários
●
Linha única: //
●
Múltiplas linhas: /* */
●
Comentários relativos a documentação
(Javadoc): /** */
8
4
03-03-2011
Comentários - Javadoc
Estrutura
/** Comentário relativo à classe */
public class OlaMundo {
/** Comentário relativo ao atributo */
public int numArgumentos;
/** Comentário relativo ao método */
public static void main(String[] args) {
System.out.println("Ola mundo!");
}
}
9
Identificadores
Tal como em C:
●
A linguagem Java é case sensitive
●
Os identificadores não podem começar por um dígito
●
Um identificador não pode ser igual a uma palavra reservada
●
Podem conter:
−
letras {a-z}, {A-Z}
−
dígitos {0-9}
−
caracter underscore _
Ao contrário do C, os identificadores podem conter
letras acentuadas (caracteres regionais)
●
●
Exemplo: olá, identificação_pessoa
No entanto só vamos considerar a norma sem underscore (_)
e sem caracteres acentuados: identificacaoPessoa
10
5
03-03-2011
Tipos de Dados
●
Java suporta dois tipos de dados:
Referências
●
Classes, interfaces ou arrays
Tipos primitivos
●
●
●
●
Inteiros
Reais
Caracteres
Booleanos
11
Tipos Primitivos
Tipos
Tamanho
Mínimo
Primitivos
boolean
1-bit
char
16-bit
Unicode 0
byte
8-bit
-128
short
16-bit
-32,768
int
32-bit
-2,147,483,648
long
64-bit
-9,223,372,036,854,775,808
float
32-bit
±3.4e-38
±1.7e-308
double
64-bit
Máximo
Unicode 216-1
127
32,767
2,147,483,647
9,223,372,036,854,775,807
±3.4e+38
±1.7e+308
Classe
Adaptação
Boolean
Character
Byte
Short
Integer
Long
Float
Double
Nota
●
●
●
Ao contrário do C, todos os tipos têm um tamanho fixo.
Ao contrário do C, todos os tipos inteiros têm sinal. Não
existe o modificador unsigned.
Todos os tipos têm uma classe de adaptação (wrapper)
que permite transformar um tipo primitivo num objecto.
12
6
03-03-2011
Classes Wrapper
A API do Java dispõe dum conjunto de classes que permitem
criar objectos equivalentes aos tipos primitivos
Tipo primitivo Classe de Adaptação
boolean
Boolean
Exemplo
Boolean obj = new Boolean(false);
boolean b = obj.booleanValue();
char
Character
byte
Byte
Byte obj = new Byte((byte)0);
byte b = obj.byteValue();
short
Short
Short obj = new Short((short)1);
short s = obj.shortValue();
int
Integer
Character obj = new Character(‘X’);
char ch = obj.charValue();
Integer obj = new Integer(2);
int i = obj.intValue();
long
Long
Long obj = new Long(3);
long l = obj.longValue();
float
Float
Float obj = new Float(4.1F);
float f = obj.floatValue();
double
Double
Double obj = new Double(5.2);
double d = obj.doubleValue();
13
Autoboxing e Unboxing
●
Autoboxing e unboxing são termos dados às funcionalidades que
permite utilizar um tipo primitivo com se de um tipo de referência se
tratasse, e que permite extrair o valor do tipo primitivo de um tipo de
referência.
●
O compilador executa a conversão automaticamente e implicitamente.
●
Foi introduzido na versão 5.0 do Java.
Integer
Integer
int k =
Integer
i
j
9
l
int i =
int j =
Integer
Integer
=
=
+
=
new
new
13;
i +
Integer(9);
Integer(13);
// OK em todas as versões do Java
j; // erro em versões anteriores à 5.0
4;
5;
k = new Integer(i + j); // OK em todas as versões
l = i + j; // erro em versões anteriores à 5.0
7
03-03-2011
Declaração de Variáveis
●
Diferenças em relação ao ANSI C
−
−
●
●
As variáveis podem ser declaradas em qualquer ponto
do programa
Dentro de um bloco não se pode declarar uma variável
com o nome de uma variável do bloco exterior
Por convenção, o identificador de uma variável
começa por letra minúscula
Todas as variáveis têm de ser iniciadas antes de
serem utilizadas
15
Constantes
●
char
−
Carácter entre ‘ ’
−
Sequências “Escape”
Sequência
\ddd
\uxxxx
\’
\”
\\
\r
\n
\f
\t
\b
Descrição
Octal character (ddd)
Hexadecimal UNICODE character (xxxx)
Single quote
Double quote
Backslash
Carriage return
New line
Form feed
Tab
Backspace
16
8
03-03-2011
Constantes
●
boolean
−
−
●
true
false
byte, short, int
−
−
Qualquer valor dentro da gama de valores possível
para o tipo em questão
Os valores podem ser expressos nos seguintes
formatos:
● decimal (10, 12, -1)
● octal (010, 017)
● hexadecimal (0x2e, 0xff)
17
Constantes
●
long
−
Suporta os formatos decimal, octal, hexadecimal
−
Adiciona-se no final a letra L ou l (L minúsculo)
●
●
double
−
●
Exemplo: long x = 0x7ffffffffffffffL;
Os valores podem ser expressos nos formatos:
●
Decimal (1.3, -0.0001)
●
Científico (2.2e-2 ou 2.2E-2, -0.1e20 ou -0.1E20)
float
−
Procede da mesma forma que o tipo double adicionando no
final a letra f ou F
●
Exemplo: (1.3f, 2.2e-2F)
18
9
03-03-2011
Operadores
Grupo
Operador
Atribuição
+
Aritméticos
=
*=
%=
+=
/=
Aritméticos
+
*
++
/
--
Relacionais
>
<
==
>=
<=
!=
Descrição
-=
O mesmo significado que em C
Não podem ser aplicados ao tipo boolean
O mesmo significado que em C
%
Não podem ser aplicados ao tipo boolean
O mesmo significado que em C. No entanto, produzem
um resultado do tipo boolean
Com a excepção dos operadores == e !=, não podem ser
aplicados ao tipo boolean
19
Operadores
Grupo
Lógicos
Manipulação
de bits
Deslocamento
de bits
Operador
&&
||
!
Descrição
O mesmo significado que em C
Só podem ser aplicados a expressões do tipo boolean
Produzem um resultado do tipo boolean
&
|
^
~
&=
|=
^=
<<
<<=
Deslocamento para a esquerda com sinal
(acrescenta 0 ou 1 à direita consoante o sinal)
>>
>>=
Deslocamento para a direita com sinal
(acrescenta à esquerda 0 ou 1 consoante o sinal)
>>>
>>>=
AND bit-a-bit
OR bit-a-bit
XOR bit-a-bit
Negação - Não pode ser aplicado ao tipo boolean
Os operadores de manipulação de bits não podem ser aplicados aos tipos
float e double
Deslocamento para a direita sem sinal (acrescenta 0 à esquerda)
Apenas se aplica aos tipos: byte, char, short, int e long
20
10
03-03-2011
Operadores
Operador ternário
−
expressão-tipo-boolean ? expressão1 : expressão2;
Operador de conversão (cast)
−
Sintaxe:
●
(Tipo desejado) Expressão
−
A conversão de um tipo mais pequeno para um maior é
feito de forma automática
−
O conversão de um tipo maior para um mais pequeno
tem de ser efectuado de forma explicita utilizando o
operador de cast
21
Promoção Automática
●
●
Numa expressão, todos os tipos são
automaticamente promovidos para o tipo de
maior precisão
Os tipos char, byte e short são automaticamente
promovidos para o tipo int
short i = 1;
i
=
i + 7;
^
Incompatible type for =. Explicit cast needed to
convert int to short
22
11
03-03-2011
Estruturas de Controlo
●
As estruturas de controlo são exactamente iguais
às do C. No entanto todas as condições têm de
ser expressões do tipo boolean
/* Em C a condição de uma
estrutura de controlo podia ser
qualquer expressão */
int a=3;
if (a)
a += 3;
else
if (a = 5)
a *= 2;
printf("a = %d", a);
/* Em Java a condição de uma estrutura
de controlo tem de ser uma expressão
“booleana” */
int a=3;
if (a != 0)
a += 3;
else
{
a = 5;
if (a != 0)
a *= 2;
}
System.out.print("a= " + a);
23
Estruturas de Controlo
Iguais às do C
●
●
Estruturas de selecção
−
if-else
−
switch
Estruturas de repetição
−
for
−
while
−
do..while
−
break and continue
24
12
03-03-2011
Estruturas em C
#include <stdio.h>
Resultado:
typedef struct{
int dia, mes, ano;
}t_data;
4/3/2010
void alterar_data(t_data *d1, t_data *d2) {
d1->dia = d2->dia;
d1->mes = d2->mes;
d1->ano = d2->ano;
}
int main(int argc, char *argv[]) {
t_data data1,data2;
data1.dia=4;
data1.mes=3;
data1.ano=2010;
alterar_data(&data2, &data1);
printf("%d/%d/%d\n",data2.dia,data2.mes,data2.ano);
return 0;
}
25
Classes em Java
package classes;
public class Data {
private int dia,mes,ano;
public Data() {
this.dia=1;
this.mes=1;
this.ano=1970;
}
public Data(int dia, int mes, int ano) {
this.dia=dia;
this.mes=mes;
this.ano=ano;
}
public void alterar(Data data) {
this.dia=data.dia;
this.mes=data.mes;
this.ano=data.ano;
}
package classes;
public class Test {
public static void main(String[] args) {
Data data1=new Data(4,3,2010);
Data data2=new Data();
data2.alterar(data1);
System.out.println(data2.getDia() +
“/“ + data2.getMes() + “/“ +
data2.getAno());
}
}
public int getDia(){
return dia;
}
public int getMes(){
return mes;
}
public int getAno(){
return ano;
}
}
Resultado:
4/3/2010
26
13
Download