Buscar

POO 7 tipagem

Prévia do material em texto

TIPOS DE DADOS E 
IDENTIFICADORES
Thaís Alves Burity Rocha
Agenda
 Tipos de dados
 Tipos primitivos
 Tipos referenciados
 Conversão de tipos
 Atribuição e Inicialização
 Identificadores
Introdução
 Variáveis de instância (atributo)
 Variáveis de classe (static)
 Variáveis locais
 Parâmetros
 Variáveis de referência
Introdução
 Uma variável é um container, ela armazena algo
 Espaço em memória
 Em Java, variáveis devem ter tipo, tamanho e 
nome
 Tipo: Identifica a natureza da informação armazenada
 Tamanho: 
 Capacidade de armazenamento da variável
 Para algumas variáveis, é definido pelo tipo
 Nome: Identificador da variável, usado para acessá-la
Introdução
 Ou seja, Java é uma linguagem com tipagem
estática
 E muitas outras, como C e C++
 Outras linguagens, como Groovy e Python, 
suportam tipagem dinâmica também
 O tipo da variável é inferido pelo valor atribuído, 
podendo ser alterado também
def v= 3 //pode armazenar qualquer valor
v= "casa" 
v= false 
v= 10.5
Tipos em Java
 Primitivos
 int
 long
 double
 ...
 Referência
 classes (String, Object, 
Livro, Conta, etc.)
 interfaces
 arrays
Os elementos de um tipo primitivo são valores, 
enquanto os elementos de um tipo referência 
são referências para objetos!
Tipos Primitivos
 byte
 Inteiro de 8 bits, com sinal
 O bit mais à esquerda é usado para representar o 
sinal (1 significa negativo, 0 significa positivo)
 Os demais bits representam o valor
 7 bits podem representar 27=128 valores
 Valores positivos : 0 a 127
 Valores negativos: -1 a -128
 Logo, os valores representados por uma variável do 
tipo byte estão no intervalo [-128, 127]
Tipos Primitivos
Tipo Valor
Tamanho
(bits)
Valor 
mínimo
Valor 
máximo
Valor 
default
boolean true ou false depende da JVM n/a n/a false
char
inteiro positivo que 
representa um 
caractere Unicode
16 0 216-1 \u0000
byte inteiro 8 -27 27-1 0
short inteiro 16 -215 215-1 0
int inteiro 32 -231 231-1 0
long inteiro 64 -263 263-1 0
float ponto flutuante 32 n/a n/a 0.0
double ponto flutuante 64 n/a n/a 0.0
Não se aplica à variáveis locais
Tipos Primitivos: Declaração, 
Inicialização e Atribuição
 int x;
 int m=10, n=11;
 x = 234;
 byte b = 89;
 boolean isFun = true;
 double d = 3456.98;
 char c = ‘f’;
 int z = x;
 boolean isPunkRock = false;
 isFun = isPunkRock;
 int w = 999999;
 long big = 3_456_789;
Tentar armazenar
128 causa erro
Se for atribuído 100 e 
a variável for impressa, 
será exibido d
Tipos Primitivos: Atribuição
 É possível atribuir um tipo menor à um tipo maior
 O contrário causa erro
 Mesmo que o valor em si caiba na variável
 O valor não é verificado, apenas o tipo das variáveis
em questão
 É necessário fazer uma conversão
int x = 24;
byte b = x;
byte b = 24;
int x = b;
Tipos Primitivos: Conversão
 Casting: Conversão explícita
 (<tipo>) <expressão>
 Tipos compatíveis
int c = (int) b;
short e = (short) a;
int a = 1234;
long b = a;
short d = 10;
Conversão implícita
Conversão explícita
(pode acarretar
perda de dados!)
Tipos Primitivos: Atribuição
 Tipos primitivos podem armazenar:
 Literais
 Literais decimais são considerados int
 Literais de ponto flutuante são considerados double
 O valor de outra variável
 Conversão implícita
 Conversão explícita
 O resultado de uma expressão
 Será visto posteriormente
Cuidado!
byte b = 89;
float f1 = 32.5;
float f2 = 32.5f;
Tipos Referenciados
 Se não é tipo primitivo, é tipo referenciado
 Ex: String, Bicicleta, Conta, Empregado, ...
 São definidos por classes
 Ao invés de representar valores, representam 
referências para objetos
 O objeto em si está na memória Heap
 A variável de referência contém bits que representam
uma maneira de chegar ao objeto
 Valor default: null
 Não se aplica à variáveis locais, somente à atributos
Tipos Referenciados: Exemplo
 Pense na variável de referência c como sendo um 
“controle remoto” de um objeto Cachorro
 Ela será usada para acessar o objeto e fazer algo, 
como chamar o método latir()
Cachorro c = new Cachorro();
c.latir();
Primitivos x Referenciados
 Variáveis de tipo primitivo guardam o conteúdo 
(bits que representam o valor)
int x = 3;
 Variáveis de tipo referenciado guardam endereços
String nome = null;
String nome = “Laboratório”;
x 011
nome null
nome “Laboratório”
Tipos Referenciados: Exemplos
Cachorro c1 = new Cachorro();
Cachorro c2 = c1;
Gato g1 = c2;
Voltaremos a falar em atribuição de tipos
referenciados com interface, herança e polimorfismo
Tipo String em Java
 Não é tipo primitivo
 Uma variável String é uma referência para um objeto
 Há 2 formas de criar um objeto String
 Atribuindo um literal simplesmente
 Chamando o construtor
String nome = new String(“Maria”);
String nome = “Maria”;
O objeto é criado 
no Pool de Strings
O argumento é criado no Pool de Strings, 
mas também é criado um objeto no Heap
Tipo String em Java
 Strings são imutáveis
Pool de Strings
s1
String s1 = “abc”;
String s2 = s1;
s1 = s1.concat(“def”);
Pool de Strings
Pool de Strings
“abc”
“abc”
“abc”
“abcdef”
s1
s1
s2
s2
Tipo String em Java
 Qual a vantagem em ser imutável?
 Economia de memória!
 Quando criados como literais, Strings residem no Pool 
de Strings
 Sempre que uma nova String vai ser criada, a JVM 
verifica se ela já existe no Pool de Strings
 Caso exista, apenas é criada uma nova referência (aliasing)
 Em regra geral, Strings criadas como literais são
sempre referenciadas e por isso não estão passíveis
de ser removidas pelo coletor de lixo
Tipo String em Java
 API de Java oferece vários métodos para 
manipulação de Strings
 int length()
 String toUpperCase()
 String toLowerCase()
 char charAt(int index)
 char[] toCharArray()
 String replace(char old, char new)
 String substring(int begin)
Tipo String em Java
 Tipos “similares”: StringBuffer e StringBuilder
 São mutáveis
 Oferecem mais opções de métodos para manipulação
de texto
Identificadores
 Identificadores não podem conter caractere 
especial, exceto $ e _
 Ex: ?ano, dia!mês
 Ex: _ano, dia$mes
 Identificadores não podem começar com números
 Ex: 1x, 1_t
 Ex: x1, t_1
 Identificadores não podem conter operadores 
matemáticos
 Ex: dia+mes
Pode começar com $ e _, 
inclusive
Identificadores
 Palavras reservadas da linguagem não podem ser 
usadas como identificador
new byte char double float
for abstract final native static
else while do switch case
class extends if import return
catch finally try throw throws
int long short public private
stricfp synchronized transient volatile void
default protected break continue assert
interface boolean package super this
instanceof implements const goto enum
Identificadores
 Identificadores são case-sensitive
int contador;
int CONTADOR;
int cOnTaDoR;
Identificadores
diferentes
Identificadores
 Convenção: Semelhante à métodos
 Inicial minúscula
 Junção de palavras captalizadas
 Nomes curtos
 Nomes significativos

Continue navegando