Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos,...
Transcript of Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos,...
![Page 1: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/1.jpg)
Tipos, Literais,Operadores
![Page 2: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/2.jpg)
Tipos, Literais, Operadores 2
Identificadores
São palavras utilizadas para nomear variáveis, métodos e classes
Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($)
Não podem começar por números
São “case sensitive”
Do segundo caractere em diante, pode conter qualquer seqüência de letras, dígitos, sublinhados ou cifrões
![Page 3: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/3.jpg)
Tipos, Literais, Operadores 3
IdentificadoresExemplos de identificadores válidos:
nomeAlunosaldolâmpada // não recomendávelUser_name // fora do padrão_sys_var1Class // não recomendável
Java utiliza o padrão Unicode (16 bits)
![Page 4: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/4.jpg)
Tipos, Literais, Operadores 4
Palavras reservadas em Java
abstract boolean break byte case
catch char class continue default do double else extends final finally float for if implements import instanceof int interface long native new return package private protected public synchronized short static super switch this try
throw throws transient void volatile while enum
true, false e null não são palavras reservadas e sim literais
OBS: Todas as palavras reservadas são escritas com letras minúsculas
![Page 5: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/5.jpg)
Tipos, Literais, Operadores 5
Palavras reservadasModificadores de Acesso
private, protected, public
Modificadores de classe, método e variávelabstract, class, extends, final, implements, interface, native, new, static, synchronized, transient, volatile
Controle de fluxobreak, case, continue, default, do, else, for, if, instanceof, return, switch, while
![Page 6: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/6.jpg)
Tipos, Literais, Operadores 6
Palavras reservadasTratamento de Erros
catch, finally, throw, throws, try, assert
Controle de Pacotesimport, package
Tipos de Dadosboolean, byte, char, double, float, int, long, short, void (somente retorno)
![Page 7: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/7.jpg)
Tipos, Literais, Operadores 7
Palavras reservadas
Exemplo de códigos que não compilam:
class Teste {public void go() { }public int break(int b) { }
}
class LiteralTest {public static void main(String [] args) {
int true = 100; //isto causa erro}
}
![Page 8: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/8.jpg)
Tipos, Literais, Operadores 8
Tipos de dados primitivos
Java, assim como Pascal, C e C++, é uma linguagem fortemente tipada -- todas as variáveis devem ter um tipo
Diferentemente de C e C++, os tipos primitivos em Java são portáteis entre todas as plataformas
![Page 9: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/9.jpg)
Tipos, Literais, Operadores 9
Tipos primitivos em JavaArmazenados na pilha (acesso rápido)Não são objetos. Classe 'wrapper' faz transformação, se necessário (encapsula valor em um objeto)
![Page 10: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/10.jpg)
Tipos, Literais, Operadores 10
Exemplos
![Page 11: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/11.jpg)
Tipos, Literais, Operadores 11
Caracteres especiais
![Page 12: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/12.jpg)
Tipos, Literais, Operadores 12
Operadores
![Page 13: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/13.jpg)
Tipos, Literais, Operadores 13
Precedência
![Page 14: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/14.jpg)
Tipos, Literais, Operadores 14
Tabela de Precedência
![Page 15: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/15.jpg)
Tipos, Literais, Operadores 15
Atribuição
![Page 16: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/16.jpg)
Tipos, Literais, Operadores 16
Operadores Matemáticos
![Page 17: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/17.jpg)
Tipos, Literais, Operadores 17
Incremento e Decremento
![Page 18: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/18.jpg)
Tipos, Literais, Operadores 18
Operadores Relacionais
![Page 19: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/19.jpg)
Tipos, Literais, Operadores 19
Operadores Lógicos
![Page 20: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/20.jpg)
Tipos, Literais, Operadores 20
Operadores orientados a bit
![Page 21: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/21.jpg)
Tipos, Literais, Operadores 21
Operadores de Deslocamento
![Page 22: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/22.jpg)
Tipos, Literais, Operadores 22
Operador Ternário (if-else)
![Page 23: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/23.jpg)
Tipos, Literais, Operadores 23
Operador de Concatenação
![Page 24: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/24.jpg)
Tipos, Literais, Operadores 24
instanceof
![Page 25: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/25.jpg)
Tipos, Literais, Operadores 25
Tipos de dados
![Page 26: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/26.jpg)
Tipos, Literais, Operadores 26
Conversão de tipos primitivos
![Page 27: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/27.jpg)
Tipos, Literais, Operadores 27
Conversão de referências
![Page 28: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/28.jpg)
Tipos, Literais, Operadores 28
Conversão de tipos primitivos
A linguagem Java não suporta a coerção arbitráriados tipos de variáveis, exceto no caso de concatenação de strings
Exemplolong bigval = 6; // 6 é um int, OKint smallval = 99L; // 99 é um tipo long, ilegalfloat x = 12.414F; // 12.414F é um tipo float, OK
float y = 12.414; // é um tipo double, ilegal
![Page 29: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/29.jpg)
Tipos, Literais, Operadores 29
Conversão automáticaQualquer operação com dois ou mais operandos de tipos diferentes sofrerá promoção (conversão automática) ao tipo mais abrangente, que pode ser:
O maior ou mais preciso tipo da expressão (até double)O tipo int (para tipos menores que int)
double d = 10 + 50L + 4.6; // tudo é promovido para double
![Page 30: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/30.jpg)
Tipos, Literais, Operadores 30
Conversão automáticaAs regras para conversão com tipos primitivos podem ser assim resumidas:
O tipo boolean não pode ser convertido para nenhum outro tipoOs tipos não-booleanos podem ser convertidos para outros tipos não-booleanos, contanto que não haja perda de precisão. Isto é, podem ser convertidos apenas para tipos que suportem um limite igual ou maior ao seu
![Page 31: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/31.jpg)
Tipos, Literais, Operadores 31
Coerção (cast)As variáveis podem ser convertidas em tipos maiores de maneira automática, mas não em tipos menores
Desta forma, uma expressão int pode ser tratada como long, mas uma expressão long não poderá ser tratada como int sem que haja uma coerção explicita
Uma coerção é utilizada para persuadir o compilador a reconhecer uma atribuiçãoEsse procedimento pode ser adotado, por exemplo, para “comprimir” um valor long em uma variável intNa coerção, o programador assume os riscos da conversão de dados
![Page 32: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/32.jpg)
Tipos, Literais, Operadores 32
CoerçãoNão há risco de perda de informação na atribuição a seguir:
long L = 120; int i = L;
Mas o compilador acusará erro porque um long não pode ser atribuído a um int
Solução: int i = (int) L;
O operador de coerção tem maior precedência que os demais operadores
![Page 33: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/33.jpg)
Tipos, Literais, Operadores 33
public class Test {public static void main(String args[]) {
int i = 16777473;short s = (short) i;byte b = (byte) i;System.out.println(“Valor int:” + i);System.out.println(“Valor short:” + s);System.out.println(“Valor byte:” + b);
}}
A execução de código provoca duas conversões. Em ambas ocorre perda de informação
Coerção - Exemplo
i = 00000001 00000000 00000001 00000001 (int (4 bytes) - valor: 16777473)
s = 00000001 00000000 00000001 00000001(short (2 bytes) - valor: 257)
b = 00000001 00000000 00000001 00000001(byte (1 byte) - valor: 1)
i = 00000001 00000000 00000001 00000001 (int (4 bytes) - valor: 16777473)
s = 00000001 00000000 00000001 00000001(short (2 bytes) - valor: 257)
b = 00000001 00000000 00000001 00000001(byte (1 byte) - valor: 1)
![Page 34: Tipos, Literais, Operadores - deinf.ufma.brmario/grad/poo/aulas/TiposOperadores.pdf · Tipos, Literais, Operadores 8 Tipos de dados primitivos zJava, assim como Pascal, C e C++, é](https://reader031.fdocument.pub/reader031/viewer/2022022717/5c2b910409d3f2577a8c7a35/html5/thumbnails/34.jpg)
Tipos, Literais, Operadores 34
Coerção – Exemplo com objetos
Array v = new Array( );
v.add(“Hello”);
String s = (String)v.get(0);
Como o método get sempre retorna um elemento do tipo Object, que não pode ser atribuído a uma String, torna-se necessário fazer o cast antes da atribuiçãoCaso fosse feita a atribuição direta, teríamos um erro de compilação:
String s = v.get(0); // erro