2. 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
3. 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
4. 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
5. 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)
6. 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
7. 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
8. 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)
9. 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.
10. 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.
11. 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
13. 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.
14. 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).
15. 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
17. 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
18. 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.
19. 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.
20. 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
21. 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.
22. 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
23. 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!
25. 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.
26. 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
27. 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!!!
28. 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.
29. 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.
30. 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.
31. 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;
33. 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.
34. 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[ ]
35. 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).
36. 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");
}
37. 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
38. 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.
39. 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.
40. 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.
42. 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.
43. 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
44. 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;
45. 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;
46. 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
47. 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
48. 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);
49. 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
50. 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';
51. 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");
52. 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.
53. 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.
54. 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.
55. Instrutor Daniel Bernardo
Conversões
• Como foi 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;
56. 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
57. 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.
58. 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,...
59. 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.
60. 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++;
62. 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
63. 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.
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.
64. 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.
65. 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áveis
System.out.println("Resultado: " + i + ", " + d + ", " + c + ", " +
b);
}
}
66. 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
67. 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
68. 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 |.
70. Instrutor Daniel Bernardo
Operadores Lógicos
Ou 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
71. 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);
}
}
72. 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.
73. Instrutor Daniel Bernardo
Operador Condicional ou Ternário
public class ConditionalOperator {
public static void main( String[] args ){
String status = "";
int grade = 80;
//status do aluno
status = (grade >= 60)?"Passed":"Fail";
//print status
System.out.println( status );
}
}
75. 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
76. 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");
}
77. 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”);
}
78. 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”);
}
79. 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”);
}
80. 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”);
}
81. 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.
82. Instrutor Daniel Bernardo
Escopo de variáveis
//aqui a variável i não existe
int i = 5;
// a partir daqui ela existe
if (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.
84. Instrutor Daniel Bernardo
Exercícios
1. Crie um programa que declara uma variavel do tipo int e informe se ele é
par ou ímpar.
2. Calcular a média de um acadêmico e define sua situação:
1.aprovado maior ou igual a 7.0
2.reprovado menor ou igual a 5.0
3.em exame.
3. 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.
85. 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.
86. 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;
}
87. 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.
90. 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;
...
}
91. 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.
92. 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);
93. 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.
94. 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;
}
95. 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.
96. 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.
97. 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
98. 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.
99. 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);
}
100. 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;
101. 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.
102. 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.