Você está na página 1de 126

Java Bsico

Programando em Java

Java Caractersticas
Simples Orientada a Objetos Distribuda Suporte a Concorrncia Dinmica Independente de Plataforma Portvel Alta Performance Robusta Segura

Java em Toda Parte

Entendo o Funcionamento Java


Cdigo-fonte
package public class { Logger.get

bytecode

0101010101010 1101010101010 1010101010101 0101101011110

JVM

Conceitos Bsicos
ByteCode
Cdigo intermedirio (*.class), entre o cdigo fonte (*.java) e o cdigo de mquina.

Compilador
Responsvel pela gerao do bytecode (*.class) atravs da traduo do cdigo fonte.

JVM
Mquina virtual do Java, responsvel pela leitura do bytecode, traduo para a linguagem de mquina e execuo do programa.

Classpath
Conjunto de caminhos especificado para a JVM encontrar as classes necessrias para a execuo do programa.

Orientao a Objetos
Programando em Java

Quinta Gerao de Linguagens de Programo


Primeira Gerao: linguagem de mquina

Segunda Gerao: linguagem de montagem (assembly)


Terceira Gerao: linguagem de alto nvel Quarta Gerao: linguagens para gerao de aplicaes

Gerao Orientada a Objetos: linguagens voltadas para reuso e manuteno.


A Quinta Gerao enfrenta o desafio de efetuar a manuteno e o reuso das milhares de aplicaes desenvolvidas pelas geraes anteriores e atual.
7

Conceitos Bsicos
Conceitos chaves da programao Orientada a Objetos:
Classe Um modelo que descreve um objeto

Objetos
Representam entidades existentes no mundo real

Exemplos
A classe Bycicle
Quais itens descrevem caractersticas de uma bicicleta? Quais itens decrevem comportamentos de uma bicicleta?

Exemplos
Objetos da Classe Bycicle

10

Relacionamento entre Classes


Herana
Classes filhas herdam o comportamento e atributos da classe pai.

Composio
Formao do todo pelas partes.

Generalizao
Comportamento e caractersticas generalizados.

Especializao
Particularizao do Comportamento das subclasses.

11

Herana, Generalizao, Especializao


Generalizao

Especializao
12

Composio

13

Vantagens da Orientao a Objetos


Reuso
Acontece devido aos possveis relacionamentos entre as classes: Herana e Composio

Abstrao
Atributos e comportamentos bem encapsulados, o que torna o cdigo mais manutenvel e robusto

14

A Linguagem Java
Programando em Java

Os Arquivos Fontes
Arquivos fontes devem obrigatoriamente seguir a seguinte estrutura e ordem:
Definio do Pacote Lista de imports Declarao de Classe (s)

permitido que haja uma nica classe pblica por arquivo fonte A classe pblica deve conter o mesmo nome que o arquivo fonte.
Se o nome da classe Bicicleta ento o nome do arquivo fonte deve ser

Bicicleta.java

16

Arquivo Fonte
// Declarao de Pacote package pessoal.meuPacote;
// Declarao de imports import java.util.Random; //Importao de uma classe import java.sql.*; //Importao de um pacote inteiro // Definies de Classes public class MinhaClasse { ... }

17

Pacote
Forma de organizar grupos de classes em unidades.

Pode conter qualquer nmero de classes que se relacionam, seja pelo mesmo objetivo ou por escopo.
Reduz problemas de conflitos de nome.
O nome de uma classe no apenas aquele usado em sua declarao, mas sim o
conjunto: nome do pacote + nome usado na definio da classe.

Permite a proteo de classes, variveis e mtodos atravs dos modificadores.

18

Import
Utiliza-se o import para declarao de classes que so referenciadas no arquivo fonte mas que no pertencem ao pacote onde este arquivo se encontra. Imports podem referenciar:
Outras classes no mesmo projeto Classes da API Java, como java.util.List Classes contindas nas bibliotecas utlizadas pelo projeto, ou seja, nos arquivos *.jar referenciados no classpath do projeto

Sintaxe:
import java.util.Date; import java.util.*;

19

Declarando uma Classe


Definio de uma classe:
[modificadores] class NomeDaClasse { .... } public class Curso { } public class Turma { } public class Aluno { }
20

Exemplos:

Declarando Atributos de Classe


Definio de um Atributo:
[modificadores] tipo nomeDoAtributo [ = inicializao ];

Exemplos:
private static int numero; public final String tamanhoMaximo = 15; private String nome = Maria da Silva; double raio = 6.5; Object o = new Object();
21

Declarando Mtodos
Definio de um mtodo:
[modificadores] retorno nomeDoMetodo ( [Argumentos] ) [ throws Exees ] { ... [ return varRetorno; ] }

Exemplos:
private void obtemNumeroAlunosTurma ( long codigoTurma ) { ... }

public String getNomeAluno( int codigoAluno ) { ... }


public void insereAluno ( String nomeAluno ) throws Exception { ... }

public static long getNumeroInstancias () { ... }

22

public class Aluno { String nomeAluno; int codigoAluno;

Exemplo de Classe

public String getNomeAluno() { return nomeAluno; } public void setNomeAluno( String param ) { nomeAluno = param; } public int getCodigoAluno() { return codigoAluno; } public void setCodigoAluno( int param ) { codigoAluno = param; } }

23

Construtor da Classe
Para que um objeto exista necessrio contru-lo, isto , dizer para a JVM que necessrio espao de memria para criao do objeto. Para contruir um objeto usa-se o construtor da classe.
Aluno o1 = new Aluno();

Object o2 = new Object();

Toda classe possui, por default, um construtor padro: pblico e sem argumentos. O construtor default somente criado quando nenhum outro construtor for definido pelo programador. Uma classe pode ter quantos contrutores desejar. Implicitamente, ou mesmo explicitamente, o construtor sempre chama o contrutor da sua super classe.
24

Declarando Contrutores da Classe


Definio de um mtodo:
[modificador] nomeDaClasse ( [Argumentos] ) [ throws Exees ] { ... }

Exemplos:
public Turma () { ... } public Turma ( long codigoTurma ) { ... } public Curso( int codigoCurso ) throws Exception { ... } public Curso ( String nomeCurso, int codigoCurso ) { ... }

25

Tipos Primitivos
Tipo boolean char byte short int Contedo Valor lgico Caracter Unicode Inteiro com sinal Inteiro com sinal Inteiro com sinal Default false \u0000 0 0 0 Tamanho
(bits)

Mnimo -\u0000 -27 -215 -231

Mximo -\uFFFF 27 1 215 1 231 1

8 16 8 16 32

long
float double

Inteiro com sinal


Ponto flutuante Ponto flutuante

0
0.0 0.0

64
32 64

-263
IEEE 754* IEEE 754*

263 1
IEEE 754* IEEE 754*

26

Converso: acontece quando existe uma modificao do tipo de uma varavel de forma implcita.
Atribuies
int i; double d; i = 100; d = i;

Converso de Tipos Primitivos

Chamadas de Mtodos

Operaes Aritmticas

java.util.Vector v; ... String s = Eita!! v.add(s); // Definio do mtodo add add(Object o) ... byte b = 2; int i = 5; float f = 11.1f; double d = b * 1 f; um float convertido p/ double

// O resultado final desta operao // O valor implicitamente


27

Casting de Tipos Primitivos


Casting: acontece quando h uma modificao do tipo de um varivel de forma explcita.
Exemplo 1: short b1 = 2; short b2 = 5; short d = (short) b1 + b2; ... Exemplo 2: int i = 16777473; byte b2 = 5; byte b = (byte) i;
Exemplo 3: long l = 1200; int i = (int) l;
28

Converso e Casting de Tipo Primitivos

char

int
byte short

long

float

double

converso casting
29

Expresses e Literais
Um literal inteiro por default do tipo primitivo int.

Um literal ponto flutuante por default do tipo primitivo double.


Durante a avaliao de expresses os operandos so convertidos para o mesmo tipo primitivo do operando cujo tipo possui maior preciso.
Tipos primitivos short e byte so convertidos para int.
byte b1 = 10; byte b2 = 20; short c = b1 + b2; Erro de Compilao! Para corrigir necessrio um cast short c = (short) b1 + b2;

30

Classes Wrappers
So classes que encapsulam um nico e imutvel valor. Cada tipo primitivo possui uma classe wrapper correspondente.

Permite armazenar os valores primitivos em estruturas da API Collection.


Tipo Primitivo boolean byte char short Classe Wrapper Boolean Byte Char Short

int
long float

Integer
Long Float

double

Double
31

Usando as Classes Wrappers


As classes wrapper podem ser criadas usando:
O valor primitivo a ser encapsulado:
Integer intObj1 = new Integer(1); Double doubleObj1 = new Double(5.5);

Um representao em String do valor a ser encapsulado:


Integer intObj2 = new Integer(1);
Double doubleObj1 = new Double(5.5);
32

A classe String
String uma classe da linguagem java e no um tipo primitivo.
Exemplo: String nome = Carolina; String sobreNome = Paula; Alguns mtodos utilitrios da classe String: boolean equals(...) equalsIgnoreCase(...) int length(...) substring(...) toLowerCase(...) toUpperCase(...) Referncia para a classe String: API Java: http://java.sun.com/j2se/1.4.2/docs/api/

33

Modificadores de Acesso
Definem o acesso que outras classes tero classe, a seus mtodos e seus atributos.
public: visvel para qualquer classe sem restries Pode ser usado por classes, atributos e mtodos

protected: visivl para todas as classes do mesmo pacote e para as subclasses


Pode ser usado por atributos e mtodos apenas Nenhum modificador definido (default): visivl para todas as classes do mesmo pacote

Pode ser usado por classes, atributos e mtodos


private: visvel somente para a classe Pode ser usado por classes internas, atributos e mtodos

34

A classe Object
Topo da Hierarquia de classes do Java
Toda classe em Java filha da classe Object.

Mesmo que um classe no use a palavra reservada

extends, o compilador gera a classe extendendo


diretamente de Object.

35

A classe Object
Mtodos da classe Object que so herdados por toda classe:
Utilizados para controle de Threads.
wait(), notify(), notifyAll() Utilizado para fornecer informaes teis sobre um objeto toString()

Utilizado para realizar uma comparao mais detalhada entre dois objetos
equals()

36

A varivel this
this uma referncia para a instncia corrente
Utilizado em trs situaes:
Para diferenciar um atributo (varivel da classe) de uma varivel local ou de um parmetro. Para passar o objeto corrente como parmetro Para encadear chamadas de contrutores.

37

A varivel this Diferenciando Atributos de Variveis Locais


public class Pessoa { private String nome; public void setNome( String nome ) { // this.nome -> atributo da classe // nome -> varivel local ao mtodo this.nome = nome; } }

38

Sintaxe
Programando em Java

Sintaxe
Statement:
Uma ou mais linhas terminadas por ;

Blocos:
Conjuntos de statements delimitados por { e }

Comentrios:
// comentrio simples, de uma linha /* */ comentrio simples, de uma ou mais linhas /** */ comentrios para documentao (Javadoc)

40

Javadoc
Ferramenta do Java para gerao de documentao de cdigo.
Como exemplo de javadoc tem-se a prpria API da linaguagem java em HTML com contedo originado dos arquivos fontes. http://java.sun.com/j2se/1.4.2/docs/api/ Exemplo de comentrio javadoc:

/**
* @return String - Nome do usurio * */ public String getNome() { return this.nome; } Referncia:

http://java.sun.com/j2se/javadoc/
41

Indentificadores
So os nomes dados a uma classe, mtodo, atributo, varivel ou parmetro. Comeam sempre por um caracter Unicode, (_) ou ($).

Diferenciam masculas e minsculas


No podem conincidir com uma palavra reservada. Indentificadores Vlidos - exemplos:
x y America _9_i$to_EH_meio_esquisito total_1+2+3 $4outroExemplo exemploCOMmuitasPALAVRAS
42

Na linguagem Java utilizada a seguinte conveno para formao de identificadores:


Constantes com todas as letras em maisculo: CONSTANTE; public static final int QUANTIDADE_MAXIMA = 100; Variveis comeam com letra minscula: varivel; String nomeUsuario; Classes comeam com letra maiscula: Classe; public class Usuario { ...} Mtodos comeam com letra minscula: metodo(), metodo2(int a); public void recuperaUsuario( int codigoUsuario ) {...} Se nome for composto, cada nome comea com letra maiscula: variavelComNomeComposto. String nomeUsuario;

Indentificadores - Convenes da Linguagem

43

Palavras Reservadas
abstract catch default false goto int null return this try boolean char do final if interface package short throw void break class double finallly implements long private static throws volatile byte const else float import native protected super transient while case continue extends for instanceof new public synchronized true

44

Operadores
Prec
1

Operador
++ , -+ , ~ ! (tipo)

Operando
A A I B O A,A A,A S,S I,I I,I I,I A,A A,A O,C

Assoc.
D D D D D E E E E E E E E E

Operao
In/decremento unrio Mais/menos unrio (sinal) Complemento de 1 Complemento lgico (not) cast Multiplicao, diviso, modulo Adio, subtrao Concatenao de strings Shift left Shift right Shift right sem sinal Menor que, menor ou igual a Maior que, maior ou igual a Comparao de tipos

2 3

*, /, % + , +

<< >> >>>

<, <= > , >= instanceof

45

Operadores Continuao
Prec
6

Operador
==, != ==, !=

Operando
P,P O,O I,I B,B I,I B,B T,T B,B B,B B,B B,Q,Q] V,Q V,Q

Assoc.
E E E E E E E E E E E D D

Operao
Igual/diferente (valores) Igual/diferente (referncia ao objeto) E (bits) E (lgico) XOR (bits) XOR (lgico) OU (bits) OU (lgico) E (lgico) OU (lgico) Operador condicional (ternrio) Atribuio Atribuio com operao

& &

^ ^

| |

10 11 12 13

&& || ?: = *=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, |=

46

Estruturas de Controle - Deciso


A linguagem Java prov duas estruturas de deciso: if() / else
if() / else switch if ( expressao_boolean ) { .... } [ else { ... } ] switch (key) { case value: <bloco de comandos> break; default : <bloco de comandos> break; }

switch

47

Estruturas de Controle - Lao


Existem trs estruturas de controle em Java
while() do/while() for

48

Estruturas de Controle - while()


Utilizado quando no se sabe de antemo a quatidade de iteraes que sero executadas. Sintaxe:
while(expressao_booleana) { <bloco de comandos> }

Caso a expresso booleana seja falsa, o bloco de cdigo no sr executado nenhuma vez. O programador deve garantir que a condio de parada ser satisfeita em algum momento.

49

Estruturas de Contole - do/while()


Utilizado quando no se sabe de antemo a quantidade de iteraes que sero executadas. O trecho de cdigo sempre executado pelo menos uma vez. Sintaxe:
do {
<bloco de comandos> } while(expressao_booleana)

O programador deve garantir que a condio de parada ser satisfeita em algum momento.

50

Estruturas de Controle - for()


Utilizado quando sabemos de antemo o nmero de iteraoes que sero executadas. Sintaxe:
for (<statement_inicializacao> [, <statement_inicializacao n>];
<condicao_parada>; <expressao_incremento> [, <expressao_incremento n>])

{
<bloco de comandos>

O programador deve garantir que a condio de parada ser satisfeita em algum momento.

51

Comandos break, continue


break:
Comando de sada de um lao ou de um switch

contiune:
Comando de salto para a prxima iterao do lao.

O comando goto no implementado por Java.


52

Arrays
Array uma estrutura de tamanho fixo que armazena mltiplos valores do mesmo tipo.

Qualquer tipo permitido em Java pode ser armazenado em um Array


Arrays de tipos primitivos

Arrays de referncias de objetos


Arrays de outros arrays

O tamanho de um Array precisa ser definido quando este criado. Um elemento um array correspodente a um dos elementos armazenados no array e pode ser acessado por sua posio.
53

Utilizando Arrays
Para utilizar um array necessrio seguir os trs passos abaixo:
Declarao Construo Inicializao

54

Arrays - Declarao
A declarao de uma array diz ao compilador o nome do array e o
tipo de elemento que ser armazenado.
int [ ] intArray; String [ ] nomes; Object [ ] objects;

Nenhuma memria alocada no momento da declarao do array. No se pode estabelece o tamanho do array no momento de sua declarao.

55

Arrays - Contruo
Contruindo um array:
int [] intArray; intArray = new int [10]; Object [] objArray = { Objeto1, Objeto2 }; String [][] stringMatrix = new String[10][20]; boolean[] answers = { true, false, true, true, false };

Uma vez definido o tamanho do array este no pode mais ser alterado.
Quando o array de referncias para objetos somente a memria ocupada pela referncia em si alocada. Nenhum objeto criado neste momento.

56

Arrays - Contruo

Quando um array contrudo seus valores so automticamente inicializados para valores padro.
Quando o array de referncias para objetos somente a memria ocupada pela referncia em si alocada. Nenhum objeto criado neste momento. Valores default:
Tipo
byte short int

Valor Inicial
0 0 0

long
float double char boolean reference

0L
0.0f 0.0d \u0000 false null

57

Arrays - Inicializao
Declarando, contruindo e inicializando um array:
int[] anArray; // declare an array of integers anArray = new int[10]; // create an array of integers // assign a value to each array element and print

for (int i = 0; i < anArray.length; i++) {


anArray[i] = i; System.out.print(anArray[i] + " "); }

O menor nidice do array sempre zero. O maior ndice do array obtido atravs de array.length - 1

58

Modificadores
final
Usado em: Classes Mtodos Variveis

static
Usado em: Mtodos Variveis Inicializadores estticos

syncronized

59

Modificador final
Classe: define que uma classe no pode ser extendida.
public final class Math { // esta classe no pode ser extendida }

Mtodo: define que um mtodo no pode ser sobreescrito.


public final void metodoFinal() { // este mtodo no pode ser sobre-escrito }

Varivel: define que uma varivel no pode ser modificada depois de receber um valor.
Para tipos primitivos no podem receber outro valor Para referncias, no podem referenciar um outro objeto, mas o contedo do objeto original pode ser alterado.
60

Modificador static Variveis


Variveis: define que uma varivel ter somente uma instncia

em toda mquina virtual. Uma varivel esttica uma varivel


de classe.
Varivel de Classe: varivel comum a todos os objetos da classe. Isto , uma alterao no valor desta varivel por um dos objetos refletida em todos objetos, pois todos esto enxergando a mesma varivel. Varivel de Instncia: cada objeto possui um valor diferente setado na varivel.

61

Modificador static - Mtodos


Mtodos: define que o mtodo se refere classe e no a alguma instncia de uma classe.
double angulo = 3.14; double cosseno = Math.cos( angulo );

62

Modificador static Inicializador Esttico


Inicializadores estticos: trecho de cdigo que executado uma nica vez. Quando a classe carregada.
public class InicializadorEstatico {
private static String staticString = null; private String string = null; static {

staticString = classe foi carregada;


string = esta linha no compila; } }

63

Modificador syncronyzed
Utilizado para controlar o acesso em trechos crticos de cdigo, para programas multi-threaded. Define que apenas uma thread poder executar o trecho delimitado pelo syncronized num perodo de tempo.

public synchronized void metodoSincronizado() { /* somente uma thread de cada vez pode executar este trecho */ }

64

Todos os Modificadores
Modificador
public protected (default) private final abstract static native transient volatile synchronized

Classe
sim no sim no sim sim no no no no no

Atributo
sim sim sim sim sim no sim no sim sim no

Mtodo
sim sim sim sim sim sim sim sim no no sim

Construtor
sim sim sim sim no no no no no no no

Blocos livres
no no sim no no no sim no no no sim

65

Refrencias e Objetos - Memria


Programando em Java

Modelo de Memria
O modelo de memria do Java baseado na abordagem de dupla indireo, isto , as referncias so endereos e outro endereo. Esta abordagem permite a utilizao do garbage collector para realocao de memria e reduo da fragmentao.

67

Referncias de Objetos - Atribuies


Atribuies entre variveis de um mesmo tipo no criam novos objetos, mas sim cpias da referncia para o mesmo objeto.
Cliente cliente1 = new Cliente();
Cliente1.setNome(Carolina); Cliente cliente2 = null; cliente1 Cliente cliente3 = cliente1;

Cliente
nome: Carolina sobrenome = null

cliente2

nomeIndicacao = null

cliente3
68

Igualdade entre Objetos


A comparao em Java entre dois tipos primitivos se faza partir do operador ==. A utilizao do operador == para comparar objetos pode gerar desigualdades para comparar objetos idnticos. No caso das Strings para resolver este problema basta utilizar o mtodo equals. Todas as classes e Java extendem a classe Object que possui o mtodo equals com a seguite assinatura:
public boolean equals( Object obj )

Para comparar dois objetos de uma mesma classe, deve-se sobreescrever o mtodo equals de maneira que ele possua a funcionalidade de comparar se o objeto recebido igual ao atual.

69

Referncias e Objetos - Passagem de Parmetros

Quando um argumento passado como parmetro na chamada de uma funo, na realidade um cpia do argumento passada.
Tipos Primitivos: passado uma cpia do tipo primitivo. Caso este valor seja alterado dentro do mtodo, isso no afetar o valor no mtodo original. Referncias a Objetos: passado uma cpia da referncia. Caso a refrencia seja alterada para outro objeto, isso no afetar a referncia original. Caso o objeto apontado para refrencia seja alterado, essa alterao ser perpetuada.

No mtodo no possvel modificar a referncia, mas possvel modificar o objeto referenciado.

70

Passagem de Parmetros - Exemplo


public class TesteParametro {

public static void modificaSB1( StringBuffer aString) {


aString = new StringBuffer("nova string");

} public static void modificaSB2( StringBuffer sb ) {


sb.append("-realizado append");

} public static void modificaInt1( int i ) {


i+= 10;

} public static void modificaInt2( int[] array ) {


for(int i = 0; i < array.length; i++ ) {
array[i]+=10;

}
}

71

Passagem de Parmetros - Exemplo


public static void main( String[] args ) { StringBuffer string = new StringBuffer("TESTE");

modificaSB1(string);
System.out.println("Apos execucao modificaSB1: " + string ); modificaSB2( string ); System.out.println("Apos execucao modificaSB2: " + string ); int[] arrayInt = { 10 };

modificaInt1( arrayInt[0] );
System.out.println("Apos execucao modificaInt1: " + arrayInt[0] ); modificaInt2( arrayInt ); System.out.print("Apos execucao modificaInt2: ");

for( int j = 0; j < arrayInt.length; j++ ) {


System.out.println( arrayInt[j] + ", " ); } } }

72

Passagem de Parmetros - Resultados


Apos Apos Apos Apos execucao execucao execucao execucao modifySB1: TESTE modifySB2: TESTE-realizado append modifyInt1: 10 modifyInt2: 20,

73

Passagem por Valor - Exemplo


class Retangulo{ //Atributos da Classe float orig_x, orig_y; float altura, largura; //Mtodo da classe public void translacao (float x, float y) {
//Realiza translao orig_x = x; orig_y = y; //Altera valores dos argumentos x = 0.0; y = 0.0;

} public static void main( String args[] ){ Retangulo ret = new Retangulo(); float x1 = 15.5; float y1 = 10.5; ret.translacao(x1, y1); System.out.println(O valor de x1 + x1); System.out.println(O valor de y1 + y1); }

}
74

class Vetor{ //Varivel global da classe String mensagem; //Mtodo de inicializao do vetor public void inicializa(){ //Declarao e inicializao do vetor int v[] = {1, 2, 3, 4, 5}; //Mensagem a ser escrita na tela mensagem = Os valores originais do vetor so: ; for (int i = 0; i < v.length; i++ ){ mensagem += + v[i]; } /* Chamada ao mtodo modificaVetor, passando v1 como argumento. Passagem por referncia */ modificaVetor( v ); mensagem += \nOs valores do vetor aps modificao so: ; for (int i = 0; i < v.length; i++ ){ mensagem += + v[i]; } modificaElemento( v[2] ); mensagem += \n O valor de v[2] = + v[2]; } //Modifica todos os elementos do vetor. Multiplica todos por 3 public void modificaVetor( int v1[] ){ for (int j = 0; j < v1.length; j++ ){ v1[j] *= 3; } } //Modifica um elemento, multiplicando-o por 3 public void modificaElemento( int elem ){ elem *= 3; } //Retorna a mensagem public String getMensagem(){ return mensagem; }
public static void main( String args[] ){ Vetor v = new Vetor(); v.inicializa(); System.out.println( v.getMensagem() ); } }

Passagem por Referncia - Exemplo

75

A classe String
Java utiliza esta classe para encapsular strings de caracteres.
Cada instncia da classe representa uma string imutvel, ou seja, depois de criada, a string representada no pode ser alterada. Quando umas1 literal compilada, ela adicionada a minha string um pool de literais. Caso o compilador encontre s2 s2 essa literal no pool, Pool a literal existente re-utilizada. de literais de Strings
76

Garbage Collection
Em Java, no preciso fazer alocao dinmica explcita para criar objetos, tambm no preciso desalocar memria. O Garbage Collector um processo interno da JVM que de tempos em tempos executa seu processo e faz desalocao de objetos que no possuem mais referncias.
No possvel saber quando os objetos sero enviados para o Garbage Collector.

Algumas classes precisam defnir como suas instncias devem ser excludas da
memria. Para isto, o GC utiliza o mtodo finalize() da classe Object. possvel extender o mtodo para fazer a desalocao personalizada para uma subclasse.

77

Herana e Java
Programando em Java

Orientao a Objetos - Vantagens


Reuso
Herana
Composio

Abstrao
Interfaces
Classes Abstratas Encapsulamento

79

Herana
A implementao do conceito de herana em Java feito com a palavra extends. Em Java possvel extender SOMENTE uma classe. Um classe que extende a outra chamada de sub classe, e a classe extendida chamada de super classe.
A sub classe uma especializao da super classe. A super classe uma generalizao da sub classe.

80

Herana

81

Herana - Sintaxe
public class Pessoa { public void getNome() { } public void getCPF() { } } public class Funcionario extends Pessoa { public void getSalario() { } }

82

Herana

83

Herana - Sobreescrita de mtodos

84

Sobreescrita de Mtodos
Usado quando preciso modificar o comportamento de um mtodo da classe pai.

Para sobreescrever um mtodo as condies abaixo devem ser satisfeitas:


O nome do mtodo assim como o tipo e a ordem dos paramtros devem ser idnticos aos do mtodo da classe pai. O tipo de retorno tambm deve ser idntico. A visibilidade no deve ser mais restritiva que a visibilidade do mtodo original. O mtodo no dever lanar checked exceptions que no so lanadas pelo mtodo original.

85

Herana e super
Quando uma classe sobreescreve um mtodo da super classe, o comportamento normal da subclasse executar o novo mtodo.

Existe uma maneira de executar o mtodo da super classe atravs da palavra reservada super, que uma referncia super classe.
public void metodoSobreescrito super.metodoSobreescrito();
// outras coisas especficas da classe filha

86

Herana - Construtores
Construtores no so herdados como mtodos comuns, e devem ser definidos para cada classe. Caso uma classe no tenha nenhum construtor definido, o compilador automaticamente cria um construtor default que simplesmente chama o construtor da superclasse. Tamb possvel chamar explicitamente o construtor da super classe atravs do mtodo super().
Caso o mtodo super() seja chamado no construtor da subclasse, esta chamada deve ser o primeiro comando do construtor.

87

Sobrecarga de Mtodos
Usada quando preciso vrios mtodos que desempenham papis semelhantes em diferentes condies.

Para sobrecarregar um mtodo as seguintes condies devem ser satisfeitas:


A identidade de um mtodo determinada pelo nome completo da classe a que pertence, pelo seu nome, pelo seu tipo, ordem e quantidade dos parmetros. Dois ou mais mtodos na mesma classe (incluindo mtodos da super classe) com o mesmo nome mas com uma lista de parmetros diferentes so mtodos sobrecarregados. O tipo de retorno do mtodo, sua visibilidade, e lista de parmetros pode variar livremente. Mtodos sobrecarregados podem chamar um ao outro, utilizando uma chamada comum de mtodo com lista de parmetros apropriada.

88

Sobrecarga de Mtodos
public class ExemploSobrecarga() { public void metodoSobrecarregado(int param1){ } public void metodoSobrecarregado(String param1){ } public void metodoSobrecarregado(int param1, String param2){ } public void metodoSobrecarregado(String param1, int param2){ } public void metodoSobrecarregado(double param1, String param2, int param3){ }

89

Sobrecarga de Construtores
class Base { public Base( String s ) { // inicializa o objeto usando s } public Base( int i ) { // inicializa o objeto usando i } } class Derived extends Base { public Derived( String s ) { // passa o controle para o construtor de Base na linha 2 super( s ); } Public Derived( int i ) { // passa o controle para o construtor de Base na linha 5 super( i ); } }

90

Orientao a Objetos - Abstrao


Um dos maiores benefcios do paradigma OO a noo de um tipo de dado abstrato
Pense na classe java.lang.String e todos os mtodos que ela possui e podem ser utilizados pelo implementador.

importante para o implementador saber como foram implementados os mtodos desta classe?
importante saber se a String foi implementada utilizando um array ou uma lista ligada? Para o implementador, o importante somente saber que os mtodos existem
91

OO - Bom uso da Abstrao


A abstrao um elemento chave de um bom cdigo orientado a objetos e deve ser utilizado em qualquer projeto

O primeiro objetivo em definir uma boa classe no pensar na sua


implementao, mas sim nas suas responsabilidades e comportamento, ou seja, nos seus mtodos pblicos

Todo o comportamento da classe deve ser acessado atravs de


mtodos.

92

OO - Bom uso da Abstrao


Somente depois de definidas as responsabilidades de uma classe que a preocupao com a sua implementao deve ser levantada A implementao da classe no ir importar para quem a utilizar, portanto ela deve estar bem encapsulada
Atributos e variveis internas todos privados

Num bom uso da abstrao, a implementao de uma classe poderia ser escolhida na hora de execuo

93

Abstrao e Java
Em Java, o conceito de abstrao implementado com:
Interfaces Classes abstratas Mtodos abstratos

94

Interfaces
No so classes
No possuem mtodos implementados Possuem apenas definio de comportamento:
Mtodos abstratos
Constantes

No podem ser instanciadas

Para qu servem???
95

Interfaces
Mesmo no existindo implementao as interfaces definem um comportamento.
Definio da interface Pet - definio de um comportamento:
public interface Pet { public abstract void beFriendly(); public abstract void play(); }

Definio da interface Pet:


public class Dog implements Pet public void play(){ ... } { public void beFriendly(){ ... }

}
96

Interfaces - Abstrao
Como uma classe comum, pode ser instanciada: Dog pet = new Dog();
No gera erro, porm no usa o conceito de abstrao, fora a utilizao de Dog

Pet pet = new Dog();


Usa o conceito de abstrao, pois a cdigo no depende da implementao do Pet.

97

Classes Abstratas
Classes abstratas so classes que podem possuir mtodos implementados, mas que possuem ao menos um mtodo abstrato.
Mtodo abstrato aquele em que no existe implementao, apenas sua definio.

So teis quando definem a implementao de mtodos comuns a todas as classes que as estendem, mas obrigam que cada uma destas classes definam a implementao dos outros mtodos abstratos. Classes abstratas no so instanciadas.

98

Classes Abstratas
public abstract class Animal { public void comer() { ... } public abstract void andar(); } public class Cachorro extends Animal { public void andar() { // anda com quatro patas } } public class Canguru extends Animal { public void andar() { // anda com duas patas - pulando } }
99

Classes Abstratas X Interfaces


Interfaces possuem somente mtodos abstratos

Classes abstratas possuem mtodos abstratos, mas tambm possuem tantos mtodos implementados quantos for necenssrio.

100

Interfaces API Collection


Um bom exemplo de interfaces que utilizamos sempre a API Collection, um conjunto de classes do pacote java.util

Possui basicamente 4 tipos de interfaces:


Collection coleo genrica de objetos List lista de objetos Set conjunto de objetos (sem repetio) Map mapeia chave para valores (objetos)

101

Collection
Collection List AbstractList LinkedList Vector ArrayList Set AbstractSet HashSet SortedSet

Interfaces Classes

TreeSet

102

Map

Map
SortedMap TreeMap AbstractMap
Interfaces Classes

HashMap TreeMap WeakHashMap

103

List e Map
List:
add(int index, Object element) add(Object o) get(int index) remove(int index)

Map:
put(Object key, Object value) get(Object key)

104

Percorrendo uma Collection


Exemplo: public void percorre() { Collection c = new ArrayList(); Iterator it = c.iterator(); while ( it.hasNext() ) { Object ob = it.next(); System.out.println( ob.toString() ); } }
105

Percorrendo um List
Exemplo: public void percorre() { List l = new ArrayList(); for ( int i = 0; i < l.size(); i++ ) { Object ob = l.get(i); System.out.println( ob.toString() ); } }

106

Converso/Casting de Referncias a Objetos


Converso: acontece quando h uma modificao do tipo de um varivel de forma implcita. Casting: acontece quando h uma modificao do tipo de uma varivel de forma explcita. Analise a figura abaixo:

107

Converso de Referncias de Objetos


Exemplos OK
De acordo com a figura anterior todos os itens abaixo ilustram atribuies onde ocorre converso implcita:

Gato g = new gato(); AnimalDomestico ad = g; Object o = g; Papagaio p = new Papagaio(); Mercadoria m = p; Object o = m;

108

Converso de Referncias de Objetos


Exemplos ERRO
De acordo com a figura anterior todos os itens abaixo ilustram atribuies onde ocorre no converso implcita: Gato g = Cachorro Object o Animal a Papagaio new Gato(); c = g; = new Object(); = new Animal (); p = a;

109

Casting de Referncias de Objetos


Animal a1 = new Animal; Papagaio p1 = new Papagaio(); Papagaio p2 = new Papagaio(); AnimalDomestico ad = new AnimalDomestico(); Gato g1 = new Gato(); Gato g2 = new Gato(); a1 = p2; // Converso implcita p1 = (Papagaio) a1; // Casting vlido ad = g1; // Converso vlida g2 = (Gato)a1; // Casting Legal (compilao)... // Erro em execuo

110

Converso de Referncias de Objetos Vlidas


ClasseTipoOriginal Classe ClasseTipoOriginal Interface ClasseTipoOriginal Array

ClasseNovoTipo Classe

ClasseTipoOriginal deve ser uma subclasse de ClasseNovoTipo

ClasseTipoOriginal Deve ser um Object

ClasseTipoOriginal deve ser um Object

ClasseNovoTipo Interface

ClasseTipoOriginal deve implementar ClasseNovoTipo

ClasseTipoOriginal deve ser uma subinterface ClasseNovoTipo

ClasseTipoOriginal deve ser Cloneable ou Serializable

ClasseNovoTipo Array

Erro

Erro

111

Casting de Referncias de Objetos Vlidas


TipoOriginal
Classe no-final

TipoOriginal
Interface

TipoOriginal
Interface

TipoOriginal
Array

NovoTipo
Classe no-final

TipoOriginal deve herdar de NovoTipo


ou vice-versa

TipoOriginal deve
herdar de Sempre OK

NovoTipo

TipoOriginal deve ser Object

NovoTipo
Classe final

NovoTipo deve herdar de TipoOriginal

TipoOriginal e NovoTipo
devem ser da mesma Classe

NovoTipo deve implementar


uma interface ou Erro de Compilao

Serializable

NovoTipo
Interface

Sempre OK

Sempre OK

Erro de Compilao

TipoOriginal contm NovoTipo


Array

NovoTipo deve ser um Object

Erro de Compilao

Erro de Compilao

objetos que possam ser casting para os objetos de NovoTipo

112

Operador instanceof
Para auxiliar a operao de casting, existe uma maneira para saber qual a real instncia de uma referncia, e testar para saber se vai ocorrer um erro numa suposta converso explcita Object s1 = new String(objeto do tipo String); if ( s1 instanceof String ) { String s = (String) s1; // s.doSomething(); }

113

Exceptions
Programando em Java

Exeptions
Usadas para controle, durante a execuo de um programa, de alguma coisa que no normal - do ponto de vista do objetivo a ser alcanado - mas que possa acontecer. Tipos de erro que podem acontecer:
Previsveis: usurio entra com nome de arquivo invlido, falha num componente de rede, arquivo corrompido, etc. No previsveis bugs no programa, acesso a posies inexistentes num array, falta de memria do sistema, etc.

115

Exceptions
Para os problemas previsveis, o modo de tratamento destes erros em linguagens de programao mais tradicionais, devem ser feitas com ifs. Exemplo: no caso do nome do arquivo, deve se testar se o arquivo existe antes de efetivamente us-lo. Esse tipo de tratamento deixa o cdigo extenso e complexo. O ideal seria fazer um tratamento devido somente se o problema venha a ocorrer. No caso de problemas que no so previstos, ainda assim seria interessante uma forma de tratamento especial para avisar o usurio sobre estes problemas.

116

Exceptions
Em Java, existe um mecanismo que faz exatamente isso. Este mecanismo funciona com exceptions, que nada mais so do que classes especficas para cada tipo de erro, e que contm informaes de quando e qual erro ocorreu, entre outros. O trecho de cdigo em que uma exceo esperada deve ser colocado dentro de um try{}. Caso a exceo esperada venha ocorrer, o seu tratamento feito dentro do trecho catch{}, logo em sequida do try{}.

117

Exceptions
Exemplo:

int x = (int) (Math.random() * 5); int y = (int) (Math.random() * 10); int [] z = new int[5]; try { System.out.println(y/x + (y/x)); System.out.println(y + y + z[y] + z[y]); } catch (ArithmeticException e) { System.out.println(Problema aritmtico + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(Erro no ndice + e); }

118

Exceptions
main() calculaMedia() calculaSoma()

Se uma exceo ocorrer e no for tratada em um determinado mtodo, esta passada ao mtodo justamente anterior na pilha de execuo, e assim por diante.
119

Exceptions
Tratando mtiplicas excees e o bloco finally.

try { // faz alguma coisa } catch (FileNotFoundException e) { // trata o erro } catch (SQLException e) { // trata o erro } catch (Exception e) { // trata o erro genrico } finally { /* finaliza o uso dos recursos (arquivos, transaes, etc) */ }

120

Excees e Hierarquia
Todos os tipos de excees e erros so filhos da classe Throwable

Throwable

Exception
SQLException RuntimeException

Error

NullPointerException

OutOfMemoryError

121

Lanando Exceoes
Vimos como podemos tratar excees. Mas como lanar uma exceo?

Excees podem ser jogadas via o comando

throw new IOException(Arquivo no encontrado);


Aps a execuo desta linha de cdigo, o fluxo normal interrompido e

resumido somente no catch correspondente. Se no houver um catch explcito, quem trata o problema o sistema operacional.

122

Checked Exceptions
Entretanto, como podemos saber se um trecho de cdigo suscetvel a lanamento de excees? Em Java, qualquer mtodo que pode lanar uma exceo deve declarar isto. public void method1 throws SQLException { // este mtodo pode jogar uma SQLException } As excees checadas so somente as subclasses de Exception, exceto RuntimeException e suas filhas. Errors tambm no so checadas.

123

Excees - Vantagens
Mantm separados os trechos de cdigo que tratam

condies anormais ou condies de erro


Propagao das excees pela pilha de execuo, at que

seja encontrado um tratador adequado para a exceo


Tratamento genrico para tipos de exceo

124

Excees - Boas Prticas


No tratar todas as excees genericamente. Faa um tratamento adequado para cada tipo de exceo. No jogar excees genricas. Crie novos tipos de excees. Utilizar um mecanismo de logging para registrar a ocorrncia da exceo. Utilize o bloco finally para finalizar o uso dos recursos

125

Excees e Sobreescrita de Mtodos


public class BaseClass { public void method() throws IOException{} } public class LegalOne extends BaseClass { public void method() throws IOException{} } public class LegalTwo extends BaseClass { public void method() { } }

public class LegalThree extends BaseClass {


public void method() throws EOFException, MalformedURLException {} } public class IlegallOne extends BaseClass { public void method() throws IOException, IllegalAccessException {}

}
public class IlegallTwo extends BaseClass { public void method() throws Exception {} }
126

Você também pode gostar