A Tecnologia Java
1
Introdução à linguagem
Origens do JAVA
Projecto “Green”, programação para a electrónica de
Consumo (Dezembro 1990):
Primeira abordagem: Em C++
Pouca memória disponível
Processadores fracos
Arquitecturas muito diferentes
Baixos requisitos computacionais
a linguagem era inadequada
demasiada complexa
não era multi-plataforma
Segunda abordagem: Criar uma nova linguagem multiplataforma com o melhor do C++, mas mais simples.
Nasceu o OAK.
2
Introdução à Linguagem
(cont.)
O projecto foi um fracasso, a electrónica de consumo não
precisava de algo tão sofisticado.
Primeiros anos da WWW
Páginas estáticas
todos os programas eram corridos no lado do servidor.
Massificação da WWW
correr os programas do lado do cliente
Problemas:
Diversos tipos de máquinas ligados á rede
Problemas de segurança
Independente da plataforma
A Sun viu a oportunidade e adaptou o OAK à WWW
Surgiu assim o JAVA (1995).
3
Arquitectura Java
Write once,
Run anywhere !
4
Arquitectura JAVA (cont.)
Independente da arquitectura computacional
Simples e Poderosa:
portável
Derivada do C++
Segura:
Não existem chamadas directas ao SO
para esse feito usa-se o Java Native Interface (JNI)
Não existem ponteiros explícitos
Robusta:
Gestão automática de memoria.
5
Arquitectura JAVA (cont.)
Orientada a Objectos:
Linguagem Orientada a Objectos pura
(quase…).
Multitarefa
Permite fazer coisas diferentes ao mesmo
tempo (Threads)
6
Plataformas JAVA
J2ME – Java 2 Micro Edition
J2SE – Java 2 Standard Edition
Java para Paltops e Telemóveis
Java para desktops / workstations
J2EE - Java 2 Enterprise Edition
Java para servidores
7
8
Linguagem Java
9
Hello World
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Todo o código é escrito dentro de classes
Uma Classe Executável (Main Class) tem o método
Class HelloWorld
public static void main(String[] args)
System.out.println
Escrita de mensagens no monitor
10
Executar um programa
Compilar o programa
Java compiler (javac)
Javac HelloWorld.java
HelloWorld.class
Correr o programa
Java Virtual Machine (java)
Java HelloWorld
“ola mundo”
11
Definição da linguagem
12
Tipos de dados básicos
Números Inteiros:
byte – 8 bits,
short – 16 bits
float – 32 bits
-3.40292347E+38 a +3.40292347E+38
double – 64 bits
-1.79769313486231570E+308 a +1.79769313486231570E+308
Caracteres:
char – 16 bits
-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
Números Reais:
-2.147.483.648 a 2.147.483.647
long – 64 bits,
-32.768 a 32.767
int – 32 bits
128 a 127
'\u0000' a '\uFFFF' (Valores em unicode)
Booleanos:
boolean – 1 bit
true ou false
13
Operadores
Aritméticos:
+ Adição
- Subtracção
* Multiplicação
/ Divisão
% Resto da Divisão
Comparação:
Atribuição:
= Atribuição
+= , -= , *= , /= , %=
Lógicos:
Incremento e Decremento:
++ , --
== igualdade
!= diferença
< menor que
> maior que
<= menor ou igual
>= maior ou igual
&& ( e )
|| ( ou )
! (não)
Bit a bit
>> , <<
&|^
14
Precedência e Associatividade
dos Operadores
Prioridade Operador
Associatividade
Alta
()
da esquerda para a direita
++ -- + - !
unários; da direita para a esquerda
*/%
da esquerda para a direita
+-
da esquerda para a direita
< <= > >=
da esquerda para a direita
== !=
da esquerda para a direita
&
da esquerda para a direita
^
da esquerda para a direita
|
da esquerda para a direita
&&
da esquerda para a direita
||
da esquerda para a direita
Baixa
= += -= *= /= %= da direita para a esquerda
15
Símbolos – declaração e
inicialização
Exemplos de declarações de variáveis:
int x;
int x = 10;
int x = 20, y, z = 30;
int a = x+y;
char um = ‘1’;
char c = ‘A’;
char newline = ‘\n’;
boolean fim;
boolean fechado = true;
long diametro;
long raio = -1.7E+5
double j = .000000123
double pi = 3.141559273269
Caso Geral
id_tipo id_variavel [ = valor ];
id_tipo id_variavel [ = valor ] , [id_variavel [ = valor ] … ];
16
Simbolos (cont.)
Constantes:
final id_tipo id_variavel
= valor [, id_variavel [ = valor ] … ];
NOTA: As constantes têm de ser inicializadas quando são declaradas
final double PI = 3.14;
Conversões entre tipos (Casting):
int x = 12;
double d;
d = (double) x; // d = 12.0
double x = 12;
int i;
i = (int) x;
// i = 12
double x = 12.5;
int i;
i = (int) x;
// i = 12
char c1 = ‘a’
c1 = (char) ((int) c1 + 1) // c1 = ‘b’
17
Funções matemáticas
Biblioteca
Java.lang.Math
double s = java.lang.math.sin(3.14)
Seno de PI
double r = java.lang.math.random()
Aleatorio ente 0..1
18
Input / output
Output
System.out.println(“mensagem”)
System.out.print(“mensagem”)
JOptionPane.showMessageDialog(null,"Este é um diálogo simples");
Input
System.in.read();
JOptionPane.showInputDialog("Digite o seu nome");
Teclado.java
readInteger()
readLong()
readDouble()
readFloat()
readString();
int i;
i = Teclado.readInteger()
19
Comentários
Comentar uma linha de código: //
int x;
//int x = 10;
int x = 20, y, z = 30;
int a = x+y;
Comentar um bloco de código: /* */
int x;
/*int x = 10;
int x = 20, y, z = 30;*/
int a = x+y;
20
Estruturas de Controlo
Condicionais:
if/else
if (numer %2 == 0)
System.out.println(“numero par”);
else
System.out.println(“numero impar”);
if ( expressão booleana)
instruções;
[else
instruções;]
21
Estruturas de Controlo (cont.)
switch
switch (expressão inteira) {
case valor_1: instruções; break;
case valor_2: instruções; break;
case valor_3: instruções; break;
…
case valor_n: instruções; break;
default: instruções;
};
switch (mes) {
case 2: dias = 28;
break;
case 4:
case 6:
case 9:
case 11: dias = 30;
break;
default: dias = 31;
}
22
Estruturas de Controlo (cont.)
Repetitivas:
for ( inicialização; condição_de_saída; iteração )
instruções
int a = 0;
for (int i = 0; i <= 10; i++)
a = a + i;
23
Estruturas de Controlo (cont.)
while
while ( condição_de_iteração ) {
instruções
}
int a = 0;
int i = 0;
while (i <= 10) {
a = a + i;
i++;
}
24
Estruturas de Controlo (cont.)
do/while
do {
instruções
} while ( condição_de_iteração ) ;
int a = 0;
int i = 0;
do {
a = a + i;
i++;
} while (i < 10);
25
Estruturas de Controlo (cont.)
break/continue
A instrução
break força a
saída do ciclo.
A instrução
continue
avança para a
proxima iteração
do cliclo.
26
Estruturas de Controlo (cont.)
int i = 0;
While (true) {
i++;
if (i % 2 == 0 )
continue;
if (i > 10)
break;
System.out.print(i);
}
27
Exercício
Construa um programa que imprima
seis números inteiros, aleatórios entre 1
e 49.
Construa um programa que solicite ao
utilizador dois números inteiros, um
operador e apresente o resultado do
operador sobre os dois números
28
Referencias
29
Referencia e objectos
Objectos
Exemplo
(todas os simbolos que não são do tipo básico)
Point p1;
p1 = new Point();
Point P2;
P2 = p1;
Point p3 = new Point(1,2);
p2
p1
p3
0,0
Operadores
new
=
==
!=
Todas as variaveis de tipos primitivos contêm valores
Todas as variaveis do tipo “Object” contêm referência
1,2
30
Garbage Collector
Em C++:
// Cria um objecto
TObject *Objecto = new TObject;
…
// Liberta o espaço ocupado em memória
// ocupado por esse objecto
delete Objecto;
Em Java:
// Cria um objecto
Object Objecto = new Object();
…
Chamar o Garbage Collector:
System.gc();
31
Garbage Collector (Cont.)
public void Cria() {
Object Objecto1 = new Object();
Object Objecto2 = new Object();
Object Objecto3 = new Object();
}
Objecto1
Objecto2
Objecto3
Objecto1
Objecto2
Objecto3
public void Funcao() {
Cria();
System.gc();
}
A linguagem Java possui recolha
automática de Lixo
System.gc()
Forçar a recolha de Lixo
32
Métodos
public [static] <tipo_retorno> nome_método ( <lista_parametros> )
{
instruções;
}
public class HelloWorld {
public static void mostraMensagem(String s) {
System.out.println(s)
}
public static int soma(int n1, int n2) {
int n = n1+n2;
return n;
}
public static void main(String[] args) {
mostraMensagem ("Hello Word");
System.out.println(soma(2,3));
}
}
NOTA:
• Todos os parâmetros do
tipo básico são passados
por valor
•Todos os objectos são
passados com referencia
33
Strings
34
Strings
Classe String
Objectos imutaveis
s1
String s1 = “uma string”
String s2 = “Outra string”
String s3 =s2
Uma string
s2
Outra string
s3
35
Strings - concatenação
Operador de concatenação
+ e +=
String s1 = “uma string”
String s2 = “Outra string”
String s3 =s2
S2 += “ concatenada” + “!”
s2
s1
Uma string
s2
Outra string Concatenada!
Outra string
s3
36
Conversão entre numeros e
string
Para String
Classe StringValueOf(…)
Expressões que calculam Strings
String s = String.valueOf(10);
String s = 2 + “”
String s = 2 + 3 + “!”
De String
Classe Integer
int i = Integer.parseInt("2");
Classe Double
double i = Double.parseDouble(“1.7");
37
Métodos de String
lenght()
equals()
equalsToIgnoreCase
compareTo
compareToIgnoreCase
indexOf
hashCode()
substring()
startsWith()
endsWith()
toUpperCase()
toLowerCase()
replace()
concat
charAt()
trim
String.java
38
Exercício
Construa um programa que solicite o nome e
o apelido de uma pessoa e de seguida
escreva o nome completo de forma invertida.
Construa uma função que transforme uma
string para minúsculas utilizando o alfabeto
português.
Construa um programa que solicite ao
utilizador um número real, uma função
apresente o resultado da função sobre o
numero
39
Arrays
40
Arrays
São objectos
Declaração
Int [] v2 = { 1,2,3,4};
Método lenght()
v1 = new int[9];
0 0 0
0 0 0
0 0 0
Inicialização
int [] v1
Construção
v1
1 2 3
v2
Retorna a dimensão do array
Acesso indexado
V[0] = 10
41
Arrays
Arrays Unidimensionais
int[] lista = {1, 2, 3, 4};
lista[3] = lista[1]; // {1, 2, 3, 1}
int lista[] = new int[4];
lista[0] = 1;
lista[1] = 2;
int lista[4];
// erro
int lista[4] = {1, 2, 3, 4}; // erro
int lista[];
lista[0] = 1;
// erro
42
Arrays (cont.)
Arrays Bidimensionais (matrizes)
char galo[][]={{‘ ’,‘ ’,‘ ’},
{‘ ’,‘ ’,‘ ’},
{‘ ’,‘ ’,‘ ’}};
galo[1][1]=‘X’; // {{‘ ’,‘ ’,‘ ’},
// {‘ ’,‘X’,‘ ’},
// {‘ ’,‘ ’,‘ ’}}
galo[0][0]=‘O’; // {{‘O’,‘ ’,‘ ’},
{‘ ’,‘X’,‘ ’},
{‘ ’,‘ ’,‘ ’}}
Arrays de dimensão n
int array[][][]…[n]= new int[10][10][10]…[10];
array[1][3][2]…[6] = 1;
43
Arrays (cont.)
Calcular o tamanho de um
array;
int a[] = new int[4];
System.out.println(a.length); // mostra 4
int a[][] = new int[4][2];
System.out.println(a.length); // mostra 4
System.out.println(a[1].length); // mostra 2
44
Exercício
Construa um programa que calcule
imprima uma chave de totoloto.
45