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 nasce
s morre
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) | (OR) ~ (NOT) ^ (XOR)
• Lógicos: || &&
• Operador shift (deslocamento) x << y , x >> y
• Auto-incremento: i++ (pos) --i (pré)
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
– Declaração: int a[10];
– Acesso: a[5] = 47;
– Inicialização : a[] = { 13, 25, 83, 90 } b[] = { “casa”, “muito”, “bonita” }
Início em zero
O que é um objeto ?
• Empacotando funções e dados em class• A class torna-se capaz de descrever
características ee 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
• Campos
• Métodos– Diferente de C/C++
– Definição interna
class ContaCor {
float saldoAtual;
void creditaValor (float val) {
saldoAtual = saldoAtual + val;
}
}
Instanciando, Criando e Acessando
class ContaCor {
float saldoAtual;
void creditaValor (float val) {
saldoAtual = saldoAtual + val;
}
}
:
ContaCor conta = new ContaCor();
conta.saldoAtual = 0.0f;
conta.creditaValor (10.0f);
Instancia objeto
Acessa campo
Acessa método
Um Programa Simples
// INF-300 Laboratório de Java
// HelloWorld.java
import java.util.*;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, it's: ");
System.out.println(new Date());
}
}
Importando utilitários
Imprimindo
Compilando e Executando
pedro> javac HelloWorld.java
pedro> java HelloWorld
HelloWorld.class
EXECUTA !!
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;
}
:
ContaCor conta = new ContaCor();
conta.saldoAtual = 0;
:
Não funciona !!
Controle de Acesso (cont.)
class ContaCor {
public float saldoAtual;
}
:
ContaCor conta = new ContaCor();
conta.saldoAtual = 0;
Agora sim !!
Controle de Acesso (cont.)
public class ContaCor {
int saldoAtual;
String titular;
}
Tudo público
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) {
saldoAtual = saldoAtual + val;
}
}
Variável estática
Armazenamento Estático (cont.)
ContaCor conta1 = new ContaCor();
ContaCor conta2 = new ContaCor();
:
conta1.creditaValor (10.0f);
conta2.creditaValor (5.0f);
:
conta2 conta1
10.0
Armazenamento Estático (cont.)
ContaCor conta1 = new ContaCor();
ContaCor conta2 = new ContaCor();
:
conta1.creditaValor (10.0f);
conta2.creditaValor (5.0f);
:
conta2 conta1
10.0
Armazenamento Estático (cont.)
ContaCor conta1 = new ContaCor();
ContaCor conta2 = new ContaCor();
:
conta1.creditaValor (10.0f);
conta2.creditaValor (5.0f);
:
conta2 conta1
15.0
Método Estático
class ContaCor {
static private float saldoAtual;
static void getSaldo () {
return saldoAtual;
}
}
:
ContaCor.getSaldo();
:
Chamada da classe
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;
}
:
ContaCor conta = new ContaCor();
conta.saldoAtual = 0.0;
:
Incializa saldo
Construtor (cont.)
class ContaCor {
float saldoAtual;
ContaCor (int val) {
saldoAtual = val;
}
}
:
ContaCor conta = new ContaCor(10.0f);
Cria objeto e Inicializa saldo
Exercício 4
Do diretório acesso
1. Adicione um construtor a CriaConta.java que inicializa a conta com R$ 35. Compile e execute.