Aula - Linguagem Java - Básico
-
Upload
ubirajara-nogueira -
Category
Documents
-
view
164 -
download
3
description
Transcript of Aula - Linguagem Java - Básico
Nelson Freire (ISEP–DEI-APROG 2011/12) 1/28
Linguagem JAVA Básico
APROG Algoritmia e Programação
Nelson Freire (ISEP–DEI-APROG 2011/12) 2/28
Estrutura de um Programa
Geral
Básica
Estruturas de Dados
Variáveis
Constantes
Tipos de Dados
Primitivos
Referências
Interfaces do Utilizador
Consola
Gráfica
Linguagem Java Sumário
Operadores
Tipos
Atribuição
Aritméticos
Relacionais
Lógicos
Outros
Precedências
Instruções
Entrada
Saída
Atribuição
Decisão
Repetição
Conversões entre Tipos Numéricos
Nelson Freire (ISEP–DEI-APROG 2011/12) 3/28
Programa Java
• Constituído por uma ou mais classes
Linguagem Java Estrutura Geral de um Programa
Método
• Código que executa uma tarefa
• Exemplos
• raízquadrada • factorial
Programa
Classe 1
Classe 2
Classe n
Método 1
Método 2
Método m
• Classe é constituída por um ou mais métodos
Nelson Freire (ISEP–DEI-APROG 2011/12) 4/28
É a classe que contém o método main (principal)
Método main
• 1º método a ser executado
• Controla a execução do programa
Linguagem Java Classe Principal de um Programa
Classe 1
Classe i Classe Principal
(Main Class)
Programa
Método 1
Método 2
Método m
Método 1
Método 2
Método main
Nelson Freire (ISEP–DEI-APROG 2011/12) 5/28
package nome;
import nomeCompletoClasse;
public class NomePrograma { // Classe principal
public static void main(String[] args){ // cabeçalho do método main ; é imutável
// corpo do método }
}
Java distingue as letras maiúsculas das minúsculas
Declaração package
• Especifica o nome da package a que pertencerá a nova classe
• Packages permitem organizar classes • Semelhante às pastas dos sistemas de ficheiros que facilitam a gestão de ficheiros • Concretamente, são pastas dos sistemas de ficheiros
Declaração import
• Permite à nova classe usar classes pertencentes a outras packages
• Nome completo de uma classe • nome da package seguido do nome da classe • Exemplo: import java.util.Scanner; // java.util é a package da classe Scanner
public é um modificador de acesso Especifica se a classe/método pode ou não ser usada por outras classes Classes/métodos públicos podem ser usados por outras classes
Linguagem Java Estrutura Básica de um Programa
// significa comentário ( ≠ código fonte. Não é executado )
Nelson Freire (ISEP–DEI-APROG 2011/12) 6/28
Classificadas como:
• Variáveis // valor pode variar durante a execução do programa
• Constantes // valor é constante durante a execução do programa
Linguagem Java Estruturas de Dados : classificação 1/3
Nelson Freire (ISEP–DEI-APROG 2011/12) 7/28
Declaração de Variáveis
• Sintaxe (para n variáveis do mesmo tipo)
Tipo_de_Dado variável_1[=valor inicial] [ , …, variável_N[=valor inicial] ] ;
• Exemplos
int x; // tipo int guarda inteiros; por omissão, variáveis numéricas inicializadas a 0
int z=5; // variável declarada e inicializada; = é o operador de atribuição
int x=5, y, z=1; // múltiplas variáveis, do mesmo tipo, declaradas na mesma linha
• Localização
• Em qualquer parte do corpo do método // mais perto da sua utilização
[...] = opcional
Linguagem Java Estruturas de Dados : variáveis 2/3
package nome;
import nomeCompletoClasse;
public class NomePrograma {
public static void main(String[] args){
int x;
...
int y = 10;
...
}
}
Nelson Freire (ISEP–DEI-APROG 2011/12) 8/28
Declaração de Constantes
• Sintaxe (para n constantes do mesmo tipo)
final Tipo_de_Dado constante_1=valor [ , …, constante_N=valor] ;
• Exemplos
final int X=8; // por convenção, nomes em maiúsculas
final int X=9, FACTOR=20; // múltiplas constantes, do mesmo tipo, declaradas na mesma linha
• Localização
• Em qualquer parte do corpo do método // mais perto da sua utilização
Linguagem Java Estruturas de Dados : constantes 3/3
package nome;
import nomeCompletoClasse;
public class NomePrograma {
public static void main(String[] args){
final int X=8;
...
final int FACTOR = 20;
...
}
}
[...] = opcional
Nelson Freire (ISEP–DEI-APROG 2011/12) 9/28
Um Tipo de Dados define:
• Conjunto de dados
• Conjunto de operações possíveis sobre esses dados
Tipos de Dados são classificados como:
• Primitivos // dados são valores simples
// Ex: valores inteiros e valores reais
• Referências (ou Não-Primitivos) // dados são referências de memória de objectos
// referência = endereço
// definidos por classes
// Ex: classe String - guarda texto
Linguagem Java Tipos de Dados : classificação 1/3
Nelson Freire (ISEP–DEI-APROG 2011/12) 10/28
Categorias
• Inteiros: byte 1 byte (-128, 127) short 2 bytes (-32 768, 32 767) int 4 bytes (-2 147 483 648, 2 147 483 647) long 8 bytes (-9x1018, 9x1018)
• Reais: float 4 bytes (-/+ 3.4 x 1038)
double 8 bytes (-/+ 1.7 x 10308 )
• Outros: char boolean
Exemplos
char c = 'R', opcao= 'a'; // caracteres são delimitados por pelicas
boolean flag = false; // valores lógicos: false e true
double nota = 18.5; // separador decimal é o . (ponto)
Variável de Tipo Primitivo
• Guarda um valor simples
• Ex: int x = 5;
Conteúdo de uma variável de tipo primitivo
RAM
...
5
...
x
Linguagem Java Tipos de Dados : primitivos 2/3
Nomes em minúsculas
Nelson Freire (ISEP–DEI-APROG 2011/12) 11/28
Definidos por Classes
• Exemplos
String // guardar texto; ver slides Java - Classes
Scanner // leitura do teclado da consola
Formatter // escrita formatada na consola
Variável de Tipo Referência
• Exemplos
String cidade;
String nome = "Nico";
String ave = "águia";
• Guarda uma referência de objecto da classe declarada
• Referência = endereço de memória
• Considerada objecto
• Exemplos:
• nome e ave
Conteúdo de uma variável de tipo referência
RAM
...
referência de objecto
...
ave
...
águia
Objecto da Classe String
Linguagem Java Tipos de Dados : referências 3/3
Nomes de classes iniciadas com letra maiúscula
Nelson Freire (ISEP–DEI-APROG 2011/12) 12/28
Tipos
Consola
• Interface Textual
Interface Gráfica
• Caixas de Diálogo
• Entrada
• Saída
Linguagem Java Interfaces do Utilizador
Nelson Freire (ISEP–DEI-APROG 2011/12) 13/28
Suportada por um objecto da classe Scanner // classe da package java.util
Mais pormenores no slide seguinte
package nome;
import java.util.Scanner; // importa classe Scanner para usar em main
public class NomePrograma { public static void main(String[] args){ int n; long y; double x; String nome, nome_composto; …
Scanner ler = new Scanner(System.in); // declara um objecto Scanner para ler do teclado …
n = ler.nextInt(); // lê um int do teclado e guarda em n y = ler.nextLong(); // lê um long do teclado e guarda em y x = ler.nextDouble(); // lê um double do teclado e guarda em x … nome = ler.next(); // lê uma string do teclado e guarda em nome nome_composto= ler.nextLine(); // lê uma linha e guarda em nome_composto …
}
}
Linguagem Java Entrada de Dados - Consola 1/2
Nelson Freire (ISEP–DEI-APROG 2011/12) 14/28
Classe Scanner
• Serve para ler ficheiros de texto
• Consola é tratada como um ficheiro de texto
Declaração de um objecto Scanner
• Scanner ler = new Scanner(System.in);
• Cria um objecto (instância) da classe Scanner (objecto ler)
• O objecto System.in representa o dispositivo de entrada standard (teclado)
• System é a classe que representa o sistema de computação
• in é o objecto da classe System que representa o dispositivo de entrada standard
• Por omissão é o teclado
Leitura
• É preciso invocar um método do objecto Scanner adequado ao tipo de dado a ler
• Sintaxe: nomeObjectoScanner.nomeMétodo()
• Exemplo: ler.nextInt()
• Exemplos de instruções para ler um dado e guardá-lo numa variável
• Leitura de inteiro do tipo int: int num = ler.nextInt();
• Leitura de float: float num = ler.nextFloat();
• Leitura de strings: String s = ler.next(); // ex: nome simples
String s = ler.nextLine(); // ex: nomes compostos
Linguagem Java Entrada de Dados - Consola 2/2
Nelson Freire (ISEP–DEI-APROG 2011/12) 15/28
Suportada pelo método showInputDialog da classe JOptionPane
package nome;
import javax.swing.JOptionPane; // importa classe JOptionPane
public class NomePrograma {
public static void main(String[] args){
… // lê uma string e guarda em nome String nome = JOptionPane.showInputDialog("Insira um nome:"); ...
// lê um int e guarda em i int i = Integer.parseInt(JOptionPane.showInputDialog("Insira um inteiro:"));
// lê um long e guarda em l long l = Long.parseLong(JOptionPane.showInputDialog("Insira um inteiro:")); ... // lê um double e guarda em d double d = Double.parseDouble(JOptionPane.showInputDialog("Insira um real:"));
// lê um float e guarda em f float f = Float.parseFloat(JOptionPane.showInputDialog("Insira um real:")); …
}
}
Linguagem Java Entrada de Dados – Interface Gráfica
Nelson Freire (ISEP–DEI-APROG 2011/12) 16/28
Suportada pelos métodos print, println e printf do objecto System.out
• System é a classe que representa o sistema de computação
• out é objecto da classe System que representa o dispositivo standard de saída
• Por omissão é o ecrã
• Métodos de escrita
• System.out.print("mensagem");
• System.out.println("mensagem");
• System.out.printf(string_formatação, lista_variáveis) ;
Também pode ser usada a classe Formatter
package nome;
public class NomePrograma { public static void main(String[] args){ …
System.out.print("Operação impossível!"); // Escreve mensagem e coloca cursor no fim … System.out.println("Divisão por zero!!"); // Escreve mensagem e coloca cursor no início da // linha seguinte
... System.out.printf("Média=%.1f",media); // Saída formatada; Escreve a media (double) // com uma casa decimal. Exemplo: Média=15.3 }
}
Linguagem Java Saída - Consola
printf - consultar o método String.format nos slides Java-Classes
Nelson Freire (ISEP–DEI-APROG 2011/12) 17/28
Suportada pelo método showMessageDialog da classe JOptionPane
• Sintaxe
JOptionPane.showMessageDialog(null, "mensagem");
package nome;
import javax.swing.JOptionPane; // importa classe JOptionPane
public class NomePrograma {
public static void main(String[] args){
double media; … JOptionPane.showMessageDialog(null, "Não foram encontrados números pretendidos");
… JOptionPane.showMessageDialog(null, "Média=" + média); // Saída não formatada
... String s = String.format("Média=%.1f",media);
JOptionPane.showMessageDialog(null, s); // Saída formatada
}
}
Linguagem Java Saída – Interface Gráfica
Nelson Freire (ISEP–DEI-APROG 2011/12) 18/28
Atribuição = // Ex: x = x + z;
Aritméticos + // Soma - // Subtracção * // Produto / // Divisão real ou inteira; Divisão inteira se ambos os operandos forem inteiros. % // Resto da divisão
Relacionais > // Maior >= // Maior ou igual < // Menor <= // Menor ou igual != // Diferente == // Igual
Lógicos && // AND || // OR ! // NOT ; Ex: !(x<0 && y>10)
Outros ++ // Incrementa valor de 1 unidade; Ex: contador++ -- // decrementa valor de 1 unidade; Ex: contador--
! ++ -- (cast) new
&&
||
?:
= += -= *= /= %= a -= b += c (a -= b) += c
Linguagem Java Operadores 1/2
Nelson Freire (ISEP–DEI-APROG 2011/12) 19/28
[ ] . () chamada_método
! ++ -- (cast) new
* / % a / b * c (a / b) * c
+ -
< <= > >= instanceof
== !=
&&
||
?:
= += -= *= /= %= a -= b += c (a -= b) += c
Maior
Menor
Associatividade no mesmo nível Exemplos Operadores Precedência
Precedências dos Operadores
Linguagem Java Operadores 2/2
Nelson Freire (ISEP–DEI-APROG 2011/12) 20/28
Sintaxe
variável = expressão; // expressão tem de ser do tipo da variável
Exemplos
package nome;
public class NomePrograma { public static void main(String[] args){ int x, y; double z; int d, idade; … x = 5; …
d = idade – 12; // idade e d têm de ser do mesmo tipo … z = x * 10 – Math.pow(2,5); // Math.pow(2,5) = 25
}
}
Linguagem Java Instrução de Atribuição
Nelson Freire (ISEP–DEI-APROG 2011/12) 21/28
Sintaxe
if (condição) { // = SE ... ENTÃO // acção
} // bloco = { ... } ; obrigatório para acção com mais de 1 instrução
if (condição) { // = SE ... ENTÃO ... SENÃO
// acção 1 } else {
// acção 2 }
// = CASO ... SEJA
switch(expressão) { // expressão tem de ser do tipo inteiro ou caracter
case valor_1[, case valor_2, ..., case valor_m] : // acção_1; break;
case valor_n[, case valor_o, ..., case valor_v] : // acção_2; break; ... default : // acção_por_omissão; // opcional; Última escolha; Pode não ser a última
}
Linguagem Java Instruções de Decisão 1/4
Nelson Freire (ISEP–DEI-APROG 2011/12) 22/28
Exemplos
package nome;
public class NomePrograma {
public static void main(String[] args){
int x, y, z; … if (x>5) y=4; // bloco {...} não é obrigatório … if(x>5 && x<10){ // bloco é obrigatório por haver mais de uma instrução y=10; z=100; }
… if (x>0) { System.out.println(x + "é um número positivo"); } else { System.out.println(x + "não é um número positivo"); }
} }
Linguagem Java Instruções de Decisão 2/4
Nelson Freire (ISEP–DEI-APROG 2011/12) 23/28
Exemplos
package nome;
public class NomePrograma {
public static void main(String[] args){
int x, y, z; … switch(x){ case 1, case 3: z = y * 2; break; case 6: z = 12; break; case 2, case 4, case 7: y = 45; z = 23; break; default: z=50; } … } }
break termina execução do switch; senão, são executadas as instruções do caso seguinte
Linguagem Java Instruções de Decisão 3/4
Nelson Freire (ISEP–DEI-APROG 2011/12) 24/28
Exemplos
package nome;
public class NomePrograma {
public static void main(String[] args){
char opcao; … switch(opcao){ case '1', case 'a': … break; case '2', case 'a': … break; case '0', case 's', case 'S' : … break; default: … } … } }
break termina execução do switch; senão, são executadas as instruções do caso seguinte
Linguagem Java Instruções de Decisão 4/4
Nelson Freire (ISEP–DEI-APROG 2011/12) 25/28
Sintaxe
while (condição) { // = ENQUANTO
// corpo do ciclo
}
do { // = REPETIR ... ENQUANTO
// corpo do ciclo
} while (condição); // termina com ;
for(inicialização contador; condição de funcionamento; passo){ // = PARA
// corpo do ciclo
}
Linguagem Java Instruções de Repetição 1/2
Nelson Freire (ISEP–DEI-APROG 2011/12) 26/28
Exemplos
package nome; public class NomePrograma { public static void main(String[] args){ int c, y; Scanner ler = new Scanner(System.in); c = 1; while(c<=25){ System.out.println(c); c++; } … do { y = ler.nextInt(); } while(y>0); … for(c=1; c<=25; c++){ // é um PARA(c1 ATÉ 25 PASSO 1) System.out.println(c); } … for(c=25; c>=1; c--) // for(…); não terminar com ponto-e-vírgula System.out.println(c);
}
}
Linguagem Java Instruções de Repetição 2/2
Nelson Freire (ISEP–DEI-APROG 2011/12) 27/28
Tipos de Conversão
Implícita
Explícita (cast)
Conversão Implícita
Declarada implicitamente
o Exemplo: short x = 1389;
long y = x;
Conversão para tipos maiores ou iguais o Excepto long float
Tipos
Sem perda de precisão
Possível perda de precisão
Conversão Explícita
Declarada explicitamente ... através de cast
Sintaxe dum cast
o (tipo_alvo) nome_variável
o Exemplo: double x = 13.89;
int y = (int) x; // Parte decimal é truncada (y=13)
byte short int long
char
float double
Linguagem Java Conversões entre Tipos Numéricos 1/2
Nelson Freire (ISEP–DEI-APROG 2011/12) 28/28
Valores
Linguagem Java Conversões entre Tipos Numéricos 2/2
Valor Sufixo Exemplo Tipo Considerado
INTEIRO
Sem 123456789 int
L 123456789L long
l 123456789l
REAL
Sem 12.34 double
F 12.34F float
f 12.34f