Java

Propaganda
Introdução a Linguagem Java
Alcione Benacchio
Bibliografia

Java: Como Programar


Harvey M. Deitel - Paul J. Deitel
Java: O Guia Essencial

Deivid Flanagan
Tecnologia Java

A tecnologia Java foi lançada em 1995, e desde então tem crescido
em popularidade e se tornado uma plataforma muito estável e
madura.

Ela é composta por uma gama de produtos, baseados na
abrangência da internet e na idéia de que um software deveria ser
capaz de rodar em diferentes máquinas, sistemas e dispositivos.

Estes dispositivos podem ser computadores, servidores, notebooks,
handhelds, PDAs(Palm), celulares, TVs, geladeiras, entre outros.

Os programas feitos em Java rodam em diferentes ambientes graças
a um componente da plataforma chamado JVM (Java Virtual
Machine) – que é um tipo de tradutor de código Java para instruções
específicas de cada sistema e dispositivo.
3
Tecnologia Java

A Tecnologia Java é basicamente dividida em:
 JSE – Java Standard Edition
 JEE – Java Enterprise Edition
 JME – Java Micro Edition

A tecnologia Java não é um produto, mas sim uma
especificação definida pela Sun (www.java.sun.com).

Java é:
 uma completa plataforma de soluções para tecnologia
 um ambiente de desenvolvimento
 uma linguagem de programação
4
JSE - Java Standard Edition

JSE permite o desenvolvimento de aplicações Java para
desktop ou cliente/servidor.

É composta por:
 JRE: provê a API Java, a Java Virtual Machine e outros
componentes necessários para rodar aplicações escritas na
Linguagem Java.
 JDK: contém tudo o que há na JRE além de ferramentas
como compiladores e debugadores necessários para
desenvolver as aplicações.

A versão mais recente é a JSE 6.

Download: http://java.sun.com/javase/downloads/index.jsp,
link JDK 6.
5
JEEe JME

JEE: é o padrão para desenvolvimento de sistemas
corporativos, voltada para aplicações multi-camadas,
baseadas em componentes executados em servidores de
aplicações. Contém bibliotecas para acesso a base de dados,
RPC, CORBA, entre outras.

JME: é o padrão aplicado a dispositivos compactos, como
celulares, PDAs, controles remotos, e uma gama de
dispositivos. Permite o desenvolvimento de software
embarcados, ou seja, aplicações que rodam em um dispositivo
de propósito específico, desempenhando alguma tarefa que
seja útil para o dispositivo.
6
IDEs

IDEs para o desenvolvimento em Java:

Eclipse 3.2.1


www.eclipse.org
NetBeans 5.5

http://www.netbeans.org/index.html
7
Introdução à Linguagem Java

A linguagem Java foi designada para ser:

Orientada a Objetos: permite a criação de classes,
herança e polimorfismo. A interação do sistema se dá
pela interação dos objetos nele criados.

Distribuída: dá suporte a aplicações distribuídas (RMI,
CORBA, URL)

Simples: não permite a manipulação direta da memória
(ponteiros em C), possui o garbage collector para
remover objetos não referenciados, possui o tipo básico
boolean para manipular estados de verdade e falsidade.
8
Introdução à Linguagem Java

A linguagem Java foi designada para ser:

Multithread: permite a execução de diversas tarefas ao
mesmo tempo.

Segura: possui medidas de segurança para proteger o
código de ataques (não usa ponteiros, não permite que
applets tenham acesso ao computador dos clientes).

Independente de plataforma: Write Once, Run
Everywhere
9
Introdução à Linguagem Java

Dependência de Plataforma

compilação de código na linguagem C, C++

Para rodar em diferentes plataformas, o código em C
deve ser compilado em diferentes compiladores.
Código proprietário.

10
Introdução à Linguagem Java

Independência de Plataforma

JAVA: processos de compilação e interpretação

Pode-se escrever o código em uma plataforma e executá-lo
em outra, com poucas ou nenhuma alteração a ser feita.
11
Introdução à Linguagem Java

Independência de Plataforma:

Com o compilador, primeiramente o programa é
convertido em bytecodes Java – um código
independente de plataforma que é interpretado na
plataforma Java. O interpretador lê e executa cada
instrução em bytecode no computador.

O código é compilado uma única vez; a interpretação
ocorre a cada execução da aplicação e é feita pela JVM.
12
Plataforma Java

A plataforma é o ambiente de hardware e software em que um
programa é executado. A maioria das plataformas pode ser descrita
como a combinação do sistema operacional e da arquitetura de
hardware.

A plataforma Java difere das demais por ser apenas uma plataforma
de software que roda sobre qualquer plataforma de hardware.

Possui dois componentes:

Java Virtual Machine (JVM): base da plataforma Java e portável para
várias plataformas de hardware. Parte de software que executa código,
tarefa normalmente efetuada pela CPU.

Java Application Programming Interface (Java API): grande coleção
de componentes de software prontos que provêm diversas capacidades,
como ambiente gráfico e funcionalidades específicas. A API é agrupada
em bibliotecas de classes a interfaces, sendo estas bibliotecas
conhecidas como pacotes.
13
JAVA API

http://java.sun.com/javase/6/docs/api/

A API é composta por diversas classes utilitárias Java,
organizadas por pacotes.

Pacotes servem para agrupar classes com funcionalidades
semelhantes.


pacotes ≈ diretórios
classes ≈ arquivos

Na API são detalhadas todas as classes Java e há explicações
sobre a funcionalidade das classes, a identificação de atributos
e o detalhamento de métodos.

Tutorial: http://java.sun.com/docs/books/tutorial/getStarted/
14
Codificação
Detalhes iniciais

Java é uma linguagem fortemente tipada.

Não existem variáveis globais ou ponteiros.

Java é case-sensitive:


variavel ≠ Variavel ≠ VARIAVEL
Boas práticas:




tabular corretamente o código
usar padrões de nomenclatura
usar nomenclatura clara e inteligível
comentar o código
16
Detalhes iniciais

Regras de nomenclatura:
 não iniciar nomes com números ou caracteres especiais

classes: inicial maiúscula


atributos, métodos e variáveis: tudo em minúsculas; se
houver mais de uma palavra, primeira palavra toda em
minúsculas, demais palavras com inicial maiúscula


java.util, java.lang, javax.swing
constantes: tudo em maiúsculas


nome, anoNascimento, getNome( ), setSalarioInicial( )
pacotes: tudo em minúsculas


String, Vector, AcervoGeral, ControleContas
PI, E
Normalmente não se usam os caracteres “_” e “-” no nome de
classes, variáveis ou métodos.
17
Detalhes iniciais

Blocos de código são delimitados por “{” e “}” e definem o
escopo das variáveis.

O nome da classe deve ser idêntico ao nome do arquivo .java
(considerando maiúsculas/minúsculas).
Arquivo: Livro.java
public class Livro {
private String autor;
private String titulo;
public Livro(String autor,
setAutor(autor);
setTitulo(titulo);
}
}
18
Primeiro programa
public class PrimeiroPrograma{
public static void main(String[] args){
// amostragem na tela
System.out.println(“Primeiro programa”);
}
}
define o início da classe
1º método a ser executado
(deve ser mantida esta
linha sem alterações)

Este código deve ser escrito no arquivo PrimeiroPrograma.java.
Ao ser compilado, irá gerar o arquivo de bytecodes
PrimeiroPrograma.class.
O arquivo .class é interpretado pela JVM e gera a execução do programa.

Na tela, deve aparecer a mensagem “Primeiro Programa”.


19
Análise do Primeiro Programa
public class PrimeiroPrograma
public: modificador de acesso (acesso público)
class: define o início da classe
PrimeiroPrograma: nome da classe
public static void main(String[] args)
(este método é o ponto de partida do programa)
public: modificador de acesso (acesso público)
static: método pertence à classe
void: método não possui retorno
main: nome do método
String[] args: parâmetro de entrada do método, array de Strings
System.out.println(“Primeiro programa”);
System.out.println: método de amostragem na tela
“Primeiro programa”: mensagem a ser mostrada na tela
20
Análise do Primeiro Programa

A classe que inicia a execução de um programa stand-alone
deve possuir o método main.

Comentários:
// comentário de uma linha
/*
bloco de
comentários com
mais de uma linha */
/** bloco de
* comentários
* formato javadoc **/
21
Fundamentos da Linguagem
Java
Criação de variáveis

Variáveis são utilizadas nas linguagens em geral para
armazenar um determinado valor.

Toda variável deve ser declarada e inicializada.
 a declaração define o tipo da variável


a inicialização define o seu valor inicial



<tipo da variável> <nome da variável>;
<nome da variável> = valor;
<tipo da variável> <nome da variável> = valor;
Uma vez criada uma variável, de acordo com um tipo definido,
este tipo não pode ser alterado.
23
Tipos Básicos

Existem 8 tipos básicos (primitivos) em Java:
Tipo
Lógico
boolean
Tamanho
(bits)
Mínimo
Máximo
Default
Sem sinal
1/16
false
true
false
x
x
Caracter
char
16
0
216-1
0
Inteiro
short
8
-27
27-1
0
byte
16
-215
215-1
0
int
32
-231
231-1
0
long
64
-263
263-1
0
float
32
7 casas decimais
0.0
double
64
15 casas decimais
0.0
Decimal
24
Tipos Básicos

public class TiposBasicos {
public static void main(String[] args) {
//declaração (i não possui valor)
int i;
//inicialização e apresentação na tela
i = 5;
System.out.println(“Valor de i: ” + i);

//declaração e inicialização
double d = 15.2;
// caracter
char c = 'a';
c = '\t';
c = '\u0043';
// valor Unicode para A

// lógico
boolean b = true;
b = false;
// demais tipos básicos
float f = 5.2f;
byte bb = 127;
short s = 1024;
long l = 1234567890;
int x,y,z;
}
Valores expressos no
código são chamados
literais.
Literais inteiros (5) são do
tipo int; literais com
ponto flutuante (15.2)
são do tipo double.
Base octal: acrescentar 0
na frente do literal
int a = 0164

(11610)
Base hexadecimal:
acrescentar 0x na frente
do literal
int a = 0x164 (35610)
}
25
String

String não é um tipo básico, é uma classe do Java usada para
representar textos (cadeias de caracteres).

A classe String possui métodos que permitem a manipulação da sua
cadeia de caracteres.
public class TesteStrings {
public static void main(String[] args) {
// declaração (s vale null)
String s;
// inicialização
s = "Ana dos Santos";
// declaração e inicialização
String s2 = "Roberto Padilha";
System.out.println("Igual: " + s.equals(“Ana dos Santos”));
System.out.println("Tamanho de s: " + s.length());
System.out.println("Caracter da posição 5 de s2: " + s.charAt(5));
}
}
26
Operadores
Aritméticos
+
+=
++
-
-=
--
*
*=
/
/=
%
%=
Relacionais
>
<
!=
==
>=
<=
(resto da divisão)
int a = 5;
boolean b = (a = = 10);
System.out.println(!b);
int c = 10 % 3;
System.out.println(c);
double d = 15.3;
d += 10;
System.out.println(d);
boolean e = (d > 10 && d <= 50)
System.out.println(e);
Lógicos
!
&&
||
(negação)
(e)
(ou)
Bit a bit
&
|
^
~
(e)
(ou)
(xor)
(negação lógica)
int i = 1;
int j = 2;
int k = ++j;
System.out.println("K:
System.out.println("J:
int l = i++;
System.out.println("L:
System.out.println("I:
k++;
" + k);
" + j);
" + l);
" + i);
27
Conversões

As conversões podem ser
 implícitas: tipo menor para tipo maior
 explícitas: tipo maior para tipo menor. De ponto flutuante para
inteiro pode haver perda de informação.
byte
short
char
int
float
8
16
32
long
double
64
implícita
explícita
28
Conversões

Entre tipos básicos

Se há tipos diferentes em uma expressão, é feita a conversão
implícita para o maior tipo da expressão.


double a1 = 10 * 5.2 + 4 – 1.3f;
a1 = 54.7

double a2 = 5 / 2;
a2 = 2.0

double a3 = 5 / 2.0;
a3 = 2.5
A conversão explícita é marcada no código (também chamada
casting):


int a4 = (int) 10 * 5.2 + 4 – 1.3f;
a4 = 54
int a5 = (int) 5 / 2.0;
a5 = 2
29
Conversões

Entre String e valor numérico:
 como String não é um tipo básico, é necessário utilizar
classes do Java que fazem a conversão de um texto em um
número.
 Classes Wrapper: classes que representam os tipos básicos:



Character
Byte, Short, Integer, Long
Float, Double
String s = 10;
int a1 = Integer.parseInt(s);
float a2 = Float.parseFloat(s);
double a3 = Double.parseDouble(s)
a1 = 10
a2 = 10.0f
a3 = 10.0
30
Exemplo de Código

Elaborar uma classe que contenha métodos para:
 calcular a área de um retângulo
 calcular o perímetro de um retângulo.

Executar o código de modo que o área e o perímetro de um
retângulo de base 7 e altura 5 sejam mostrados na tela.

Área:

altura = 5

base = 7
base x altura
Perímetro:

2 x base + 2 x altura
31
Exemplo de Código
public class TesteRetangulo {
public static double calculaArea(double base, double altura){
double area = base * altura;
return area;
}
public static double calculaPerimetro(double base, double altura){
return 2 * base + 2 * altura;
}
public static void main(String[] args){
int b = 7;
int h = 5;
double a = calculaArea(b,h)
System.out.println("Area: " + a);
System.out.println("Perimetro: " + calculaPerimetro(b,h));
}
}
32
Análise do Código

A classe TesteRetangulo é composta por 3 métodos:


calculaArea, calculaPerimetro, main
Assinatura de um método:
<modificadorDeAcesso> <static> tipoDeRetorno nomeDoMetodo (<listaDeParâmetros>)
public static double calculaArea(double base, double altura)
public static void main(String[] args)




modificadorDeAcesso: delimita visibilidade do método (opcional)
static: não é necessário criar objeto para chamar o método, o método
pertence à classe (opcional)
tipoDeRetorno: tipo básico, tipo abstrato (classe), ou void quando não há
retorno
listaDeParâmetros: o que entra no método; cada parâmetro deve ter um tipo
associado (opcional)
33
Análise do Código

Primeiramente é executado o método main onde são criadas as
variáveis b e h, que recebem os valores 7 e 5 respectivamente.

Ao chamar o método calculaArea(b, h), há um desvio para o método
calculaArea, onde os parâmetros de entrada base e altura recebem
os valores de b e h, respectivamente.

Ao entrar no método calculaArea, é criada a variável area que
assume o valor da expressão base x altura (35). O valor desta
variável é retornado à variável a do método main.

A variável a é apresentada na tela.

Processo semelhante ocorre na chamada do método
calculaPerimetro(b,h).
34
Análise do Código

Escopo:
 as variáveis b, h e a são visíveis apenas no método main
(variáveis locais do método main)
 os parâmetros base e area e a variável area são visíveis
somente no método calculaArea
 os parâmetro base e area e a variável perímetro são visíveis
somente no método calculaPerimetro.
 ao término da execução de um métodos, seus parâmetros e
variáveis locais são apagados da memória.

Por mais que haja dois métodos com parâmetros de nomes
idênticos, os momentos de execução são diferentes. Por isso,
não há confusão entre os parâmetros.
35
Análise do Código

Este tipo de codificação não envolve o conceito de orientação
a objetos propriamente dito, uma vez que não são criados
objetos, todos os métodos são estáticos, não há herança e
polimorfismo.

Entretanto, representa uma classe utilitária que possui
métodos de significado semelhante que podem ser utilizados
futuramente por outras classes.
36
Exercício

Elaborar uma classe que possua as seguintes
funcionalidades de uma calculadora:





somar dois números
subtrair dois números
multiplicar dois números
dividir dois números
No método main, executar os métodos com
valores definidos e mostrar o resultado na tela no
seguinte formato:
Soma de 5 e 7: 12
Multiplicação de 3 e 6: 18
37
Estruturas de Seleção

Uma estrutura de seleção permite a escolha de
um grupo de ações (ou bloco de ações) a ser
executado quando determinadas condições,
representadas por expressões lógicas ou
relacionais, são ou não satisfeitas.

As estruturas de seleção são:


if/else (seleção simples)
switch (seleção múltipla)
38
Estruturas de Seleção – if/else
public static boolean maior(int a, int b){
if (a > b){
return true;
} else {
return false;
}

public static boolean maior(int a, int b){
return a > b ? true : false;
}

public static String categoria(int idade){
if (idade <= 12){
return “Infantil”;
} else if (idade <= 18){
return “Adolescente”);
} else if (idade <= 60){
return “Adulto”;
} else if (idade > 60)
return “Idoso”;
}

Método que retorna verdadeiro
caso o 1º parâmetro seja
maior que o 2º
Utilização do operador ? : para
o mesmo problema
Método que testa intervalos
por meio de ifs aninhados.
39
Estruturas de Seleção - switch
public static void mostraOpcao(int opcao){
switch (opcao){
case 1:
System.out.println(“1: Incluir”);
break;
case 2:
System.out.println(“2: Alterar”);
break;
case 3:
System.out.println(“3: Excluir”);
break;
case 4:
System.out.println(“4: Imprimir”);
break;
default:
System.out.println(“Opcao invalida”);
}
}




Método que mostra uma
mensagem em função de um
número.
A variável de teste (opcao)
deve ser dos tipos char, byte,
short ou int.
Neste método, a variável opcao
pode assumir os valores 1, 2, 3
ou 4. Caso possua outro valor,
a mensagem “Opção inválida” é
apresentada na tela.
O comando break delimita o
final de um case. Sempre deve
ser utilizado em cases
intermediários.
40
Estruturas de Repetição

Estrutura de controle de fluxo e execução que
permite repetir diversas vezes um mesmo trecho
de código.

Repetem um bloco de código enquanto uma
determinada condição for veradeira.

As estruturas de repetição são:



while
do/while
for
41
Estruturas de Repetição - while

Primeiro testa, depois executa.

Controle de parada associado a uma variável. Se a variável não for
atualizada, gera-se um laço infinito.
public static void mostraPares(int valor){
int contador = 2;
while(contador <= valor){
System.out.println(contador);
contador += 2;
}
}




Método que mostra os número
pares entre 2 e um valor
passado como parâmetro.
A variável de controle é
chamada contador.
A expressão contador += 2
é equivalente a
contador = contador + 2
Para gerar um laço infinito,
escreve-se while(true)
42
Estruturas de Repetição - do/while

Primeiro executa, depois testa. Executa pelo menos 1 vez.

Controle de parada associado a uma variável. Se a variável não for
atualizada, gera-se um laço infinito.
public static void mostraPares(int valor){
int contador = 2;
do{
System.out.println(contador);
contador += 2;
} while(contador <= valor)
}


Método que mostra os número
pares entre 2 e um valor
passado como parâmetro.
Estrutura de repetição menos
utilizada.
43
Estruturas de Repetição - for

Primeiro testa, depois executa.

Normalmente utilizado em situações onde há contagem.

Variável de controle de parada associada à própria estrutura do for.
public static void mostraPares(int valor){
for(int i = 0; i <= valor; i+=2){
System.out.println(contador);
}
}


Método que mostra os número
pares entre 2 e um valor
passado como parâmetro.
Comando composto por 3 partes
separadas por “;” :




inicialização da variável de
controle
condição de parada
atualização da variável de
controle
A variável de controle i pode ser
declarada na linha do for. Neste
caso, só é visível dentro do for
(escopo da variável i).
44
Estruturas de Desvio

Dentro de uma estrutura de repetição, pode-se:
 continue: efetuar desvios para o teste da condição
 break: causar um encerramento forçado durante as
repetições.
public static void testeDesvio(int valor){
for(int i = 0; i <= valor; i++){
if (i >= valor / 2)
break;
if (i % 2 != 0)
continue;
System.out.print(i);
}
}



Método que mostra os número
pares entre 2 e a metade de um
valor passado como parâmetro.
Se a variável i for maior ou igual
à metade do valor passado,
encerra o laço.
Se a variável i for não par, volta
para o incremento do for (i++).
45
Arrays

Um array é uma estrutura de dados composta por um número finito
de componentes (ou elementos), todos eles do mesmo tipo,
armazenado de forma contígua na memória, sendo que cada
componente é identificado por um índice.

Seus elementos podem ser acessados diretamente sem a
necessidade de acessar elementos anteriores ao desejado.

O tamanho de um array é correspondente à quantidade de
componentes que possui.

Uma vez criado um array, pode-se alterar o seu conteúdo, mas não o
seu tamanho. Ou seja, se for criado um array de 15 elementos, não
há como aumentá-lo para 20 ou reduzi-lo para 10.

A primeira posição de um array é acessada pelo índice 0. Um array
de 10 elementos terá índices variando entre 0 a 9.
46
Arrays Unidimensionais

Declaração e inicialização de um array unidimensional (vetor):



definir o tipo
definir a variável/identificador
definir o tamanho ou os elementos iniciais
0 1 2 3 4 5 6 7 8 9
vetor

Array declarado mas não inicializado (null)
int[] array;

Array de 10 inteiros:
int[] arrayInt = new int[10];

Array de 5 doubles (valores definidos na criação)
double[] arrayDouble = {2.0, .75, 1.5, 4.2, 9.7};

Captura do tamanho do array unidimensional
int tam = arrayInt.length;
47
Arrays Unidimensionais
public static int[] testeVetor(int tamanho){
int[] vetor = new int[tamanho];
for(int i = 0; i < vetor.length; i++){
if (i % 2 = = 0)
vetor[i] = 0;
else
vetor[i] = 1;
}
// amostragem na tela com o enhanced for
for(int elemento : vetor){
System.out.println(elemento);
}
return vetor;

Método que cria um vetor de
qualquer tamanho, inicializao, apresenta-o na tela e o
retorna ao final.

Enhanced for:

melhoria do método for
(JAVA 5)

sintaxe mais simplificada
para percorrer um array

não se tem acesso direto
ao índice do elemento
manipulado
}
48
Arrays Bidimensionais

Declaração e inicialização de um array bidimensional (matriz):



definir o tipo
definir a variável/identificador
definir o tamanho (linhas e colunas) ou os elementos iniciais
0 1 2 3

0
1
Array declarado mas não inicializado (null)
int[][] array;

int[][] arrayInt = new int[10][2];

Array de 2x3 inteiros (valores definidos na criação)
int[][] arrayInt = {{1, 2, 3}, {4, 5, 6}};
int[][] arrayInt = {{1, 2, 3},
{4, 5, 6}};

matriz
Array de 10x2 inteiros:
0
1
0 1 2 3
0 1 2 3
matriz
Captura do tamanho do array bidimensional
int linhas = arrayInt.length;
int colunas = arrayInt[0].length;
49
Arrays Bidimensionais

Método que cria uma
matriz de qualquer
tamanho, inicializa-a,
apresenta-a na tela e
a retorna ao final.

Enhanced for:
public static int[][] testeMatriz(int l, int c){
int[][] matriz = new int[l][c];
for(int i = 0; i < matriz.length; i++){
for(int j = 0; j < matriz[0].length; j++){
if (i % 2 = = 0)
matriz[i][j] = 0;
else
matriz[i][j] = 1;
}
// amostragem na tela com o enhanced for
for(int[] linha : matriz){
for(int elemento : linha){
System.out.println(elemento);
}
return matriz;
}

como uma matriz é
um vetor dentro de
vetores, o primeiro
for captura um
vetor e o segundo
for captura os
elementos deste
vetor.
50
Exercícios
Download