Laboratório de Java
Programação Básica em Java
(Lab I)
Prof. Guido Araújo
Tipos de Dados
• Tipos primitivos
–
–
–
–
–
–
Lógico: boolean
Caracter: char (16)
Byte: byte (8)
Inteiros: short (16) < int (32) < long (64)
Floating-point: float (32) < double (64)
Void: void
Declarações e Definições
• Declaração de variáveis
– Tipo da variável e o seu nome
int a;
String s = “abcd”;
– Pode-se criar uma referência para um objeto
String s = new String(“abcd”);
– Ou mesmo um invólucro
Character c = new Character(letra);
Declarações e Definições (cont.)
• Campos
float saldoAtual;
String titular;
• Métodos
float getSaldo () {
código
}
Escopo
• Escopos encaixados são permitidos
{
int x = 12;
// somente x está disponível
{
int q = 96;
// ambos x & q disponíveis
}
// somente x disponível
// q fora de escopo
}
Escopo (cont.)
• Mas não é uma festa, como em C/C++ !
{
int x = 12;
{
int x = 96;
}
}
NÃO PODE !!
Escopo (cont.)
• Vida das variáveis
– São criadas
– Continuam vivas enquanto estiverem dentro do escopo
– Depois o coletor-de-lixo se livra delas. Aleluia !!!
{
String s = new String(“oba”);
} // fim do escopo
s morre
s nasce
Coletor de Lixo
• De tempos em tempos varre o espaço livre
jogando fora o que está fora de escopo
Operadores
• Operadores
– Os mesmos comuns em outras linguagens: + – Precedência é matemática
– Parênteses para forçar precedência e legibilidade
*
/
=
Mais Operadores (cont.)
• Atribuição: =
• Relacionais:
>
< >=
<=
• Bitwise (bit-a-bit): & (AND)
• Lógicos:
||
==
!=
| (OR)
~ (NOT)
^ (XOR)
&&
• Operador shift (deslocamento)
x << y
• Auto-incremento: i++ (pos) --i (pré)
,
x >> y
Mais Operadores (cont.)
• Erro comum
– Confundir
= com ==
Mais Operadores (cont.)
• Concatenação de cadeias
int x = 0, y = 1, z = 2;
String s = "x, y, z ";
System.out.println (s + x + y + z);
Controle da Execução
• if-else
– Tipo boolean somente possue valores true ou false
– expression é avaliado como boolean
– expression pode ser qualquer expressão
Controle da Execução (cont.)
;
• while
– expression é avaliada como tipo boolean
– statement executa enquanto expression for true
– Pode fazer operações dentro de expression
Controle da Execução (cont.)
• do-while
– expression é avaliada como tipo boolean
– statement executa sempre uma primeira vez
– Enquanto expression for true execução continua
Controle da Execução (cont.)
• for-loop
– initialization: inicializar o controle do laço
– conditional: se true laço statement continua a executar
– step: incrementa o controle do laço mais uma interação
Controle da Execução (cont.)
• switch
–
–
–
–
selector é avaliado como tipo int
statement selecionada executa de acordo com selector
break (opcional) faz saltar para o final da sentença
Se não for nenhum dos casos executa sentença em
default
Tipos Agregados de Dados (cont.)
• Arrays
Início em zero
– Declaração: int a[10];
– Acesso:
a[5] = 47;
– Inicialização :
a[] = { 13, 25, 83, 90 }
b[] = { “casa”, “muito”, “bonita” }
O que é um objeto ?
• Empacotando funções e dados em class
• A class torna-se capaz de descrever
características e comportamento
• Tipos de dados abstratos
– A class permite definir um novo tipo de dado
– Ela permite o programador abstrair o problema
– O compilador trata o novo tipo da mesma maneira que
os tipos built-in
– É como se a linguagem estivesse se adequando ao
problema…..
Classes
class ContaCor {
• Campos
float saldoAtual;
void creditaValor (float val) {
• Métodos
saldoAtual = saldoAtual + val;
– Diferente de C/C++
– Definição interna
}
}
Instanciando, Criando e Acessando
class ContaCor {
float saldoAtual;
void creditaValor (float val) {
saldoAtual = saldoAtual + val;
}
}
:
Instancia objeto
ContaCor conta = new ContaCor();
Acessa campo
conta.saldoAtual = 0.0f;
Acessa método
conta.creditaValor (10.0f);
Um Programa Simples
// INF-300 Laboratório de Java
Importando utilitários
// HelloWorld.java
import java.util.*;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, it's: ");
Imprimindo
System.out.println(new Date());
}
}
Compilando e Executando
pedro> javac HelloWorld.java
pedro> java HelloWorld
EXECUTA !!
HelloWorld.class
Exercício 1
Do diretório acesso
•
Implemente o programa HelloWorld.java
•
Implemente um programa CriaConta.java que
instancia uma conta, credita R$ 10 e imprime o
saldo. Compile e execute.
Controle de Acesso
• Três modos de acessar membros de uma classe
– public todas as declarações a seguir estão
disponíveis para todos
– private só o criador do tipo pode acessar estes
membros
– protected mais tarde !!
Controle de Acesso (cont.)
class ContaCor {
private float saldoAtual;
}
Não funciona !!
:
ContaCor conta = new ContaCor();
conta.saldoAtual = 0;
:
Controle de Acesso (cont.)
class ContaCor {
public float saldoAtual;
}
Agora sim !!
:
ContaCor conta = new ContaCor();
conta.saldoAtual = 0;
Controle de Acesso (cont.)
public class ContaCor {
int saldoAtual;
Tudo público
String titular;
}
Métodos de Acesso (cont.)
class ContaCor {
private float saldoAtual;
void creditaValor (float val) {
saldoAtual = saldoAtual + val;
Acessa saldo
}
}
Exercício 2
Do diretório acesso
•
Leia o programa TestaAcesso.java
•
Faça saldoAtual ser privado. O que ocorreu ?
•
Faça saldoAtual ser public. O que ocorreu ?
•
(Extra) Estude o programa MetodoAcesso.java. Que
vantagem ele oferece em relação à TestaAcesso.java ?
Armazenamento Estático
• static mantém o valor da variável durante execução
– Variável é inicializada somente na primeira chamada
da função
– O valor que for armazenado permanece entre chamadas
– Variável não é disponível fora do escopo
Armazenamento Estático
class ContaCor {
static private float saldoAtual;
void creditaValor (float val) {
Variável estática
saldoAtual = saldoAtual + val;
}
}
Armazenamento Estático (cont.)
ContaCor conta1 = new ContaCor();
ContaCor conta2 = new ContaCor();
:
conta2
conta1
conta1.creditaValor (10.0f);
10.0
conta2.creditaValor (5.0f);
:
Armazenamento Estático (cont.)
ContaCor conta1 = new ContaCor();
ContaCor conta2 = new ContaCor();
:
conta2
conta1
conta1.creditaValor (10.0f);
10.0
conta2.creditaValor (5.0f);
:
Armazenamento Estático (cont.)
ContaCor conta1 = new ContaCor();
ContaCor conta2 = new ContaCor();
:
conta2
conta1
conta1.creditaValor (10.0f);
15.0
conta2.creditaValor (5.0f);
:
Método Estático
class ContaCor {
static private float saldoAtual;
static void getSaldo () {
return saldoAtual;
}
Chamada da classe
}
:
ContaCor.getSaldo();
:
Exercício 3
Do diretório acesso
1. Leia o programa StaticVar.java. Compile e
execute. O que ocorreu ?
2. Altere saldoAtual para saldo estático e execute.
O que ocorreu ?
3. (Extra) Estude o programa StaticMetodo.java. O
que significa o método ser estático ?
Construtor
class ContaCor {
float saldoAtual;
}
Incializa saldo
:
ContaCor conta = new ContaCor();
conta.saldoAtual = 0.0;
:
Construtor (cont.)
class ContaCor {
float saldoAtual;
ContaCor (int val) {
Cria objeto e
Inicializa saldo
saldoAtual = val;
}
}
:
ContaCor conta = new ContaCor(10.0f);
Exercício 4
Do diretório acesso
1. Adicione um construtor a CriaConta.java que
inicializa a conta com R$ 35. Compile e execute.
Download

lab1