Módulo 03 Identificadores, Palavras Reservadas, e - BCC Unifal-MG

Transcrição

Módulo 03 Identificadores, Palavras Reservadas, e - BCC Unifal-MG
Módulo 03
Identificadores, Palavras Reservadas, e Tipos
Objetivos
• Utilizar comentários em um programa.
• Distinguir entre identificadores válidos e não-válidos.
• Reconhecer palavras-reservadas da tecnologia Java.
• Listar os oito tipos primitivos.
• Definir valores constantes para tipos texto e numéricos.
• Definir os termos variáveis primitivas e variável de referência.
Objetivos (Cont.)
• Declarar variáveis do tipo classe (referência).
• Construir um objeto utilizando o operador new.
• Descrever iniciação default de objetos.
• Descrever o significado de uma variável de referência.
• Mostrar as conseqüências de associação de variáveis de referência.
Estudar a padronização de nomenclatura na utilização de
JavaBeans.
Comentários
• Os três estilos permitidos de comentários em um programa Java
são:
// comentário de uma linha
/* comentário de uma ou
mais linhas */
/** comentário para documentação */
Ponto e Vírgula, Blocos e Espaços em
Branco
• Uma instrução é uma ou mais linhas de código terminado por um
ponto e vírgula (;):
total = a+b+c
+d+e+f;
• Um bloco é uma coleção de instruções englobadas por chaves:
{
x= y+1;
y= x+1;
}
Ponto e Vírgula, Blocos e Espaços em
Branco
• Devemos usar um bloco em uma definição de classe:
public class Data {
private int dia;
private int mes;
private int ano;
}
• Podem-se aninhar instruções de bloco.
• Qualquer quantidade de espaços em branco é permitida em um
programa Java.
Identificadores
• Nomes dados às variáveis, classe ou método.
• Pode iniciar com um caractere Unicode, sublinhado, ou sinal de
dólar ($)
Não pode conter o caractere #, mesmo não sendo o primeiro
caractere do identificador.
• São “case-sensitive” e não possuem tamanho máximo.
• Exemplos:
Identificador
_sis_var1
nomeUsuario
$mude
nome_usuario
Palavras Reservadas em Java
abstract
char
double
for
int
private
strictfp
throws
assert
boolean
class
else
goto
interface
protected
super
transient
enum
break
const
extends
if
long
public
switch
try
byte
continue
final
implements
native
return
synchronized
void
case
default
finally
import
new
short
this
volatile
catch
do
float
instanceof
package
static
throw
while
Tipos Primitivos
• A linguagem de programação Java define oito tipos primitivos:
•
•
•
•
Lógico – boolean
Texto – char
Inteiros – byte, short, int, e long
Ponto Flutuante – double e float
Lógico – boolean
• O tipo de dados boolean possui duas constantes, true ou
false.
• Por exemplo, a instrução:
boolean verdade = true;
Declara a variável verdade como boolean e associa a ela o
valor true.
Texto – char e String
char
• Representa um caractere Unicode de 16 bits.
• Possui seus literais envoltos por aspas (’ ’).
• Utiliza as seguintes notações:
'a' a letra a
'\t' Uma tabulação
'\u????' Um caractere Unicode específico, ????, é substituído por exatamente 4
dígitos hexadecimais (por exemplo, ’\u03A6’ é a letra grega pi [ Φ] )
Texto – char e String
String
• Não é um tipo de dados primitivo; é uma classe.
• Possui seus literais englobados por aspas duplas (" ").
"Iremos aprender programação em Java."
• Pode ser utilizada da seguinte forma:
String saudacao = " Bom Dia !! \n";
String mensagemErro = "registro não encontrado!";
Inteiros – byte, short, int, e long
• Utilizam três formas – decimal, octal, ou hexadecimal
2
Forma decimal do inteiro 2.
077
O zero no início indica um valor octal.
0xBAAC 0x indica um valor hexadecimal.
• Constantes tem como valor padrão int.
• Constantes com o sufixo L ou l são do tipo long.
Inteiros – byte, short, int, e long
• Tipos de dados inteiros possuem a seguinte faixa de valores:
Ponto Flutuante – float e double
• Literais de ponto flutuante incluem um ponto decimal ou um dos
seguintes:
•
•
•
E ou e (Adiciona valor exponencial)
F ou f (float)
D ou d (double)
3.14
6.02E-23
2.718F
123.4E+306D
Um simples valor de ponto flutuante (um double)
Um número ponto-flutuante bem menor.
Um número simples de tipo float
Um número double com valor redundante D
• double é tipo padrão de pontos flutuantes
Ponto Flutuante – float e double
• Tipos de dados ponto flutuante possuem os seguintes números de
bits:
Variáveis, Declarações, e Atribuições
1 public class Atribuicao {
2 public static void main (String args[]) {
3 // declarando variáveis inteiras
4 int x,y;
5 // declarando e atribuindo um ponto flutuante
6 float z = 3.414f;
7 // declarando e atribuindo um double
8 double w = 3.1415;
9 // declarando e atribuindo um tipo lógico
10 boolean verdade = true;
11 // declarando um caracter
12 char c;
13 // declarando uma variável do tipo String
14 String str;
Variáveis, Declarações, e Atribuições(Cont.)
15 // declarando e atribuindo uma variável String
16 String str1 = "tchau";
17 // Atribuindo um valor a uma variável char
18 c = 'A';
19 // Atribuindo um valor a uma variável String
20 str = "Olá Pessoal !!!”;
21 // Atribuindo valores à variáveis int
22 x = 6;
23 y = 1000;
24 }
25}
Tipos de Referência em Java
• Além de tipos primitivos, todos os outros são tipos de referência.
• Uma variável de referência contém a forma de se manusear um
objeto.
• Exemplo:
1 public class Data {
2 private int dia = 1;
3 private int mes = 1;
4 private int ano = 2000;
5 public Data(int dia,int mes,int ano) { ... }
6 public void print() { ... }
7}
1 public class TestaData {
2 public static void main(String[] args) {
3 Data hoje = new Data(22,7,1964);
4 }
5}
Construindo e Iniciando Objetos
• Utilizar new Xxx()para criar um novo objeto resulta em:
•
•
•
Alocação de memória:
Espaço para o novo objeto é alocado e variáveis de instância são
iniciadas com seus valores padrão (por exemplo, 0, false,
null, etc...)
Iniciação explícita de atributos é executada
Um construtor é executado
• A referência do objeto é atribuída a uma variável.
• Exemplo:
Data aniversario = new Data(22,07,1964);
Alocação e Layout de Memória
• Uma declaração aloca espaço de armazenamento apenas para uma
referência:
Data aniversario = new Data(22,7,1964);
• Use o operador new para alocar o espaço de Data:
Data aniversario = new Data(22,7,1964);
Iniciação Explícita de Atributos
• Inicia os atributos por padrão:
Data aniversario = new Data(22,7,1964);
• os valores padrão são da declaração de atributos na classe.
Executando o Construtor
• Execução do construtor correspondente:
Data aniversario = new Data(22,7,1964);
• No caso de sobrecarga de construtor (Overload), o primeiro pode
chamar o outro.
Atribuindo a Referência a uma Variável
• Atribua o recém criado objeto à variável de referência:
Data nascimento = new Data(22,7,1964);
Atribuindo Referências
...
int x = 7;
int y = x;
Data s = new Data(22,7,1964);
Data t = s;
• Duas variáveis referindo a um único objeto:
Atribuindo Referências (Cont.)
• Re-atribuição faz com que duas variáveis apontem para dois
objetos distintos:
t = new Data(22,12,1964);
Passagem por Valor
• Em uma Máquina Virtual, a linguagem de programação Java passa
argumentos apenas por valor.
• Quando um objeto é passado como um argumento para um
método, o valor do argumento é a referência do objeto.
• O conteúdo pode ser mudado no método invocado, mas a
referência original do objeto nunca é mudada.
Passagem por Valor
1 public class TestePassagemParametros {
2
3 // Métodos para mudar os valores iniciais
4 public static void mudaInt(int valor) {
5 valor = 55;
6 }
7 public static void mudaRefObjeto(Data ref) {
8 ref = new Data(1,1,2000);
9 }
10 public static void mudaAtributoObjeto(Data ref) {
11 ref.setDia(4);
12 }
13
14 public static void main(String args[]) {
15 Data data;
16 int val;
17
18 // atribui a variável int
19 val = 11;
20 // Tenta alterá-la
Passagem por Valor(Cont.)
21 mudaInt(val);
22 // Qual é o valor agora?
23 System.out.println("O valor inteiro é : " + val);
24
25 // Atribui a data
26 data = new Data(22,7,1964);
27 // Tenta mudá-la
28 mudaRefObjeto(data);
29 // Qual o valor agora?
30 data.print();
31
32 // Mudando agora o atributo dia
33 // através da referência do objeto
34 mudaAtributoObjeto(data);
35 // Qual o valor agora?
36 data.print();
37 }
38 }
39
A Referência this
Eis alguns usos da palavra reservada this:
• Resolução de ambigüidade: para referenciar um membro dentro do
código que possui variáveis locais ou argumentos com o mesmo
nome daquele membro.
• Passar o objeto atual como parâmetro para outro método ou
construtor.
A Referência this
1 public class Data {
2 public int dia = 1;
3 public int mes = 1;
4 public int ano = 2000;
5
6 public Data(int dia, int mes, int ano) {
7 this.dia = dia;
8 this.mes = mes;
9 this.ano = ano;
10 }
11 public Data(Data data) {
12 this.dia = data.dia;
13 this.mes = data.mes;
14 this.ano = data.ano;
15 }
16
17 public Data adicionarDias(int mais_dias) {
18 Data nova_data = new Data(this);
19
20 nova_data.dia = nova_data.dia + mais_dias;
21 // Não implementado: código para verificação do limite de dias em um
22 // mês...
23 return nova_data;
24 }
A Referência this(Cont)
25 public void print() {
26 System.out.println("Data: " + dia + "/" + mes +"/" + ano);
27 }
28 }
1 public class TestaData {
2 public static void main(String[] args) {
3 Data aniversario = new Data(22,7,1964);
4 Data semanaSeguinte = aniversario.addDias(7);
5
6 semanaSeguinte.print();
7 }
8}
Convenções de Nomenclatura em JavaBeans
No início, a especificação JavaBeans foi criada para auxiliar
desenvolvedores Java a criar componentes que poderiam ser
facilmente integrados em um IDE .
Hoje em dia, JavaBeans são utilizados com diversos propósitos
além de sua integração com IDEs
Beans de Formulário, Beans de entidade, etc...
JavaBeans são classes Java que possuem propriedades.
Pense em propriedades como variáveis de instância privadas.
Métodos segunda a especificação JavaBeans devem ser
nomeados dependendo do propósito do método com os prefixos
set, get, is, add ou remove
Convenções de Nomenclatura em JavaBeans
Um JavaBean deve ter um construtor default.
A especificação JavaBeans suporta o conceito de eventos:
Eventos permitem que componentes notifiquem outros
componentes quando algo acontece
Exemplo, um clique do mouse em um botão pode disparar um
evento para diversos outros componentes.
Os objetos que recebem a informação de ocorrência de um
evento são chamados de listeners.
Estudaremos eventos e listeners com detalhes no curso de
Padões de Projetos e Programação para Desktop.
Convenções de Nomenclatura em JavaBeans
Para a prova SCJP você precisa saber que os métodos que são
usados para adicionar ou remover listeners para um evento
devem também seguir padrões de nomenclatura JavaBeans.
Métodos de registro de listener devem usar o prefixo add,
seguido pelo tipo do listener
Exemplo: addActionListener()
Convenções de Nomenclatura em JavaBeans
Métodos para remoção de listener devem usar o prefixo
remove, seguido pelo tipo do listener
Exemplo: removeActionListener()
O tipo do Listener a ser adicionado ou removido deve ser
passado como argumento para o método
Exemplos de assinaturas de métodos
inválidas em um JavaBean
void setNomeCliente(String s)
// deve ser public
public void modifiqueMeuValor(int v)
// não podemos usar a palavra modifique
public void addXListener(MeuListener m)
// tipos de Listeners diferentes
Exemplos de assinaturas de métodos válidas
em um JavaBean
public void setMeuValor(int v)
public int getMeuValor()
public boolean isMeuStatus()
public void addMeuListener(MeuListener m)
public void removeMeuListener(MeuListener m)
Convenções de Codificação em Java
• Pacotes:
package banco.dominio;
• Classes:
class ContaPoupanca
• Interfaces:
interface Conta
• Métodos:
getSaldoEmConta()
Convenções de Codificação em Java (Cont.)
• Variáveis:
clienteAtual
• Constantes:
LIMITE_INFERIOR
TAMANHO_MAXIMO
Perguntas?