1 - WordPress.com

Propaganda
FACULDADES INTEGRADAS CAMPO-GRANDENSES
JAVA
Professora: Adriana Silva
A HISTÓRIA DA LINGUAGEM JAVA
(Extraído do Livro: JAVA – Como Programar)
Talvez a contribuição mais importante da revolução dos microprocessadores
até esta data seja o fato de ela ter possibilitado o desenvolvimento de computadores
pessoais, que agora chegam a centenas de milhões em todo o mundo.
Os computadores pessoais tiveram um profundo impacto sobre as pessoas e a
maneira como as organizações conduzem e gerenciam seus negócios. Muitas
pessoas acreditam que a próxima área importante em que os microprocessadores
terão um impacto profundo serão os dispositivos eletrônicos inteligentes destinados ao
consumidor final. Reconhecendo isso, a Sun Microsystems financiou uma pesquisa
corporativa interna com o codinome Green em 1991. 0 projeto resultou no
desenvolvimento de uma linguagem baseada em C e C++ que seu criador, James
Gosling, chamou de Oak (carvalho) em homenagem a uma árvore que dava para a
janela do seu escritório na Sun. Descobriu-se mais tarde que já havia uma linguagem
de computador chamada Oak. Quando uma equipe da Sun visitou uma cafeteria local,
o nome Java (cidade de origem de um tipo de café importado) foi sugerido e pegou.
Mas o projeto Green atravessava algumas dificuldades. O mercado para
dispositivos eletrônicos inteligentes destinados ao consumidor final não estava se
desenvolvendo tão rapidamente como a Sun tinha previsto. Pior ainda, um contrato
importante pelo qual a Sun competia fora concedido a outra empresa. Então, o projeto
estava em risco de cancelamento. Por pura sorte, a World Wide Web explodiu em
popularidade em 1993 e as pessoas da Sun viram o imediato potencial de utilizar Java
para criar páginas da Web com o chamado conteúdo dinâmico. Isso deu nova vida ao
projeto.
Em maio de 1995, a Sun anunciou Java formalmente em uma conferência
importante. Normalmente, um evento como esse não teria gerado muita atenção.
Entretanto, Java gerou interesse imediato na comunidade comercial por causa do
fenomenal interesse pela World Wide Web. Java é agora utilizada para criar páginas
da Web com conteúdo interativo e dinâmico, para desenvolver aplicativos corporativos
de grande porte, para aprimorar a funcionalidade de servidores da World Wide Web
(os computadores que fornecem o conteúdo que vemos em nossos navegadores da
Web), fornecer aplicativos para dispositivos destinados ao consumidor final (como
telefones celulares, pagers e assistentes pessoais digitais) e para muitas outras
finalidades.
CARACTERÍSTICAS:
 Orientada a objetos
 Simples e robusta: Aperfeiçoamento do C++; Trata obrigatoriamente
exceções e o gerenciamento automático de memória.
 Gerenciamento de memória: gerencia o processo de alocação e liberação da
memória.
 Independência da plataforma: Roda em qualquer Sistema Operacional
devido a Máquina Virtual Java.
PLATAFORMAS JAVA:
 Java 2 Standard Edition (J2SE): Suficiente para aplicação desktop com ou sem
interface gráfica.
 Java 2 Enterprise Edition (J2EE): Desenvolvimento de aplicações distribuídas.
 Java 3 Micro Edition (J2NE): Desenvolvimento de aplicações para aparelhos
portáteis.
JAVA 2 SYSTEM DEVELOPMENT KIT (J2DK)
Produto utilizado pelo Sun que implementa J2SE. Consiste em:
 JRE (Java Runtime Envoirement): ambiente para execução de aplicações.
 Ferramentas para desenvolvimento: compilador, debugger, empacotador JAR,
etc.
 Conjunto de API’s e código fonte das classes.
A MÁQUINA VIRTUAL JAVA
O JRE é um conjunto de programas que possibilita execução de aplicações Java.
O coração do JRE é a Máquina Virtual Java ou Java Machine (JVM) que favorece
a portabilidade do código.
ESQUEMA DE COMPLILAÇÃO E EXECUÇÃO DE UM PROGRAMA EM JAVA
PROGRAMA JAVA - Características / Observações
 Salvar o código com extensão .java
 Quando compilado será gerado no mínimo um .class para cada .java
existente
 Java é Case-Sensitive
 Comentários
//uma linha
/* várias
linhas */
 Possui conversões entre programadores.
Ex.: CONSTANTES (MAIÚSCULO)
variáveis (minúsculo)
Classes (1.ª Letra Maiúscula)
1
Palavras Reservadas em Java / Tipos de Dados
Toda linguagem de programação possui palavras que são reservadas, ou seja,
não podem ser utilizadas como nomes de variáveis, classes, etc.
Verifique as palavras reservadas em Java:
Palavra
Reservada
Descrição
public
Comando para criar classes ou membros públicos.
private
Comando para criar classes ou membros privados.
protected
Comando para criar classes ou membros protegidos.
static
Comando para criação de classes ou membros estáticos.
abstract
Comando para criação de classes abstratas.
final
Comando para determinação de tipo de dados
strictfp
Comando para determinação de tipo de dados
transient
Comando para determinação de tipo de dados
synchronized Comando para determinação de tipo de dados
native
Comando para determinação de tipo de dados
void
Comando identificando que o método não retornará valor.
class
Comando para definição de uma classe.
interface
Comando para identificar uma classe contendo apenas as assinaturas de
métodos que serão implementados por outra classe.
implements
Comando utilizado para implementar método de outras classes
extends
Comando para aplicar o conceito de herança.
if
Comando de Decisão
else
Comando de Decisão
do
Comando de Repetição
default
Comando auxiliar do comando switch
swith
Comando de Decisão
case
Comando de Decisão
break
Comando para parar o processamento
continue
Comando para continuar o processamento
goto
Comando de desvio (não aconselhável)
throws
Comando que define o aguardo de uma determinada exceção
new
Comando para instanciar objetos de uma determinada classe
catch
Comando para tratamento de exceções
try
Comando para tratamento de exceções
finally
Comando para definir quando finalizar o comando try... catch...
return
Comando para retornar valores
this
Comando para referenciar métodos ou atributos da própria classe
package
Comando para definir pacotes
import
Comando para importar pacotes ou classes
2
instaceof
Comando para teste de instância de classes
while
Comando de Repetição
for
Comando de Repetição
volatile
Comando para determinação de tipo de dados
Super
Comando que se aplica o conceito de herança
Tipos de Dados em Java – Descrição
Tipo
Descrição
boolean Pode assumir o valor true ou o valor false
char
Caractere em notação Unicode de 16 bits. Serve para a armazenagem de
dados alfanuméricos. Também pode ser usado como um dado inteiro com
valores na faixa entre 0 e 65535.
byte
Inteiro de 8 bits. Pode assumir valores entre -128 e 127.
short
Inteiro de 16 bits. Os valores possíveis cobrem a faixa de -32.768 e 32.767.
int
Inteiro de 32 bits. Pode assumir valores entre -2.147.483.648 e 147.483.647.
long
Inteiro de 64 bits. Pode assumir valores entre -2e63 e 2e63-1.
float
Representa números em notação de ponto flutuante. O menor valor positivo
representável por esse tipo é 1.40239846e-46 e o maior é 3.40282347e+38.
bouble
Também representa números em notação de ponto flutuante. O menor valor
positivo representável é 4.94065645841246544e-324 e o maior é
1.7976931348623157e+308.
Tipos primitivos, limites de representação e constantes
Tipo
Tam
primitivo
Mínimo
Máximo
Exemplos de Constantes
boolean
1 bit
-
-
true, false
char
16
bits
Unicode 0
Unicode 65.535
'a' (letra a)
byte
8 bits -128
+127
97, -23 0x65 (hexadecimal)
short
16
bits
-215 (-32.768)
+215-1(32.767)
17569, -21875
int
32
bits
-231
(uns -2 bi)
+231-1
(uns 2 bi)
1876345240, -2000000000
long
64
bits
-263
(uns -9 quintilhões)
+263-1
(uns 9 quintilhões)
123981723971982318273L,
-12381726387613678688L,
97L, -23L, 0L
float
32
bits
aprox -1038
(6-7 dígitos
significativos)
aprox +1038 (6-7
dígitos significativos)
-3.4F
45.78E+23F
double
64
bits
aprox -10308 (15
aprox +10308 (15
dígitos significativos) dígitos significativos)
void
indica ausência de tipo (quando um "método" nada retorna)
-3.4
45.78E+23
3
Hello Word
Um exemplo simples para um primeiro programa em Java.
public class HelloWorld{
public static void main(String Args[]){
System.out.println(“Hello World”);
}
}
Digite o código acima no bloco de notas e salve o documento com o nome
HelloWorld.java. No Prompt de Comando acesse o diretório onde o arquivo foi salvo e
digite javac HelloWorld.java para compilar o programa. Em seguida, execute o
programa digitando java HelloWorld.
Operadores
Operadores matemáticos







+ (soma)
- (subtração)
* (multiplicação)
/ (divisão)
% (módulo)
Há operadores unários - e +
Operadores binários podem ser seguidos de =, tal como na seguinte
expressão:
soma += nota*peso; // equivalente a soma = soma + nota*peso
Operador de String

+ (overload do operador par concatenar strings)
Operadores de auto-incremento e auto-decremento
númeroDeAlunos++;
// equivalente a númeroDeAlunos = númeroDeAlunos + 1
númeroDeAlunos--;
// equivalente a númeroDeAlunos = númeroDeAlunos – 1
if(númeroDeAlunos-- > 0)
// equivalente a testar númeroDeAlunos e depois decrementar
if(--númeroDeAlunos > 0)
// equivalente a decrementar e depois testar númeroDeAlunos
4
Operadores relacionais






< (menor)
<= (menor ou igual)
> (maior)
>= (maior ou igual)
== (igual)
!= (não igual)
Operadores lógicos



&& (AND)
|| (OR)
! (NOT)
Exemplos:
if(númeroDeAlunos > MAX_ALUNOS || númeroDeProfessores > MAX_PROFS) ...
if(ano % 4 == 0 && ano % 100 != 0 || ano % 400 == 0) ... // ano bissexto
Operador ternário

Para escrever uma operação condicional sem usar if-else
Exemplo:
// a linha seguinte
média = númeroDeNotas == 0 ? 0.0 : soma/númeroDeNotas;
// é equivalente às linhas seguintes
if(númeroDeNotas == 0) {
média = 0.0;
} else {
média = soma/númeroDeNotas;
}
5
PROGRAMAS EXEMPLOS:
1) Entrada de dados, tipos básicos, variáveis, decisões simples
Ler 3 números inteiros da entrada, imprimir o menor e o maior.
package p2.exemplos;
import java.util.Scanner;
/*
* "Ler 3 números inteiros da entrada, imprimir o menor e o maior"
*
* Autor: Jacques Sauvé
*/
public class MinMax1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n1, n2, n3;
System.out.print("Entre com o primeiro inteiro: ");
n1 = sc.nextInt();
System.out.print("Entre com o segundo inteiro: ");
n2 = sc.nextInt();
System.out.print("Entre com o terceiro inteiro: ");
n3 = sc.nextInt();
if (n1 > n2) {
if (n1 > n3) {
if (n2 < n3) {
System.out.println("O menor numero eh: " + n2);
} else {
System.out.println("O menor numero eh: " + n3);
}
System.out.println("O maior numero eh: " + n1);
} else {
if (n1 < n2) {
System.out.println("O menor numero eh: " + n1);
} else {
System.out.println("O menor numero eh: " + n2);
}
System.out.println("O maior numero eh: " + n3);
}
} else {
if (n2 > n3) {
if (n1 < n3) {
System.out.println("O menor numero eh: " + n1);
} else {
System.out.println("O menor numero eh: " + n3);
}
System.out.println("O maior numero eh: " + n2);
} else {
if (n1 < n2) {
System.out.println("O menor numero eh: " + n1);
} else {
System.out.println("O menor numero eh: " + n2);
6
}
System.out.println("O maior numero eh: " + n3);
}
}
}
}
Uma saída típica:
Entre com o primeiro inteiro: 3
Entre com o segundo inteiro: 9
Entre com o terceiro inteiro: 123
O menor numero eh: 3
O maior numero eh: 123
A linha import java.util.Scanner; é usada para dizer ao Java que usaremos
alguma coisa externa ao nosso programa (a "classe" Scanner)
A linha Scanner sc = new Scanner(System.in); cria um "Scanner" que é
usado para ler dados da entrada
A linha n1 = sc.nextInt(); lê um inteiro da entrada
Poderíamos substituí-la por: int n1 = sc.nextInt();
Outra solução para o programa acima:
package p2.exemplos;
import java.util.Scanner;
/*
* "Ler 3 números inteiros da entrada, imprimir o menor e o maior"
*
* Autor: Jacques Sauvé
*/
public class MinMax2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n1, n2, n3;
System.out.print("Entre com o primeiro inteiro: ");
n1 = sc.nextInt();
System.out.print("Entre com o segundo inteiro: ");
n2 = sc.nextInt();
System.out.print("Entre com o terceiro inteiro: ");
n3 = sc.nextInt();
int mínimo;
int máximo;
if (n1 > n2) {
7
if (n1 > n3) {
if (n2 < n3) {
mínimo = n2;
} else {
mínimo = n3;
}
máximo = n1;
} else {
if (n1 < n2) {
mínimo = n1;
} else {
mínimo = n2;
}
máximo = n3;
}
} else {
if (n2 > n3) {
if (n1 < n3) {
mínimo = n1;
} else {
mínimo = n3;
}
máximo = n2;
} else {
if (n1 < n2) {
mínimo = n1;
} else {
mínimo = n3;
}
máximo = n3;
}
}
System.out.println("O menor numero eh: " + mínimo);
System.out.println("O maior numero eh: " + máximo);
}
}
Estrutura básica de um programa em JAVA
O desenvolvimento de aplicações Java sempre é feito através de classes. A
definição de uma classe Java deve respeitar a seguinte sintaxe:
<modificador de acesso> class <nome da classe>
{
<Declaração das Variáveis de Instância (Atributos)>
<Declaração de Métodos>
public static void main( String args[] )
{
//corpo principal do programa
}
}
8
Membros de uma Classe
As variáveis de instância formam os atributos de um objeto e, juntamente com
os métodos, são os elementos básicos para a formação de uma classe. Eles são
denominados membros da classe.
Os atributos são espaços em memória reservados para armazenar informações
durante a execução da classe. Eles constituem o estado interno de um objeto. Os
atributos são inicializados no início da execução da classe e ficam disponíveis para
utilização por todos os seus métodos. Os métodos por sua vez definem as operações
que podem ser realizadas pela classe.
O Método Main
Uma aplicação em Java é caracterizada por possuir o método main(). A
declaração do método deve ser : public static void main( String[] args ).
O método main é um método especial pois representa o ponto de entrada para
a execução de um programa em Java. Quando um programa é executado, o
interpretador chamará primeiramente o método main da classe. É ele quem controla o
fluxo de execução do programa e executa qualquer outro método necessário para a
funcionalidade da aplicação.
Nem toda classe terá um método main. Uma classe que não possui um método
main não pode ser “executada” pois não representa um programa em Java. Ela será
sim, utilizada como classe utilitária para a construção de outras classes ou mesmo de
um programa.
Modificadores de Acesso
A declaração de uma classe geralmente começa com o modificador de acesso
public, o que significa que pode ser acessada por qualquer outra classe. Se for
omitido, a classe será visível apenas por outras classes do mesmo pacote que a
contém.
Outros modificadores de acesso são: private, protected, etc.
Entrada de Dados
A classe Scanner possui os seguintes métodos para leitura:
 String nome = entrada.next(); lê uma String
 byte num = entrada.nextByte(); lê um byte
 short num = entrada.nextShort(); lê um short
 int num = entrada.nextInt(); lê um int
 long num = entrada.nextLong(); lê um long
 float num = entrada.nextFloat(); lê um float
 double num = entrada.nextDouble(); lê um double dentre outros
Exemplo:
// Programa Programa.java
import java.util.Scanner;
public class Programa {
public static void main (String args[]) {
Scanner entrada = new Scanner(System.in); //criação de
um novo Scanner para utilização
System.out.println(“Entre com o primeiro numero: ”);
9
int num1 = entrada.nextInt();
System.out.println(“Entre com o segundo numero: ”);
int num2 = entrada.nextInt();
System.out.println(“A soma e “ + (num1+num2));
} // fim do método main
} // fim da classe Programa
Controle de Fluxo
A maioria dos programas tomam decisões que afetam seu fluxo. Os comandos
que tomam essas decisões são chamados de comandos de controle.
1) Comando if – else
Sintaxe :
if ( boolean_expr )
comando1;
[else
comando2;]
Exemplo :
if ( fim = = true )
System.out.println(“Término!”);
else
System.out.println(“Continuando...”);
Para mais de um comando ser executado depois da declaração, utiliza-se o
conceito de blocos, delimitados por { }.
Exemplo:
if ( fim = = false ) && (cont > 0){
cont ++;
System.out.println(“Continuando...”);
}
else {
cont = 0;
System.out.println(“Término!”);
}
É recomendado sempre usar blocos de comandos para facilitar a leitura e
compreensão do código.
É possível também criar comandos if aninhados.
Exemplo :
if ( fim = = false) && (cont < 0){
cont++;
}
else if (fim = = false) && (cont > 0){
cont--;
}
else {
cont = 0;
System.out.println(“Término!!”);
}
10
2) Comando Switch
Utilizamos o comando switch para avaliar uma expressão contra vários
resultados possíveis. Aceita somente um char, byte, short ou int como sua expressão
de comparação. O valor é procurado nas declarações case que vem depois da
declaração switch e o código adequado é executado.
Sintaxe :
switch ( expressão ) {
case constant1 : comando1; break;
case constant2 : comando2; break;
...
[default : comando_default;]
}
Exemplos :
switch ( cmd ){
case 0: System.out.println(“Item do menu 1”);
menu = ++cmd;
break;
case 1: System.out.println(“Item do menu 2”);
menu = ++cmd;
break;
case 2: System.out.println(“Item do menu 3”);
menu = ++cmd;
break;
default: System.out.println(“Comando invalido!”);
}
3) Comando while
Implementa um loop para executar um bloco de comandos sucessivas vezes. A
expressão de comparação é avaliada antes que o laço seja executado.
Sintaxe :
while ( boolean_expr ) {
comandos;
}
4) Comando do - while
Utilizado quando se quer que o corpo do laço seja necessariamente executado
pelo menos uma vez A expressão de comparação é avaliada depois que o laço for
executado.
Sintaxe:
do {
comandos;
} while ( boolean_expr );
5) Comando for
11
Comumente, um loop for possui uma parte inicial com a inicialização das
variáveis, seguida por uma expressão de comparação e depois a parte final com o
incremento ou decremento das variáveis do laço.
Sintaxe :
for ( inicialização; condição; iteração ) {
comandos;
}


Pode-se declarar variáveis na inicialização do for.
for (int i = 0; i<10; i++)
comando
O único elemento realmente imprescindível é a condição. É possível construir
laços for sem a inicialização e/ou o incremento.
int 1 = 2;
for ( ; i<10 ; ){
comandos;
i++;
}

A inicialização e incremento podem ser feitos com mais de uma variável. Neste
caso devem estar separados por vírgula.
for ( i = 0, j = 10 ; i < 8 && j > 2 ; i ++, j-- )
comando;
6)Comando break
O break é utilizado para transferir o controle para o final de uma construção de
laço (for, do-while, while) ou de um switch. O laço vai encerrar independentemente de
seu valor de comparação e o comando após ele será executado. Exemplo:
int i = 0;
while (true) {
System.out.println(i);
i++;
if ( i > 10 ) break;
}
7) Comando continue
Quando o comando continue é encontrado (somente dentro de um laço), ele
pára a execução naquele ponto e a transfere de volta para o início do laço para dar
início a uma nova iteração.
Exemplo :
for (int i = -10; i<10; i++)
{
if ( i = = 0 )
continue;
System.out.println(1/i); //Não deve ser executado o cálculo 1/0 !!
}
12
EXERCÍCIOS
1 – Identifique e corrija os erros dos códigos abaixo:
2 – Obtenha do usuário três notas de exame e calcule a média dessas notas.
Reproduza a média dos três exames. Junto com a média, mostre também um :-)
no resultado se a média for maior ou igual a 60; caso contrário mostre :-(. Use a
classe Scanner para obter as notas do usuário e System.out para mostrar o
resultado.
3 – Exercício Desafio - Determine o número de dias num mês. Você deve usar
um comando switch para apresentar um inteiro com o número de dias no mês
especificado. Por enquanto adicione todo o código no método main().
a) Declare três inteiros, um para manipular os dias (1-31), outro os meses (1-12) e
um terceiro para manipular o ano. Inicialize estas variáveis com um dia da sua
escolha.
b) Imprima a data no formato dd/mm/yyyy.
c) Declare uma variável para armazenar o número de dias que contém o mês
escolhido. Então, usando o comando switch, determine o valor para esta variável. São
30 dias em Abril, Setembro, Junho e Novembro e 31 nos restantes exceto para
Fevereiro que tem 28 (ignore o ano bissexto).
Experimente executar o programa com diferentes valores para o mês. O que acontece
se ele for executado com um mês inválido como 13? Para 27 de Janeiro de 2010 a
saída deve ser algo como:
27/1/2010
31 dias no mês
3 – Use um laço for para mostrar datas.
a) Usando um laço for, estenda seu programa de forma que ele imprima todas as
datas entre a que você especificou até o final daquele mês. Para 27/1/2010, a saída
deve ser:
13
27/1/2010
28/1/2010
29/1/2010
30/1/2010
31/1/2010
b) Teste o programa para verificar se ele está funcionando corretamente com
várias datas diferentes.
c) Agora o modifique para que ele imprima no máximo 10 datas. Por exemplo, se a
data for 19/1/2010 o programa deve imprimir apenas as datas 19/1/2010 até
28/1/2010. Já se a data for 30/1/2010, deverá ser impresso apenas
30/1/2010 e 31/1/2010.
d) Compile seu programa, corrija os erros se ocorrer algum, e teste com pelo
menos 3 datas para ter certeza que está funcionando corretamente.
4 – Considere que a data que você escolheu é a data de empréstimo de uma
mercadoria e que é necessário saber qual a data de devolução da mesma. A data
de devolução é a data atual mais 3 dias.
a) Declare três variáveis para controlarem o dia , mês e ano da data de devolução e
uma outra com a quantidade de dias de empréstimo (inicializada com 3).
b) Crie o código para calcular a adição do tempo de empréstimo com a data escolhida.
A saída deve se assemelhar a algo como:
Data do Empréstimo : 27/2/2010
Número de Dias : 3
Data da Devolução : 2/3/2010
Preste atenção na saída acima. A soma de três dias na data de empréstimo resultou
na passagem de um mês para outro. Além disso, como o ano 2010 não é bissexto e o
mês de empréstimo foi fevereiro, ao somar-se 3 dias os dias que se passaram foram :
28/2 – 1/2 – 2/3 . Você deve estar atento também para:
 Se o empréstimo passar de um mês para outro o mês deve ser incrementado
 Se o empréstimo passar de um ano para outro o ano dever ser incrementado
14
Download