Tipos de dados e comandos POO Prof. Marcio Delamaro 1/46
Objetivo Vamos ver quais são os tipo de dados primitivos da linguagem Vamos ver quais são os principais comandos 2/46
Tipos Tipo Tamanho int 4 bytes long 8 bytes float 4 bytes double 8 bytes char 2 bytes short 2 bytes byte 1 byte boolean 1 bit 3/46
Tipos Tipo Tamanho int 4 bytes long 8 bytes float 4 bytes double 8 bytes char 2 bytes short 2 bytes byte 1 byte boolean 1 bit Na maior parte dos casos não existe muita diferença entre os tipos de dados do C. Para qualquer arquitetura, a JVM é sempre a mesma e os tipos são sempre os mesmos 4/46
Tipos Tipo Tamanho int 4 bytes long 8 bytes float 4 bytes double 8 bytes char 2 bytes short 2 bytes byte 1 byte boolean 1 bit Na maior parte dos casos não existe muita diferença entre os tipos de dados do C. Para qualquer arquitetura, a JVM é sempre a mesma e os tipos são sempre os mesmos Esse é novo! Qualquer resultado de uma operação lógica é do tipo boolean. Dois valores possíveis: true e false. 118 > 33 produz resultado true 88 <= -9 produz resultado false 5/46
Operadores Tipo do operador Lista de operadores Sufixal expr++ expr-- Prefixal ++expr --expr +expr -expr ~! Multiplicativos */% Aditivos +- Shift binário << >> >>> Comparativos < > <= >= instanceof Igualdade ==!= Bit-a-bit E & Bit-a-bit XOU ^ Bit-a-bit OU Lógico E && Lógico OU Ternário?: Atribuição = += -= *= /= %= &= ^= = <<= >>= >>>= 6/46
Operadores Tipo do operador Lista de operadores Sufixal expr++ expr-- x++; 8 + y++; Prefixal ++expr --expr +expr -expr ~! --x; 8 + --y; Multiplicativos */% Aditivos +- Shift binário << >> >>> x = y >> 2; Comparativos < > <= >= instanceof a <= b Igualdade ==!= a == b a!= b Bit-a-bit E & x = y & 0b101 Bit-a-bit XOU ^ Bit-a-bit OU Lógico E && Lógico OU Ternário?: x = a > b? b : b; Atribuição = += -= *= /= %= &= ^= = <<= >>= >>>= X += 10; a > b && b <= c 7/46
Cast de tipos Em C é possível fazer o casting de tipos Em Java, é obrigatório em muitos casos fazer o casting Quando há possibilidade de se perder informação o casting é requerido Compilador vai avisar 8/46
Casting double x,y,z int i, j, k; float p, q, r; i = 10; x = i * i; 9/46
Casting double x,y,z int i, j, k; float p, q, r; i = 10; x = i * i; 10/46
Casting double x,y,z int i, j, k; float p, q, r; i = 10; x = i * i; x = 10; i = x * x; i = x; 11/46
Casting double x,y,z int i, j, k; float p, q, r; i = 10; x = i * i; x = 10; i = x * x; i = x; 12/46
Casting double x,y,z int i, j, k; float p, q, r; p = x; r = x * k; j = i * z; p = q * y; i = 10; x = i * i; x = 10; i = x * x; i = x; x = 10.33; i = x * x; i = x; 13/46
Casting double x,y,z int i, j, k; float p, q, r; p = x; r = x * k; j = i * z; p = q * y; i = 10; x = i * i; x = 10; i = x * x; i = x; x = 10.33; i = x * x; i = x; 14/46
Casting double x,y,z int i, j, k; float p, q, r; i = 10; x = i * i; p = x; r = x * k; j = i * z; p = q * y; p = (float) x; r = (float) x * k; j = i * (int) z; p = q * (float) y; x = 10; i = x * x; i = x; x = 10.33; i = x * x; i = x; 15/46
Casting double x,y,z int i, j, k; float p, q, r; i = 10; x = i * i; p = x; r = x * k; j = i * z; p = q * y; p = (float) x; r = (float) x * k; j = i * (int) z; p = q * (float) y; x = 10; i = x * x; i = x; x = 10.33; i = x * x; i = x; p = q * 2.0; 16/46
Casting double x,y,z int i, j, k; float p, q, r; i = 10; x = i * i; p = x; r = x * k; j = i * z; p = q * y; p = (float) x; r = (float) x * k; j = i * (int) z; p = q * (float) y; x = 10; i = x * x; i = x; x = 10.33; i = x * x; i = x; p = q * 2.0; p = q * 2.0f; 17/46
Erro de conversão de tipo 18/46
Tabela de conversões 19/46
Declaração de variáveis Variáveis podem ser declaradas na hora que forem usadas Vale a mesma regra de escopo por exemplo uma variável declarada dentro de um if vale apenas naquele escopo 20/46
Exercício Implemente a solução de uma equação de segundo grau. Os coefecientes devem ser lidos pelo teclado. Para calcular a raiz quadrada de um double x use y = Math.sqrt(x) 21/46
Comando de seleção Comando if: if (expressão booleana) comando 1; else comando 2; Uso de chaves para agrupar comandos if (expressão booleana){ comando 1; comando 2; } else { comando 3; comando 4; } 22/46
Comando if int idade = 15; boolean amigododono = true; if (idade < 18 &&!amigododono) { System.out.println("Não pode entrar"); } else { System.out.println("Pode entrar"); } 23/46
Convenção de nomes Classes: Usar todas as palavras iniciando com maiúsculas EntradaTeclado, Pessoa, PrimeiroPrograma Variáveis: primeira palavra iniciando em minúsculas, demais iniciando em maiúsculas idade, amigododono, raizdelta 24/46
Exercício Use o comando if para: verificar se a equação é ou não do segundo grau verificar se a equação tem raízes reais ou não O comando return pode ser usado para terminar a execução do seu método main. 25/46
Repetição while não muda em relação ao C for não muda, mas podemos declarar a variável que será usada como controle for (int i = 0; i < 10; i++) { int i; for (i = 0; i < 10; i++) { No 1o. caso, a variável i só pode ser usada dentro do for Depois do for ela não existe mais 26/46
Exercício Implemente um programa que leia um número inteiro, compute e mostre o seu fatorial usando o comando while usando o comando for 27/46
Exceções Linguagens modernas possuem um mecanismo sinalização de erro, chamado exceção Quando alguma coisa dá errado, um método pode lançar uma exceção Isso sinaliza para o código que está usando aquele método que algo deu errado Cabe a ele tratar esse erro ou ignorar, ou seja, jogar para cima o problema 28/46
Tratamento de exceções main f g h k 29/46
Tratamento de exceções main Ao ocorrer um erro, o método k sinaliza a situação com uma exceção. Isso termina a execução de k. A execução volta para h, que não faz nada. Ou seja, não existe em h nenhum mecanismo para tratar a exeção. f g h k ERRO! 30/46
Tratamento de exceções main Se h não trata a exeção, é como se ele a estivesse lançando também. Ou seja, a sua execução termina, e a exeção é de novo jogada para cima. f g h k ERRO! 31/46
Tratamento de exceções main Se ninguem tratar a execeção, ela chega na JVM, que termina a execução do programa, mostrando que um erro ocorreu. f g h k ERRO! 32/46
Tratamento de exceções main Se ninguem tratar a execeção, ela chega na JVM, que termina a execução do programa, mostrando que um erro ocorreu. f g Vamos executar nossos programas!!! h k ERRO! 33/46
Executando SegundoPrograma Digite um inteiro: abc Exception in thread "main" java.lang.numberformatexception: For input string: "abc" at java.lang.numberformatexception.forinputstring(numberform atexception.java:65) at java.lang.integer.parseint(integer.java:580) at java.lang.integer.parseint(integer.java:615) at EntradaTeclado.leInt(EntradaTeclado.java:19) at SegundoPrograma.main(SegundoPrograma.java:9) 34/46
SegundoPrograma public static void main(string[] args) throws Exception { int k; System.out.printf("Digite um inteiro: "); k = EntradaTeclado.leInt(); System.out.printf("Numero lido: %d\n", k); } 35/46
Tratamento de exceções main main f f Erro é tratado g h k g h ERRO! k ERRO! 36/46
Tratamento de exceções main main Nesse caso, o método g está preparado para o caso de h lançar uma exceção. f f Erro é tratado g h k g h ERRO! k ERRO! 37/46
Tratamento de exceções main main Nesse caso, o método g está preparado para o caso de h lançar uma exceção. f Existe um pedaço de código que diz o que deve ser feito nesse caso. E a execução de g continua normalmente. g f Erro é tratado h k g h ERRO! k ERRO! 38/46
Tratamento de exceções main main Nesse caso, o método g está preparado para o caso de h lançar uma exceção. f Existe um pedaço de código que diz o que deve ser feito nesse caso. E a execução de g continua normalmente. g f Erro é tratado h g h Vamos tratar uma exceção! k ERRO! k ERRO! 39/46
TrataExcecao.java public class TrataExcecao { Tirar o comando throws que tinha aqui public static void main(string[] args) { int k; System.out.printf("Digite um inteiro: "); k = EntradaTeclado.leInt(); System.out.printf("Numero lido: %d\n", k); } } 40/46
TrataExcecao.java public class TrataExcecao { Tirar o comando throws que tinha aqui public static void main(string[] args) { int k; System.out.printf("Digite um inteiro: "); k = EntradaTeclado.leInt(); System.out.printf("Numero lido: %d\n", k); } O compilador vai avisar que tem uma exeção não tratada nesse ponto. } 41/46
try-catch System.out.printf("Digite um inteiro: "); try { k = EntradaTeclado.leInt(); } catch (Exception e) { System.out.println("O valor que vc digitou não é um número inteiro"); return; } System.out.printf("Numero lido: %d\n", k); 42/46
try-catch System.out.printf("Digite um inteiro: "); try { Dentro do try vão os comandos que podem gerar exceção k = EntradaTeclado.leInt(); } catch (Exception e) { System.out.println("O valor que vc digitou não é um número inteiro"); return; } System.out.printf("Numero lido: %d\n", k); 43/46
try-catch System.out.printf("Digite um inteiro: "); try { Dentro do try vão os comandos que podem gerar exceção k = EntradaTeclado.leInt(); } catch (Exception e) { Dentro do catch vai o tratamento da exceção System.out.println("O valor que vc digitou não é um número inteiro"); return; } System.out.printf("Numero lido: %d\n", k); 44/46
Exercício Vamos fazer o tratamento de erro para o programa da equação de segundo grau. Queremos tratar o caso em que o usuário digita alguma coisa que não seja um número. Modifique o programa do fatorial. Faça com que o programa verifique se o número digitado é legal, ou seja, se é um número e se é positivo. Se o número não for legal, faça com que o programa repita a entrada até que um número legal seja digitado. 45/46
Exercício Modifique o programa da equação de segundo grau para que ele leia os coeficientes, até que eles sejam digitados de maneira correta. Mas atenção: o seu programa deve solicitar que seja digitado novamente somente aquele coeficiente para o qual ocorreu um erro. 46/46