Fundamentos Java - 01

103
Instrutor Daniel Bernardo Programação Orientada a Objetos com Java

Transcript of Fundamentos Java - 01

Page 1: Fundamentos Java - 01

Instrutor Daniel Bernardo

Programação Orientada a Objetos com Java

Page 2: Fundamentos Java - 01

Instrutor Daniel Bernardo

Apresentação

• A quem se destina o curso

– Estudantes na área de Informática

– Programadores de outras linguagens

– Pesquisadores

– Empresas que deseja adotar o Java como plataforma de trabalho

• Pré requisito

– Lógica de Programação

Page 3: Fundamentos Java - 01

Instrutor Daniel Bernardo

Apresentação

Como o curso está dividido?

● Aula 01⁻ Iniciação à Orientação a Objetos com Java

● Aula 02⁻ Aprofundar conhecimentos de Orientação a Objetos

● Aula 03 e Aula 04⁻ Aprofundar conhecimentos na Linguagem Java

● Aula 05⁻ API: java.io e Collections Framework

● Aula 06⁻ Conhecimentos extras: Swing, JDBC e outras Classes

Page 4: Fundamentos Java - 01

Instrutor Daniel Bernardo

Apresentação

● Aula 01: Iniciação à Orientação a Objetos com Java

⁻ O que é Java e sua História⁻ Java Virtual Machine e os Bytecodes⁻ Montar o ambiente de desenvolvimento⁻ IDE Eclipse⁻ Conceitos básicos de uma Classe⁻ Comandos básicos⁻ Manipular tipos primitivos⁻ Controle de fluxo com “if” e operadores⁻ Estrutura de repetiçao while, do While, for

Page 5: Fundamentos Java - 01

Instrutor Daniel Bernardo

O que é java – Uma Linguagem?

• Não é apenas uma linguagem de programação. Pode ser dividido em três partes:

– Linguagem de programação

– Ambiente de desenvolvimento

– API (Application Programing Interface)

Page 6: Fundamentos Java - 01

Instrutor Daniel Bernardo

O que é java –Linguagem

• Como linguagem de programação, Java pode ser utilizado para criar todos os tipos de aplicações existentes, de programas de Inteligência Artificial para Robôs até programas para aparelhos celulares.

• composta por um conjunto de palavras e simbolos utilizados pelos desenvolvedores para escrever programas.

• Formada por conjunto de palavras reservadas utilizadas para escrever expressões, instruções, estruturas de decisão, estrutura de controle, métodos, classes e outros

Page 7: Fundamentos Java - 01

Instrutor Daniel Bernardo

O que é java – Ambiente de Desenvolvimento

• Conjunto de ferramentas utilizadas para construção de aplicativos:– Javac: compilador– Java: interpretador– Javadoc: documentação

• E muitas outras que compõem a JDK que nos auxilia no desenvolvimento de aplicativos.

• IDE Integrated Development Enviroment - Ambiente de desenvolvimento integrado– Facilitam o processo de desenvolvimento de software– Eclipse, Netbeans, IntelliJ

Page 8: Fundamentos Java - 01

Instrutor Daniel Bernardo

O que é java – API

• (Application Programming Interface) Interface de programas aplicativos

• Conjunto de classes, métodos, atributos que auxiliam o desenvolvedor na construção de programas

• Não confundir com interfaces gráficas de usuario (GUI)

Page 9: Fundamentos Java - 01

Instrutor Daniel Bernardo

O que é Java - O termo java

• Deve ser interpretado como uma referência à sua concepção mais ampla: uma TECNOLOGIA INCORPORADA voltada para o desenvolvimento de software composta por um ambiente, uma linguagem e uma API.

Page 10: Fundamentos Java - 01

Instrutor Daniel Bernardo

História

• Java foi criado em 1991 por James Gosling da Sun Microsystems. Inicialmente chamada OAK (Carvalho), em homenagem à uma árvore de janela do Gosling, seu nome foi mudado para Java devido a existência de uma linguagem com o nome OAK

• A motivação original do Java era a necessidade de uma linguagem independente de plataforma que podia ser utilizada em pequenos dispositivos, facilitando a reescrita de software para aparelhos eletrônicos, como vídeo cassete, televisão e aparelhos de tv a cabo.

• Com o advento da web, a Sun percebeu que poderia utilizar a idéia criada em 1992 para poder rodar pequenas aplicações dentro do browser. A semelhança era que na internet havia uma grande quantidade de sistemas operacionais e browser, e com isso seria grande vantagem poder programar numa única linguagem, independente da plataforma. Foi aí que o Java 1.0 foi lançado: focado em deixar o browser não apenas um cliente burro, fazendo com que ele possa também realizar operações, não apenas renderizar html.

Page 11: Fundamentos Java - 01

Instrutor Daniel Bernardo

História

• Em Resumo:

– Java nasceu com uma idéia para atender pequenos dispositivos;

– Foi lançado para rodar na internet do lado cliente

– Em 1995 foi reformulado e oficialmente lançado em 20/05

– Emplacou mesmo no desenvolvimento de aplicações do lado servidor

Page 12: Fundamentos Java - 01

Instrutor Daniel Bernardo

História

Page 13: Fundamentos Java - 01

Instrutor Daniel Bernardo

Onde usar e objetivo

• No começo tem-se a impressão que o Java tem baixa produtividade. Que outras linguagens que se está acostumado é mais simples de criar pequenos sistemas.

• Isso porque o foco do Java não é criação de sistemas pequenos onde se trabalha um ou dois desenvolvedores.

• O foco da plataforma é: aplicações de médio a grande porte, com um grande time de desenvolvimento que mudam e crescem.

• Criar a primeira versão de um aplicativo é mais penosa que usar uma linguagem de script ou de alta produtividade.

• Porém, Java é uma linguagem OO e madura, o que torna a manutenção do sistema mais fácil e rápida. Isso usando as boas práticas de programação de Design Patterns.

Page 14: Fundamentos Java - 01

Instrutor Daniel Bernardo

Onde usar e objetivo

• quantidade enorme de bibliotecas gratuitas, para realizar os mais diversos trabalhos tais como:

– Relatórios, gráficos, sistemas de busca, geração de código de barra, manipulação de XML, tocadores de vídeo, manipuladores de texto, persistência transparente, impressão, etc)

• você pode criar uma aplicação sofisticada, usando diversos recursos, sem precisar comprar um componente específico, que costuma ser caro de acordo com sua especialização.

• O uso do java é interessante em aplicações que virão a crescer, em que a legibilidade do código é importante, onde temos muita conectividade e se temos plataformas (ambientes e sistemas operacionais) heterogêneos (linux, unix, OSX e windows misturados).

Page 15: Fundamentos Java - 01

Instrutor Daniel Bernardo

Instalando Java

• JSE – Java Standard Edition– Edição utilizada durante o curso– Com ela é possível

• Acessar banco de dados• Controle de múltiplas linhas de execução• Desenvolvimentos de aplicações distribuídas• Interface Gráfica• Rede• Outras

Page 16: Fundamentos Java - 01

Instrutor Daniel Bernardo

Arquitetura

Page 17: Fundamentos Java - 01

Instrutor Daniel Bernardo

Instalando Java

• JEE – Java Enterprise Edition

– É a tecnologia mais adequada para o desenvolvimento de aplicações complexas para rodar na Internet.

– Suporte a WebServices

– Aplicações de negócios seguras e Robustas

Page 18: Fundamentos Java - 01

Instrutor Daniel Bernardo

Instalando Java

• JME – Java Micro Edition

– Ambiente de execução altamente aperfeiçoado para ser executado em equipamentos eletrônicos de consumo.

– Destinado à programação de pequenos dispositivos.

Page 19: Fundamentos Java - 01

Instrutor Daniel Bernardo

JVM, JRE e JDK

• Java Virtual Machine – É um mecanismo que permite executar código em Java em qualquer plataforma. A JVM pode ser entendida como "uma máquina virtual implementada via software ou hardware que executa instruções vindas de bytecodes". Graças a ela o Java é Multi-Plataforma.

• Java Runtime Environment –É o ambiente de execução Java, formado pela JVM e bibliotecas que permitirão a execução de aplicativos desenvolvidos com a tecnologia Java em sua máquina.

• Java Development Kit –É um kit de desenvolvimento Java fornecido livremente pela Sun. Constitui um conjunto de programas que engloba compilador, interpretador e utilitários, fornecendo um pacote de ferramentas básicas para o desenvolvimento de aplicações Java.

Page 20: Fundamentos Java - 01

Instrutor Daniel Bernardo

O que é java - Máquina Virtual

• Em uma linguagem de programação como C e Pascal, o código fonte é compilado para uma plataforma e sistema operacional específicos.

• Muitas vezes, o próprio código fonte é desenvolvido visando uma única plataforma!

• Esse código executável (binário) resultante será executado pelo sistema operacional e, por esse motivo, ele deve saber conversar com o sistema operacional em questão

Código Fonte C Código Binário para determinado SO

Compila

Page 21: Fundamentos Java - 01

Instrutor Daniel Bernardo

O que é java - Máquina Virtual

• Nesse cenário é necessário compilar o programa uma vez para cada sistema operacional

• Na maioria das vezes, a sua aplicação se utiliza das bibliotecas do sistema operacional, como, por exemplo, a de interface gráfica para desenhar as 'telinhas'.

• A biblioteca de interface gráfica do Windows é bem diferente das do Linux. Desta maneira você precisa reescrever o mesmo pedaço da aplicação para diferentes sistemas operacionais.

Page 22: Fundamentos Java - 01

Instrutor Daniel Bernardo

O que é java - Máquina Virtual

• Já o Java utiliza-se do conceito de máquina virtual, onde existe uma camada extra entre o sistema operacional e a aplicação, responsável por “traduzir” o que sua aplicação deseja fazer para as respectivas chamadas do sistema operacional no qual ela está rodando no momento:

Bytecode Java

Windows

Linux

Máquina Virtual Win

Máquina Virtual Linux

Page 23: Fundamentos Java - 01

Instrutor Daniel Bernardo

O que é java - Máquina Virtual

• Dessa forma, a maneira a qual você abre uma janela no Linux ou no Windows é a mesma.

• Você ganha independência de sistema operacional. Ou, melhor ainda, independência de plataforma em geral.

• Uma máquina virtual é como um computador de mentira: ela tem tudo que um computador tem.

• Ela é responsável por gerenciar memória, gerenciar threads, a pilha de execução, etc.

• Sua aplicação roda sem nenhum envolvimento com o sistema operacional!

Page 24: Fundamentos Java - 01

Instrutor Daniel Bernardo

Page 25: Fundamentos Java - 01

Instrutor Daniel Bernardo

Compilando o primeiro programa

1. class MeuPrograma {2. 3. public static void main(String[] args) {4. 5. System.out.println(“Alô Mundo Java!");6. 7. }8. }

• O arquivo .class gerado contém o ByteCode do sistema que é o que a JVM irá interpretar.

Page 26: Fundamentos Java - 01

Instrutor Daniel Bernardo

O que é java - ByteCode

• Bytecode é o termo dado ao código binário gerado pelo compilador Java. • O compilador Java gera esse bytecode que, diferente das linguagens sem

máquina virtual, vai servir para diferentes sistemas operacionais, já que ele vai ser “traduzido” pela máquina virtual.

• Por isso diz-se que Java é uma Linguagem compilada e interpretada.• javap -c NomeDaClasse

Page 27: Fundamentos Java - 01

Instrutor Daniel Bernardo

Facilidades programação

• Quais são os seus maiores problemas quando está programando?

– ponteiros?

– liberar memória?

– organização?

– falta de bibliotecas boas?

– ter de reescrever parte do código ao mudar de sistema operacional?

– custo de usar a tecnologia?• Seus Problemas acabaram!!!

Page 28: Fundamentos Java - 01

Instrutor Daniel Bernardo

Garbage Collector

• O Garbage Collector (coletor de lixo, lixeiro) é uma Thread responsável por jogar fora todos os objetos que não estão sendo referenciados por nenhuma outra Thread, seja direta ou indiretamente!

• Como o Garbage Collector é uma Thread, você não tem garantia de quando ele vai rodar. Você só sabe que algum dia aquela memória vai ser liberada.

• System.gc() – Invocando o método estático da classe System você estará sugerindo a JVM rodar o Garbage Collector, mas ela irá executar quando bem entender.

Page 29: Fundamentos Java - 01

Instrutor Daniel Bernardo

O java é lento?

• Hotspot é a tecnologia que a JVM utiliza para detectar pontos quentes da sua aplicação:

– código que é executado muito.• Quando a JVM julgar necessária, ela vai compilar aquele código para

instruções nativas da plataforma, tendo em vista que isso vai provavelmente melhorar a performance da sua aplicação.

• Compilador é o JIT: Just inTime Compiler.• A JVM, por estar compilando dinamicamente durante a execução, pode

perceber que um determinado código não está com performance adequada, e otimizar mais um pouco aquele trecho, ou ainda mudar a estratégia de otimização

• Mantenha a JVM sempre atualizada.

Page 30: Fundamentos Java - 01

Instrutor Daniel Bernardo

Exercício

1. Altere seu programa para imprimir uma mensagem diferente.2. Altere seu programa para imprimir duas linhas de texto usando duas linhas

de código System.out.3. Sabendo que os caracteres “\n” representam uma quebra de linhas,

imprima duas linhas de texto usando uma única linha de código System.out.

Page 31: Fundamentos Java - 01

Instrutor Daniel Bernardo

O que é IDE?

• IDE – Integrated Development Environment (Ambiente de Desenvolvimento Integrado)

– Consiste em um software que contém um conjunto de funcionalidades embutidas, cuja finalidade é prover um modo mais fácil e interativo de construir e manipular seus programas.

• Entre estas ferramentas geralmente figuram:

– Um editor de texto com facilidades especialmente desenhadas para a linguagem;

– Um compilador (e um interpretador, no caso de Java e outras linguagens interpretadas);

– Um editor gráfico, com facilidades para criação e edição da interface gráfica do programa a ser desenvolvido;

Page 32: Fundamentos Java - 01

Instrutor Daniel Bernardo

IDEs

• Eclipse

– http://eclipse.org

• NetBeans

– http://netbeans.org

Page 33: Fundamentos Java - 01

Instrutor Daniel Bernardo

Declaração de classe

• O desenvolvimento de um aplicativo Java se resume à criação de fragmentos de código que se comunicam entre si, chamados classes e interfaces.

• Toda classe precisa de uma identificação, que é representada pelo seu nome, que é o ultimo termo da declaração.

• Se a classe é pública, seu nome deve ser igual ao nome do arquivo .java.

Page 34: Fundamentos Java - 01

Instrutor Daniel Bernardo

Método main

• O método main é usado para indicar ao compilador que esse é um aplicativo que deverá ser executado.

• Cada projeto (Desktop) Java deve ter um método principal; ou seja apenas um main.

• O método main é o primeiro método que a Máquina Virtual Java (JVM) executa, então o método main executa as chamadas a outros métodos.

• Deve ser void public e static• Deve receber por parametro um String[ ]

Page 35: Fundamentos Java - 01

Instrutor Daniel Bernardo

Declaração Import

• A declaração import de Java Corresponde à declaração include de C/C++ ou à cláusula uses do Pascal.

• Sua Finalidade é importar bibliotecas de classe e interfaces já existentes que serão necessárias.

• Na importação de uma classe digita-se seu caminho completo (pacote).

Page 36: Fundamentos Java - 01

Instrutor Daniel Bernardo

Instruções e Blocos

• Uma instrução é composta de uma ou mais linhas terminadas por ponto-e-vírgula. Um exemplo de uma simples instrução pode ser:

– System.out.println("Hello world");

• Um bloco é formado por uma ou mais instruções agrupadas entre chaves indicando que formam uma só unidade. Blocos podem ser organizados em estruturas aninhadas indefinidamente. Qualquer quantidade de espaços em branco é permitida. Um exemplo de bloco pode ser:

public static void main(String[] args) {

System.out.print("Hello ");

System.out.println("world");

}

Page 37: Fundamentos Java - 01

Instrutor Daniel Bernardo

Identificadores

• Identificadores são representações de nomes de variáveis, métodos, classes, etc. Exemplos de identificadores podem ser: Hello, main, System, out.

• O compilador Java difere as letras maiúsculas de minúsculas (case-sensitive). Isto significa que o identificador Hello não é o mesmo que hello. Os identificadores em Java devem começar com uma letra, um underscore “_”, ou um sinal de cifrão “$”. As letras podem estar tanto em maiúsculo quanto em minúsculo. Os caracteres subseqüentes podem usar números de 0 a 9.

• Os identificadores não podem ter nomes iguais às palavras-chave ou palavras reservadas do Java, como: class, public, void, int, etc

Page 38: Fundamentos Java - 01

Instrutor Daniel Bernardo

Identificadores

• Para nomes de classes, a primeira letra deve ser maiúscula. Nomes de métodos ou variáveis devem começar com letra minúscula. Por exemplo:

– ExemploDeNomeDeUmaClasse

– exemploDeNomeDeUmMetodo• No caso de identificadores com mais de uma palavra, a primeira letra de

cada palavra, com exceção da primeira, deve vir em maiúsculo. Por exemplo:

– charArray – fileNumber – className• Evite o uso de undescores no início de um identificador. Por exemplo:

– _NomeDeClasse.

Page 39: Fundamentos Java - 01

Instrutor Daniel Bernardo

Palavras-chave

• Palavras-chave são identificadores que, em Java, foram pré-definidas para propósitos específicos. Não se pode usar esses identificadores como nomes de variáveis, métodos, classes, etc. A seguir, temos a lista com as palavras-chave em Java.

Page 40: Fundamentos Java - 01

Instrutor Daniel Bernardo

Palavras-chave

• true, false e null não são palavras-chave, porém, são palavras-reservadas, e, da mesma maneira, não é permitido seu uso na atribuição a nomes de variáveis, métodos ou classes.

Page 41: Fundamentos Java - 01

Instrutor Daniel Bernardo

Tipos de dados primitivos

• A linguagem Java possui 8 tipos de dados primitivos

Page 42: Fundamentos Java - 01

Instrutor Daniel Bernardo

Tipos de dados primitivos

• Lógico– O tipo boolean pode representar dois estados: true (verdadeiro) ou

false (falso). Um exemplo é:

• boolean verdadeiro = true;

• Boolean falso = false;

– Diferente de outras linguagens, tipo booleano em Java não permite atribuição de 0 e 1.

Page 43: Fundamentos Java - 01

Instrutor Daniel Bernardo

Tipos de dados primitivos

• Inteiro– O dado do tipo char é um inteiro especial, sendo exclusivamente

positivo e representa um único Unicode. Ele deve ser, obrigatoriamente, colocado entre aspas simples ('').

– char c = 97; // representa o símbolo 'a'

– byte b = 'a'; // em inteiro representa o número 97

– É possível definir para qualquer inteiro nas formas mostradas. O que difere o tipo char dos demais inteiros é que a sua saída sempre será mostrada como um valor ASCII. Enquanto que os inteiros serão sempre mostrados por números decimais

– char c = 97;

– byte b = 'a';

– System.out.println("char = " + c + " - byte = " + b);

– Resultará:– char = a - byte = 97

Page 44: Fundamentos Java - 01

Instrutor Daniel Bernardo

Tipos de dados primitivos

• Um cuidado deve ser tomado quanto aos inteiros: qualquer operação efetuada entre eles terá sempre como resultado um tipo int. Por exemplo:– byte b1 = 1;

– byte b2 = 2;

– byte resultado = b1 + b2;• Esta instrução final causará um erro de compilação, devendo ser

modificada para:– int resultado = b1 + b2;

Page 45: Fundamentos Java - 01

Instrutor Daniel Bernardo

Tipos de dados primitivos

Os inteiros têm por padrão o valor representado pelo tipo primitivo int. Pode-se representá-los como long adicionando, ao final do número, um "l" ou "L". Os tipos de dados inteiros assumem valores nas seguintes faixas:

long numeroLongo = 324L;

Page 46: Fundamentos Java - 01

Instrutor Daniel Bernardo

Tipos de dados primitivos

9.223.372.036.854.775.807-9.223.372.036.854.775. 8088 byteslong

2.147.483.647-2.147.483.6484 bytesint

32.768-32.7682 bytesshort

127-1281 bytebyte

MáximoMínimoTamanhoTipo

Page 47: Fundamentos Java - 01

Instrutor Daniel Bernardo

Tipos de dados primitivos

• Números de ponto flutuante

– O tipo float é pouco usado devido sua limitação de possuir uma baixa precisão.

Tipo Tamanho Mínimo Máximo Precisão

Float 4 bytes -3.4028E+38 3.4028E+38 6,7 dígitos

Double 8 bytes -1.7976E+308 1.7976E+308 15 dígitos

Page 48: Fundamentos Java - 01

Instrutor Daniel Bernardo

Variaveis primitivas

• Declarando e usando variáveis

– Dentro de um bloco, podemos declarar variáveis e usá-las.– Em Java, toda variável tem um tipo que não pode ser mudado

uma vez que declarado:

• tipoDaVaríavel nomeDaVariável;• Por exemplo, é possível ter uma idade que vale um número inteiro:

– int idade;• Com isso, você declara a variável idade, que passa a existir a partir deste

momento. Ela é do tipo int, que guarda um número inteiro. A partir de agora você pode usá-la, primeiro atribuindo valores.

• A linha a seguir é a tradução de “idade deve valer agora quinze“.• idade = 15;• Além de atribuir, você pode utilizar esse valor

– System.out.println(idade);

Page 49: Fundamentos Java - 01

Instrutor Daniel Bernardo

Variáveis primitivas

• Você pode usar os operadores +, -, / e * para operar com números, sendo eles responsáveis pela adição, subtração, divisão e multiplicação, respectivamente. Além desses operadores básicos, há o operador % (módulo) que nada mais mais é que o resto de uma divisão inteira.

• int quatro = 2 + 2;• int tres = 5 – 2;• int oito = 4 * 2;• int dezesseis = 64 / 4;• int um = 5 % 2; // 5 dividido por 2 dá 2 e tem resto 1;// o operador % pega o resto da divisão inteira

Page 50: Fundamentos Java - 01

Instrutor Daniel Bernardo

Variáveis primitivas

• Double

– Outro tipo de variável muito utilizado é o double, que armazena um número com ponto flutuante.

• double d = 3.14;

• double x = 5 * 10;• boolean verdade = true;

– boolean verdade = true; // Não aceita 0 e 1• Char

– O tipo char guarda um e apenas um caractere. Esse caractere deve estar entre aspas simples.

• char letra = 'a';

Page 51: Fundamentos Java - 01

Instrutor Daniel Bernardo

Exercícios

1. Criar um projeto Java chamado JavaBasico.2. Criar uma classe Java com método main chamada AulaUm.3. Dentro do método main, escrever o seguinte código:

1. String nome = "<Seu nome>";2. int idade = "<Sua idade>";3. System.out.println("Meu nome é " + nome + "e tenho " + idade + " anos");

Page 52: Fundamentos Java - 01

Instrutor Daniel Bernardo

Referência de Variáveis e Valor das Variáveis

• Iremos diferenciar os dois tipos de variáveis suportados pelo Java. Estes podem ser de referência ou de valor.

• As variáveis de “valor”, ou primitivas, são aquelas que armazenam dados no exato espaço de memória onde a variável está.

• As variáveis de referência são aquelas que armazenam o endereço de memória onde o dado está armazenado. Ao declarar uma variável de certa classe (variável de classe), se declara uma variável de referência a um objeto daquela classe.

Page 53: Fundamentos Java - 01

Instrutor Daniel Bernardo

Referência de Variáveis e Valor das Variáveis

• Por exemplo, vamos supor que se tenha estas duas variáveis do tipo int e da classe String.– int num = 10;

– String nome = “Hello”;• Suponha que o quadro abaixo represente a memória do computador, com

seus endereços de memória, o nome das variáveis e os tipos de dados que ele pode suportar.

Page 54: Fundamentos Java - 01

Instrutor Daniel Bernardo

Referência de Variáveis e Valor das Variáveis

• A variável (do tipo int) num o dado é o atual valor contido por ela e, a referência da variável (do tipo string) nome somente é armazenado o endereço de memória que contém o valor da variável.

Page 55: Fundamentos Java - 01

Instrutor Daniel Bernardo

Conversões

• Como visto é possível atribuir o conteúdo de uma variável a outra.• Se a variável de origem for de um tipo diferente da de destino, o dado pode

ter que passar por um processo de conversão antes da atribuição.

– Byte --- short --- int --- long --- float --- double– Char --- int

• Atribuir o conteúdo de uma variável do tipo int para uma long, float ou double não há necessidade de realizar conversão nenhuma.

• Porém a atribuição de uma variável do tipo a direita a uma a esquerda, necessita de uma conversão explícita.– Int i = 55;

– Byte b = (byte) i;

Page 56: Fundamentos Java - 01

Instrutor Daniel Bernardo

Conversões

• Ajuste circular

– Int i = 130;

– Byte b = (byte) i;• Intervalo de byte não comporta o valor 130;

– -128 a 127;• Assim o excedente, nesse caso 3, é acrescido no início.

– (127 + 1 = -128; -128 + 1 = -127; -127 + 1 = -126 )

• Analise ConvEntreNumero

Page 57: Fundamentos Java - 01

Instrutor Daniel Bernardo

Conversão de String

• Com freqüência é necessária a conversão de String para Integer, Float e Double.

int i4 = Integer.parseInt("123");

float f = Float.parseFloat("23.2");

double d = Double.parseDouble("34.67");• E também o contrário

Integer inteiro = 1;

String st1 = inteiro.toString();

Float fl1 = 2.3f;

String st2 = fl1.toString();

Double dbl = 4.5;

String st3 = dbl.toString();• Essa conversão se torna possível utilizando as classes Wraper dos tipos primitivos,

que possui além do conversor (parse) outros métodos utilitários.

Page 58: Fundamentos Java - 01

Instrutor Daniel Bernardo

Constantes

• Comum: declaração como atributos de classes.• Caso seja declarada dentro de um bloco, seu escopo será limitado a este

bloco.• Armazenam valores que jamais mudam.• Faz muito mais sentido declará-las em uma única classe e torná-las

acessíveis à outras classes. (default static).• Casse Constante• Por convenção, os identificadores das classes são escritos em maiúsculos

e separação feita por underline quando necessario.

– VALOR_ICMS, PERC_ICMS,...

Page 59: Fundamentos Java - 01

Instrutor Daniel Bernardo

Operadores Aritméticos

• Baixe e analise a classe com exemplos do uso de operadores– Operadores.java

• Nota: Quando um número de tipo inteiro e um outro de número fracionário são usados numa única operação, o resultado será dado pela variável de maior tipo, no caso, valor de número fracionário. O número inteiro é implicitamente convertido para o número fracionário antes da operação ter início.

Page 60: Fundamentos Java - 01

Instrutor Daniel Bernardo

Operadores de Incremento e Decremento

• Além dos operadores aritméticos básicos, Java dá suporte ao operador unário de incremento (++) e ao operador unário de decremento (--).

• Operadores de incremento ou decremento aumentam ou diminuem em 1 o valor da variável.

• Por exemplo, a expressão, – count = count + 1; // incrementa o valor de count em 1

• é equivalente a,

– count++;

Page 61: Fundamentos Java - 01

Instrutor Daniel Bernardo

Operadores de Incremento e Decremento

Page 62: Fundamentos Java - 01

Instrutor Daniel Bernardo

Operadores de Incremento e Decremento

• int i = 10,• int j = 3;• int k = 0;• k = ++j + i; //resultará em k = 4+10 = 14

• int i = 10,• int j = 3;• int k = 0;• k = j++ + i; //resultará em k = 3+10 = 13

Page 63: Fundamentos Java - 01

Instrutor Daniel Bernardo

Exercícios

1. Crie um método main com as variáveis A e B e efetue as operações de adição, subtração, multiplicação e divisão de A por B, apresentando ao final os quatro resultados obtidos.

1. Peça ao usuário informar os números.2. Crie um método main com as variáveis A e B, efetuar a troca dos valores

de forma que a variável A passe a possuir o valor da variável B e que a variável B passe a possuir o valor da variável A. Apresentar os valores trocados.

3. Crie um método main com duas variáveis do tipo int A e B. Inicie a A com 10 e a b com 7. Desenvolva um código capaz de imprimir o seguinte:

1. Valor de A era 10 agora é 11;

2. O valor de b passou a ser 6

Utilize operadores de incremento e decremento. E uma linha para cada.

Page 64: Fundamentos Java - 01

Instrutor Daniel Bernardo

Exercícios

• Escreva um programa que, recebe um valor digitado pelo usuário e a este valor adicione o percentual de COFINS e PIS. Apresente ao usuário o valor de cada um e sua soma.

– Utilize constantes para cofins, pis e porcento.•

Page 65: Fundamentos Java - 01

Instrutor Daniel Bernardo

Exercícios

1. Adicione código (sem alterar as linhas que já existem) no programa a seguir para imprimir o resultado:

– Resultado: 15, 15.1, y, false

class ExercicioSimples {

public static void main(String[] args) {

int i = 10;double d = 5;char c = 't';boolean b = true;

// imprime concatenando diversas variáveisSystem.out.println("Resultado: " + i + ", " + d + ", " + c + ", " +b);

}}

Page 66: Fundamentos Java - 01

Instrutor Daniel Bernardo

Operadores Relacionais

• Os operadores relacionais são usados para comparar dois valores e determinar o relacionamento entre eles. A saída desta avaliação será fornecida com um valor lógico: true ou false.

– Analise Relacional.java

Page 67: Fundamentos Java - 01

Instrutor Daniel Bernardo

Operadores Lógicos And

• Operadores lógicos avaliam um ou mais operandos lógicos que geram um único valor final true ou false como resultado da expressão. São seis os operadores lógicos: && (e lógico), & (e binário), || (ou lógico), | (ou binário), ^(ou exclusivo binário) e ! (negação).

• Analise o programa LogicoAnd.java

Page 68: Fundamentos Java - 01

Instrutor Daniel Bernardo

Operadores Lógicos And

• && ou &

– Esses operadores lógicos tem a mesma função e funcionam de forma idêntica.

– Porém, o operador && é mais rápido que o &.

– Isso porque quando a primeira condição de uma expressão é falsa, o compilador nem analisa a segunda condição. Isso aumenta um pouco o desempenho do trecho do código.

– Já com o operador &, mesmo que a primeira condição seja falsa, o compilador ainda analisa a segunda. Diminuindo um pouco o desempenho.

– A opção para o uso de um ao invés do outro, depende da implementação que se está fazendo.

– O mesmo vale para || e |.

Page 69: Fundamentos Java - 01

Instrutor Daniel Bernardo

Operadores Lógicos Or

• Analise LogicoOu.java

Page 70: Fundamentos Java - 01

Instrutor Daniel Bernardo

Operadores LógicosOu Exclusivo Binário

• O resultado de uma expressão usando o operador ou exclusivo binário terá um valor true somente se uma das expressões for verdadeira e a outra falsa. Note que ambos os operandos são necessariamente avaliados pelo operador ^.

– Analise LogicoXou.java

Page 71: Fundamentos Java - 01

Instrutor Daniel Bernardo

Operadores Lógicos Negação

public class LogicoNao {

public static void main(String[] args) {boolean val1 = true;boolean val2 = false;System.out.println(!val1);System.out.println(!val2);

}}

Page 72: Fundamentos Java - 01

Instrutor Daniel Bernardo

Operador Condicional ou Ternário

• O operador condicional é também chamado de operador ternário. Isto significa que ele tem 3 argumentos que juntos formam uma única expressão condicional. A estrutura de uma expressão utilizando um operador condicional é a seguinte:

– exp1?exp2:exp3• Onde exp1 é uma expressão lógica que deve retornar true ou false. Se o

valor de exp1 for verdadeiro, então, o resultado será a expressão exp2, caso contrário, o resultado será exp3.

Page 73: Fundamentos Java - 01

Instrutor Daniel Bernardo

Operador Condicional ou Ternário

public class ConditionalOperator {public static void main( String[] args ){

String status = "";int grade = 80;//status do alunostatus = (grade >= 60)?"Passed":"Fail";//print statusSystem.out.println( status );

}}

Page 74: Fundamentos Java - 01

Instrutor Daniel Bernardo

Precedência de operadores

Page 75: Fundamentos Java - 01

Instrutor Daniel Bernardo

Precedência de operadores

• No caso de dois operadores com mesmo nível de precedência, terá prioridade o que estiver mais à esquerda da expressão. Dada uma expressão complexa como:

– 6%2*5+4/2+88-10

• O ideal seria fazer uso de parênteses para reescrevê-la de maneira mais clara:

– ((6%2)*5)+(4/2)+88-10

Page 76: Fundamentos Java - 01

Instrutor Daniel Bernardo

Controle de Fluxo

• O if• A sintaxe do if no Java é a seguinte:

if (condicaoBooleana) {

codigo;

}• Onde a codicaoBooleana seja qualquer expressão que retorne true e false.

Para isso pode usar operadores como >, <, >=, <=, ==, !=, etc.

int idade = 15;

if (idade < 18) {

System.out.println("Não pode entrar");

}

Page 77: Fundamentos Java - 01

Instrutor Daniel Bernardo

Controle de Fluxo

• Além disso, você pode usar a cláusula else para indicar o comportamento que deve ser executado no caso da expressão booleana ser falsa:

int idade = 15;

if (idade < 18) {

System.out.println(“Não pode entrar”);

} else {

System.out.println(“Pode entrar”);

}

Page 78: Fundamentos Java - 01

Instrutor Daniel Bernardo

Controle de Fluxo

• Operadores Lógicos– Você pode concatenar expressões booleanas através dos operadores

lógicos “E” e “OU”. O “E” é representado pelo & e o “OU” é representado pelo |.

int idade = 15;

boolean amigoDoDono = true;

if (idade < 18 & amigoDoDono == false) {

System.out.println(“Não pode entrar”);

} else {

System.out.println(“Pode entrar”);

}

Page 79: Fundamentos Java - 01

Instrutor Daniel Bernardo

Controle de Fluxo

• Operador de negação• Esse código poderia ainda ficar mais legível, utilizando-se o operador de

negação, o !. Esse operador transforma uma expressão booleana de false para true e vice versa.

int idade = 15;

boolean amigoDoDono = true;

if (idade < 18 & !amigoDoDono) {

System.out.println(“Não pode entrar”);

} else {

System.out.println(“Pode entrar”);

}

Page 80: Fundamentos Java - 01

Instrutor Daniel Bernardo

Controle de Fluxo

• Para comparar se uma variável tem o mesmo valor que outra variável ou valor, utilizamos o operador ==. Repare que utilizar o operador = vai retornar um erro de compilação, já que o operador = é o de atribuição.

int mes = 1;

if (mes == 1) {

System.out.println(“Você deveria estar de férias”);

}

Page 81: Fundamentos Java - 01

Instrutor Daniel Bernardo

Escopo de variáveis

• No Java, podemos declarar variáveis a qualquer momento. Porém, dependendo de onde você as declarou, ela vai valer de um determinado ponto a outro.

//aqui a variável i não existe

int i = 5;

// a partir daqui ela existe• O escopo da variável é o nome dado ao trecho de código em que aquela

variável existe e que é possível acessá-la.• Quando abrimos um novo bloco com as chaves, as variáveis declaradas ali

dentro só valem até o fim daquele bloco.

Page 82: Fundamentos Java - 01

Instrutor Daniel Bernardo

Escopo de variáveis

//aqui a variável i não existeint i = 5;// a partir daqui ela existeif (condicao) {// o i ainda vale aqui int j = 7;// o j passa a existir}// aqui o j não existe mais, mas o i continua a valer

• No bloco acima, a variável j pára de existir quando termina o bloco onde ela foi declarada. Se você tentar acessar uma variável fora de seu escopo, ocorrerá um erro de compilação.

Page 83: Fundamentos Java - 01

Instrutor Daniel Bernardo

Um bloco dentro de outro

If (condicao) {

If (condicao2) {

If (condicao3) {

}

}}

Page 84: Fundamentos Java - 01

Instrutor Daniel Bernardo

Exercícios

1. Ler dois valores inteiros (variáveis A e B) e efetuar as operações de adição, subtração, multiplicação e divisão de A por B, apresentando ao final os quatro resultados obtidos.

1. Utilize modo gráfico.

2. Valide os dados2. Crie um programa que leia um número e informe se ele é par ou ímpar.3. Tendo como dados de entrada a altura (em metros) e o sexo de uma

pessoa construa uma classe que calcule o peso ideal, utilizando as seguintes fórmulas:

1. para homens: (72.7 * h) - 58;

2. para mulheres: (62.1 * h) - 44.7.

Page 85: Fundamentos Java - 01

Instrutor Daniel Bernardo

Exercícios

1. Calcula a média de um acadêmico e define sua situação:

1. aprovado 7.0

2. reprovado 5.0

3. em exame. 2. Escreva um programa que lê tres inteiros digitados pelo usuário e exiba a

soma, a média, o produto o maior e o menor desses números. O resultado da média deve ser um inteiro.

3. Desenvolva uma classe que receba dois números e um sinal de operação ( + - * / ) e mostre o resultado da operação informada, por exemplo: - Se for informado 10 3 * o resultado deve ser 30. - Se for informado 10 3 + o resultado deve ser 13. - Se for informado 10 3 - o resultado deve ser 9. - Se for informado 10 3 / o resultado deve ser 3.

Page 86: Fundamentos Java - 01

Instrutor Daniel Bernardo

• Crie um programa que compare dois números digitados e informe se os números são iguais, diferentes e menor, maior, menor ou igual ou maior igual.

Page 87: Fundamentos Java - 01

Instrutor Daniel Bernardo

Controle de Fluxo

• Switch case

– Outra maneira de indicar uma condição é através de uma declaração switch. A construção switch permite que uma única variável inteira tenha múltiplas possibilidades de finalização.

switch(expressão*){

Case argumento**: bloco de código;

break;

default: bloco de código;

}

Page 88: Fundamentos Java - 01

Instrutor Daniel Bernardo

Controle de fluxo

• variável_inteira é uma variável de tipo byte, short, char ou int. • Expressao* são valores constantes que esta variável pode assumir

• Quando a declaração switch é encontrada, o fluxo de controle avalia inicialmente a variável_inteira e segue para o case que possui o valor igual ao da variável. O programa executa todas instruções a partir deste ponto, mesmo as do próximo case, até encontrar uma instrução break, que interromperá a execução do switch.

• Se nenhum dos valores case for satisfeito, o bloco default será executado. Este é um bloco opcional. O bloco default não é obrigatório na declaração switch.

Page 89: Fundamentos Java - 01

Instrutor Daniel Bernardo

Controle de fluxo

publicString tipoCombustivel(chartipo) {

switch(tipo) {

case'A': return"Alcool";

case'G': return"Gasolina";

case'D': return"Diesel";

case'X': return"Flex";

case'T': return"GNV";

default: return"";

}}

Page 90: Fundamentos Java - 01

Instrutor Daniel Bernardo

Exercício

• Ler um valor inteiro que representa o mês de uma data e apresentar o nome do mês (janeiro, fevereiro, ...).

Page 91: Fundamentos Java - 01

Instrutor Daniel Bernardo

Estrutura de repetição - While

• O loop while será adequado em cenários nos quais você não souber quantas vezes o bloco ou instrução terá que ser repetido, mas quiser que sua execução continue até que alguma condição seja verdadeira.

• A declaração while executa repetidas vezes um bloco de instruções enquanto uma determinada condição lógica for verdadeira.

• A declaração while possui a seguinte forma:

while (expressão_lógica) {

instrução1;

instrução2;

...

}

Page 92: Fundamentos Java - 01

Instrutor Daniel Bernardo

Estrutura de repetição - While

• Como em todos os loops, a expressão (teste) terá que resultar em um valor booleano. O corpo só será executado se a condição for true. Uma vez que entramos no loop, seu conteúdo será repetido até que a condição não possa mais ser atendida e seja avaliada como false.

• Qualquer variável usada na expressão de um loop while deve ser declarada antes da expressão ser avaliada. Uso incorreto:

– While (int x = 2) //inválido• Isso porque você estaria declarando e inicializando-a, portanto teria sempre

o mesmo valor.• Um laço while pode nem ser executado se a expressão do teste for false.

Page 93: Fundamentos Java - 01

Instrutor Daniel Bernardo

Estrutura de repetição – Do While

• A declaração do-while é similar ao while, exceto pelo fato de que a expressão não é avaliada até que o código do loop do tenha sido executado. Portanto é garantido que o código dentro de um loop do será executado pelo menos uma vez.

• A declaração do-while possui a seguinte forma:

do {

instrução1;

instrução2;

...

} while (expressão_lógica);

Page 94: Fundamentos Java - 01

Instrutor Daniel Bernardo

Estrutura de repetição - For

• O loop for básico• O loop for será particularmente util para o controle do fluxo quando voce já

souber quantas svezes terá que executar as instrucoes do bloco do loop.• A declaração for possui três partes principais:

– Declaração e inicialização de variáveis

– Expressão booleana

– Expressão de iteração• Cada uma das três partes da declaração do loop for é separada por um

ponto e vírgula.

Page 95: Fundamentos Java - 01

Instrutor Daniel Bernardo

Estrutura de repetição - For

• A primeira parte da instrução for permite que você declare e inicialize nenhuma, uma ou diversas variáveis do mesmo tipo. Se você declara mais de uma variável do mesmo tipo, terá que separá-las com vírgulas.

• A declaração e inicialização ocorrem antes de qualquer outra coisa em um loop for. e são executadas apenas uma vez durante a execução do laço.

for (inicialização; condição; iteração) {

instrução1;

}

Page 96: Fundamentos Java - 01

Instrutor Daniel Bernardo

Estrutura de repetição - For

• A expressão condicional• A próxima seção a ser executada será a expressão condicional, que terá

que resultar num valor booleano.• Deve ter apenas uma expressão lógica, que pode ser bem complexa.• Iteração• É a parte que você poderá informar o que deseja que aconteça a cada

iteração do loop.• Características: nenhuma das seções explicadas são obrigatórias:

– for ( ; ; ) {

– }• Porém o código acima resulta em um loop infinito.

Page 97: Fundamentos Java - 01

Instrutor Daniel Bernardo

Estrutura de repetição - For

Int i = 0;

for ( ; i < 10 ; ) {

i++;

}• O código acima funciona com um while.• As variáveis declaradas na primeira seção do for, terão seu escopo definido

no bloco for, ou seja, seu tempo de vida se resumirá entre as chaves da declaração for.

Page 98: Fundamentos Java - 01

Instrutor Daniel Bernardo

Exercicio

• Imprima todos os números de 150 a 300.• Imprima a soma de 1 até 1000.• Imprima todos os múltiplos de 3, entre 1 e 100.• Imprima os fatoriais de 1 a 10.• Escreva um programa que, dada uma variável x (com valor 180, por

exemplo), temos y de acordo com a seguinte regra: se x é par, y = x / 2 se x é impar, y = 3 * x + 1 imprime y

• O programa deve então jogar o valor de y em x e continuar até que y tenha o valor final de 1. Por exemplo, para x = 13, a saída será:

• 40 > 20 > 10 > 5 > 16 > 8 > 4 > 2 > 1

Page 99: Fundamentos Java - 01

Instrutor Daniel Bernardo

Estrutura de interrupção - break

• Apesar de termos condições booleanas nos nossos laços, em algum momento podemos decidir parar o loop por algum motivo especial, sem que o resto do laço seja executado.for (int i = x; i < y; i++) {

if (i % 19 == 0) {

System.out.println("Achei um número divisível por 19 entre x e y");

break;

}

}• O código acima vai percorrer os números de x a y e parar quando encontrar

um número divisível por 19, uma vez que foi utilizada a palavra chave break.

Page 100: Fundamentos Java - 01

Instrutor Daniel Bernardo

Estrutura de interrupção - continue

• Da mesma maneira, é possível obrigar o loop a executar o próximo laço. Para isso usamos a palavra chave continue.

for (int i = 0; i < 100; i++) {if(i > 50 && i < 60) {

continue;}System.out.println(i);

}

Page 101: Fundamentos Java - 01

Instrutor Daniel Bernardo

Estrutura de interrupção – return

• A declaração return é utilizada para sair de um método. O fluxo de controle retorna para a declaração que segue a chamada do método original. A declaração de retorno possui dois modos: o que retorna um valor e o que não retorna nada.

• Para retornar um valor, escreva o valor (ou uma expressão que calcula este valor) depois da palavra chave return. Por exemplo:

– return ++count;

– return "Hello";• Os dados são processados e o valor é devolvido de acordo com o tipo de

dado do método.• Quando um método não tem valor de retorno, deve ser declarado como

void. Use a forma de return que não devolve um valor. Por exemplo:

– return;

Page 102: Fundamentos Java - 01

Instrutor Daniel Bernardo

Exercícios

• Crie um programa que mostre seu nome cem vezes. Faça três versões deste programa:

– 1. Use uma declaração while para resolver este problema

– 2. Use uma declaração do-while para resolver este problema

– 3. Use uma declaração for para resolver este problema• Apresenta a tabuada de um número inteiro qualquer. Solicite ao usuário um

número. Para encerrar o programa solicite que digite -1;• Apresentar os quadrados dos números inteiros de 15 a 35. Use for.• Apresentar a soma de todos os números divisíveis por 4 entre 40 e 200.

Use while.• Fatorial de um número (ex. 5! = 5 * 4 * 3 * 2 * 1). • A série de Fibonacci é formada pela seqüência: 1, 1, 2, 3, 5, 8, 13, 21, etc.

Escreva uma classe que gere a série até o vigésimo termo.

Page 103: Fundamentos Java - 01

Instrutor Daniel Bernardo

Exercícios

• Fulano aplicou R$ 100,00 com rendimento de 5% ao mês. Quantos meses serão necessários para o capital investido ultrapasse a R$ 200,00.

• Escreva uma classe que imprima todas as possibilidades de que no lançamento de dois dados tenhamos o valor 7 como resultado da soma dos valores de cada dado.

• Um número natural e triangular é produto de três números naturais consecutivos. Por exemplo: 120 é triangular, pois 4*5*6 = 120. Escreva uma classe que apresente todos os números triangulares entre 100 e 1000.