Tipos Básicos de Dados Prof. M.Sc. Ronnison Reges Vidal Roteiro Introdução Declarando Variáveis Tipos de Dados Conversões entre Tipos Constantes Java – Orientação à Objetos Introdução Introdução Sintaxe da linguagem Formato de codificação da linguagem Java Como códigos de computador devem ser escritas Em um código-fonte Java, alguns símbolos são utilizados pelo compilador para diferenciar comandos, blocos de comandos, métodos, classes, etc. Introdução Tais símbolos, chamados de delimitadores, são enumerados abaixo: Ponto e vírgula Blocos Espaços em branco Em Java, todo comando é terminado por um ponto e vírgula (;) Exemplo: System.out.println("note o ponto e vírgula no final"); Introdução Um bloco é formado por um conjunto de instruções delimitadas por chaves, como no exemplo abaixo: /** Exemplo de bloco */ { // Chamamos essa chave de início de bloco int ano; // Note o ponto e vírgula ano = 2002; // sempre ao final de um comando Java } // Chamamos essa chave de final de bloco Introdução Comentários Fundamentos de Programação: Comentários É sempre interessante a colocação de comentários em programas. Os comentários permitem que a manutenção posterior do código seja mais rápida e serve para indicar o que o programa faz. Os comentários em java podem ser de dois tipos. Utiliza-se de duas barras ( // ) em qualquer posição da linha. Tudo o que aparecer à direita das duas barras será ignorado pelo compilador. Exemplo: a++; //Incremento de variável Introdução Comentários Fundamentos de Programação: Comentários Existem ocasiões onde várias linhas de comentário são necessárias. Nesse caso utilizamos os sinais de /* e */ para indicar início e fim de bloco de comentários, como no compilador. Exemplo: /* Programa de Exemplo – Esse programa não faz nada Criado por Ronnison Reges Vidal, para a aula de Linguagem de Programação Versão 1.0 */ Introdução O espaço em branco, quebra de linha e caracteres de tabulação são permitidos em qualquer trecho do código-fonte Devendo ser utilizados para realçar o aspecto visual de seu código Apesar do aspecto visual do código-fonte não ter nenhum impacto no desempenho de um programa Java, o uso de endentação é uma característica de bons códigos-fonte. Lembre-se que você não será o único a ler o código-fonte de seus programas, portanto escreva-o da maneira mais organizada e legível possível. Introdução Identação inadequada 1 2 3 4 5 6 7 8 9 10 11 12 13 14 if (a< b) a++; ...................................... While(true) a+=a; ...................................... do{a+b; b+c; c++;}while (x != null); ...................................... If (y < x){ y+=x; temp=y; x=temp; } Introdução Identação adequada 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /* Testando Comentários @author Ronnison */ public class TestDrive { public static void main ( String[] args ) { // Declaração de Variáveis valor x; Data aniversário; String nome; } } Introdução Identificadores e Palavras-reservadas um identificador é uma sequência de símbolos UNICODE (64K símbolos) que começa com: uma letra um símbolo subscrito _ ou o caractere $ Os demais símbolos de um identificador podem conter também números. Identificadores são case-sensitive e não tem um tamanho máximo estabelecido. Introdução Exemplo de identificadores válidos em Java: ? ? data ? ? _data ? ? $data ? ? data_do_mês ? ? data1 ? ? uma_variável_pode_SER_bastante_extensa_e_conter_Numeros234876238476 ? ? data_public_class_NoteQueEsseIdentificadorContemPalavrasReservadas Introdução Apesar desta "liberdade" de opções para nomes de identificadores, algumas palavras não são permitidas. palavras reservadas Representam o conjunto de comandos que forma a sintaxe da linguagem Java Introdução O conjunto de palavras reservadas em Java é o seguinte: Java – Orientação à Objetos Declarando Variáveis Declarando Variáveis Uma variável é sempre declarada seguindo do seguinte esquema: <tipo> + <espaço> + identificador + ; ou <tipo> + <espaço> + identificador + = + valor + ; Declarando Variáveis onde: <tipo> é um tipo primitivo de dados ou o nome de uma classe ou interface identificador é o nome da variável valor é o valor atribuído à variável. Caso você declare uma variável e não atribua nenhum valor, ela não poderá ser utilizada em um código Java – a tentativa de utilizar uma variável não inicializada em Java gerará um erro de compilação. Declarando Variáveis Exemplo: /** Atenção!!! * FIC - Faculdade Integrada do Ceará * Sistemas Orientados a Objetos I Veremos mais adiante que possuiAloMundo. um mecanismo de inicialização de * Incluindo variáveis noJava programa variáveis de seus tipos primitivos, mas deve-se evitar considerar essa */ inicialização como prática de public class AloMundo { programação. De fato, esta inicialização automática nãopublic funciona variáveis de tipos static voidpara main(String[] args) { agregados ou abstratos de dados e também o escopo das variáveis – de classe ou de instância - tem boolean obrigatorio; influência na sua inicialização. int semestre = 2; O aluno é fortemente recomendado a pensar em variáveis como alocados memória RAM, inicialmente podendo Stringespaços mensagem = "Alona mundo."; conter qualquer valor (conhecido como lixo na memória). System.out.println(mensagem); } } Java – Orientação à Objetos Tipos de Dados Tipos de Dados Java é uma linguagem que necessita que todas as Fortemente Tipado variáveis tenham um tipo declarado Existem 8 tipos primitivos declarados 6 são numéricos 1 é o caractere 1 é o booleano Tipos de Dados Java é uma linguagem que necessita que todas as variáveis tenham um tipo declarado Existem 8 tipos primitivos declarados 6 são numéricos 1 é o caractere 1 é o booleano Tipos de Dados Java é uma linguagem que necessita que todas as variáveis tenham um tipo declarado Existem 8 tipos primitivos declarados 6 são numéricos Int, short, long, float, double, byte 1 é o caractere 1 é o booleano Java – Orientação à Objetos Conversões entre Tipos Conversões entre Tipos Alguns valores são incompatíveis se você tentar fazer uma atribuição direta double d = número 3.1415; Enquanto um real costuma ser representado int i = d; // não compila em uma variável do tipo double, tentar atribuir ele a uma variável int não funciona Porque é um código que diz: “i deve valer d”, mas não se sabe se d realmente é um número inteiro ou não Conversões entre Tipos Alguns valores são incompatíveis se você tentar fazer uma atribuição direta Enquanto um número real costuma ser representado em uma variável do tipo double, tentar atribuir ele a uma variável int não funciona Porque é um código que diz: “i deve valer d”, mas não se sabe se d realmente é um número inteiro ou não Conversões entre Tipos Alguns valores são incompatíveis se você tentar fazer uma atribuição direta O mesmo nessereal trecho: Enquanto umocorre número costuma ser representado em uma variável do tipo double, tentar atribuir ele a int i = 3.14; uma variável int não funciona Porque é um código que diz: “i deve valer d”, mas não se sabe se d realmente é um número inteiro ou não Conversões entre Tipos Alguns valores são incompatíveis se você tentar fazer uma atribuição direta Enquanto um número real costuma ser representado em uma variável do tipo double, tentar atribuir ele a uma variável int não funciona Porque é um código que diz: “i deve valer d”, mas não se sabe se d realmente é um número inteiro ou não Conversões entre Tipos Alguns valores são incompatíveis se você tentar fazer uma atribuição direta O mais interessante, que nem mesmo o seguinte código compila: Enquanto uménúmero real costuma ser representado em uma variável do tipo double, tentar atribuir ele a double d = 5; // ok, o double pode conter um número inteiro uma variável int não funciona int i= d; // não compila Porque é um código que diz: “i deve valer d”, mas não se sabe se d realmente é um número inteiro ou não Conversões entre Tipos Apesar de 5 ser um bom valor para um int, o compilador tem como saber que valor estará Já no caso a seguir,não é o contrário: dentro desse double no momento da execução int i = 5; Esse valor pode ter sido digitado pelo usuário, e ninguém double d2 = i; vai garantir que essa conversão ocorra sem perda de valores Conversões entre Tipos O código acima compila sem problemas, já que um double pode guardar um número com ou sem ponto flutuante Todos os inteiros representados por uma variável do tipo int podem ser guardados em uma variável double, então não existem problemas no código acima Conversões entre Tipos Às vezes, precisamos que um número quebrado seja arredondado e armazenado num número inteiro Para fazer isso sem que haja o erro de compilação, é preciso ordenar que o número quebrado seja moldado (casted) como um número inteiro Esse processo recebe o nome de casting Conversões entre Tipos Às vezes, precisamos que um número quebrado seja arredondado e armazenado num número inteiro Para fazer doubleisso d3 =sem 3.14; que haja o erro de compilação, é intordenar i = (int) d3;que o número quebrado seja moldado preciso (casted) como um número inteiro Esse processo recebe o nome de casting Conversões entre Tipos O casting foi feito para moldar a variável d3 como um int O valor de i agora é 3 O mesmo ocorre entre valores int e long long x = 10000; int i = x; // não compila, pois pode estar perdendo informação Conversões entre Tipos E, se quisermos realmente fazer isso, fazemos o casting long x = 10000; int i = (int) x; Conversões entre Tipos Casos não tão comuns Alguns castings aparecem também: Float x = 0.0; O código acima não compila pois todos os literais com ponto flutuante são considerados double pelo Java. E float não pode receber um double sem perda de informação, para fazer isso funcionar podemos escrever o seguinte: float x = 0.0f; Conversões entre Tipos Casos não tão comuns A letra f, que pode ser maiuscula ou minúscula, indica que aquele literal deve ser tratado como float Outro caso, que é mais comum: double d = 5; float f = 3; float x = f + (float) d; Você precisa do casting porque o Java faz as contas e vai armazenando sempre no maior tipo que apareceu durante as operações, no caso o double Conversões entre Tipos Casos não tão comuns E, uma observação: no mínimo, o Java armazena o resultado em um int, na hora de fazer as contas Até casting com variáveis do tipo char podem ocorrer O único tipo primitivo que não pode ser atribuído a nenhum outro tipo é o boolean Conversões entre Tipos Para: Castings possíveis Byte Short Char Int Long Float Double Byte --- Impl. (cha r) Impl. Impl. Impl. Impl. Short (byt e) --- (cha r) Impl. Impl. Impl. Impl. Char (byt e) (short --) Impl. Impl. Impl. Impl. Int (byt e) (short (cha ) r) --- Impl. Impl. Impl. Long (byt e) (short (cha ) r) (int) --- Impl. Impl. Float (byt e) (short (cha ) r) (int) (lon g) --- Double (byt e) (short (cha ) r) (int) (lon g) (floa --t) De: Impl. Conversões entre Tipos Tamanho dos Tipos Tipo Tamanho Boolean 1 bit Byte 1 byte Short 2 bytes Char 2 bytes Int 4 bytes Float 4 bytes Long 8 bytes Double 8 bytes Exercícios Na empresa onde trabalhamos, há tabelas com o quanto foi gasto em cada mês. Para fechar o balanço do primeiro trimestre, precisamos somar o gasto total. Sabendo que, em Janeiro, foram gastos 15000 reais, em Fevereiro, 23000 reais e em Março, 17000 reais, faça um programa que calcule e imprima o gasto total no trimestre. Siga esses passos: Crie uma classe chamada BalancoTrimestral com um bloco main, como nos exemplos anteriores; Dentro do main (o miolo do programa), declare uma variável inteira chamada gastosJaneiro e inicialize-a com 15000; Crie também as variáveis gastosFevereiro e gastosMarco, inicializando-as com 23000 e 17000, respectivamente, utilize uma linha para cada declaração; Crie uma variável chamada gastosTrimestre e inicialize-a com a soma das outras 3 variáveis: int gastosTrimestre = gastosJaneiro + gastosFevereiro + gastosMarco; Imprima a variável gastosTrimestre. Exercícios 2) Adicione código (sem alterar as linhas que já existem) na classe anterior para imprimir a média mensal de gasto, criando uma variável mediaMensal junto com uma mensagem. Para isso, concatene a String com o valor, usando "Valor da média mensal = "+ mediaMensal.