Você está na página 1de 49

Camilo Lopes

CERTIFIED

Java Programmer

Sun

Seu para Guia ser de Bo um lso SCJ P

Guia do Exame

FOCANDO NO EXAME

Sumrio

XVII

Sumrio

Captulo 1 Fundamentos declarao de nveis do pacote e acesso. ............. 1


Modificadores de Acesso ................................................................................ 1 Modificador de Acesso ................................................................................. 10 Varivel Local ........................................................................................ 13 Construtores .......................................................................................... 14 Modificador Static ........................................................................................ 17 Enum ............................................................................................................ 19

Captulo 2 Herana, polimorfismo, retorno covariantes ................................ 21


Modificador Static dicas ............................................................................ 32

XVIII

Sun Certified Java Programmer Guia do Exame SCJP

Captulo 3 Atributos ......................................................................................... 37


Wrapper ...................................................................................................... 46 Quando usar? ........................................................................................ 46 Wrappers no Java 5/superior ...................................................................... 46 Diferenciar um Wrapper de Tipos primitivos .............................................. 47

Captulo 4 Operadores .................................................................................... 57


Avaliando Valores ........................................................................................ 57 Enums .......................................................................................................... 59 Instanceof .................................................................................................... 61 Concatenao de Strings .............................................................................. 62 Acrscimo e decrscimo ......................................................................... 63 Varivel Final ........................................................................................ 63 Operador ternrio ................................................................................. 64 Operadores lgicos de abreviao ........................................................ 64 Operadores sem abreviao ................................................................. 65

Captulo 5 Tratamentos de excees ............................................................... 69


Throwable, Error, Exception, RuntimeException ........................................... 70 Controle de Fluxo IF, SWITCH, FOR, LOOP ................................................ 74 Continue e Break ................................................................................... 79 Continue e Break Rotulados ........................................................ 79

Sumrio

XIX

Captulo 6 API .................................................................................................. 83


StringBuilder e StringBuffer ......................................................................... 85 Serializao .................................................................................................. 91 Regras da Serializao .......................................................................... 92 Variveis Static ............................................................................................. 92 Datas, nmeros e moedas ........................................................................... 96

Captulo 7 Expresses regulares - REGEX ..................................................... 105


Delimitadores gananciosos ........................................................................ 107

Captulo 8 Genricos e Conjuntos ................................................................. 111


Subscrevendo equals() .............................................................................. 111 hashCode() ................................................................................................ 116 Objetos ! = com hashing = = ................................................................. 119 Conjuntos ................................................................................................... 121 Ordenado X Classificado ...................................................................... 121 Interface lang.COMPARABLE ...................................................................... 136 Interface util.COMPARATOR ....................................................................... 139 Comparable!= Comparator ............................................................... 139 Classificando com classes Arrays .......................................................... 139 Convertendo array em lista e o inverso .............................................. 144

XX

Sun Certified Java Programmer Guia do Exame SCJP

Sets ............................................................................................................ 150 PriorityQueue ............................................................................................ 154 Reviso ...................................................................................................... 157 Genricos ................................................................................................... 160 Pr-Java 5 .................................................................................................. 161 Polimorfismo e Genricos .......................................................................... 167 Coringa <?> ........................................................................................... 173 Supertipo <?> ......................................................................................... 174 Criando suas prprias classes genricas .................................................... 180 Criando mtodos genricos ....................................................................... 181

Captulo 9 Classes Internas ........................................................................... 187


Classes internas annimas ......................................................................... 192 Interface especializada .............................................................................. 196 Classes estticas aninhadas ....................................................................... 198

Captulo 10 Threads ........................................................................................ 203


Definindo uma Thread extends Thread ou implements Runnable ........ 204 Estados das Threads ................................................................................... 208 STATIC SLEEP() Suspenso ............................................................... 208 STATIC YIELD () Prioridades de Threads .......................................... 210 NON-STATIC JOIN() Lana uma exceo verificada. ......................... 214 Sincronizao ....................................................................................... 217

Sumrio

XXI

Quando sincronizar? ..................................................................... 217 Iterao entre as Threads .......................................................................... 223 Quando usar? ...................................................................................... 223

Captulo 11 Desenvolvimento ......................................................................... 227


Compilando com d .................................................................................. 227 Propriedades do sistema ........................................................................... 228 Usando java e javac ................................................................................... 229

Referncias bibliogrficas ........................................................... 231

Captulo 1

Fundamentos declarao de nveis do pacote e acesso.


Vai ser visto aqui o uso de declarao de package, os nveis de acesso entre as classes e os membros, e quais modificadores podem ser usados nas classes. Sero apresentadas as interfaces, classes abstratas e finais.

Modificadores de Acesso
public, protected, default e private Uma classe s pode ser PUBLIC ou DEFAULT.

Default quando uma classe tem o acesso default, o nvel de acesso restrito aos pacotes package, ou seja, apenas as classes dentro daquele package tm acesso aos mesmos disponveis naquela classe. Em outras palavras no podemos importar uma classe default a partir de outro package.

Sun Certified Java Programmer Guia do Exame SCJP

package cap1.x; class Casa { } package cap1.y; import cap1.x.Casa; public class Zona { //esse cdigo no compila; Casa tem o acesso default //s pode ser vista dentro do package cap1.x } package cap1.x; public class Zar { /* observe que tenho um objeto de minha class Casa * devido a ela estar no mesmo package*/ Casa c; }

public permite a importao da classe, mesmo em package diferentes.

package cap1.x; public class Jarro {} package cap1.y; import cap1.x.Jarro; class Jar { /* observe que minha class Jarro public, ento posso import-la para outros pacotes*/ public static void main(String[] args) { } }

Captulo 1 - Fundamentos - declarao de nveis do pacote e acesso

private class no existem classes private, protected, todas as classes s podem ser public ou default. Private e protected so aplicados aos membros. Veja a seguir as possiveis pegadinhas que podem aparecer no exame.

Uma classe final quebra o conceito de extensibilidade do Java e principalmente do polimorfismo. Dica: Lembre-se desse conceito, pode-se deparar com uma questo terica no exame
package cap1.y; private class Priv { public static void main(String[] args) { }} Exception in thread main java.lang.Error: Unresolved compilation problem: at cap1.y.Priv.main(Priv.java:3)

classes Abstract e final - so dois tipos de modificadores no referentes ao nvel de acesso que podemos utilizar em uma classe de topo do nvel. final class uma classe marcada como final o mesmo que dizer: essa classe no pode ter filhos, ela nasceu com problemas no ovrio. Mas exatamente isso que acontece quando se tem uma classe como final e no pode ter o relacionamento -UM. O fato de criar uma classe final dizer que a classe j disse tudo a respeito de seus mtodos e no precisa da minha opinio ou de algum para dizer que tem algo de errado. Uma classe final quebra o conceito de extensibilidade do Java e principalmente do polimorfismo.

Sun Certified Java Programmer Guia do Exame SCJP

package cap1.x; public final class Pai { } class filho extends Pai{} /* isso no compila; a class Pai no pode ter filho * questo de gentica */

final aplicado a um mtodo significa que o mtodo herdado por uma subclasse, porm a subclasse NO pode subscrever esse mtodo, na tentativa do cdigo no compilar. O modificador final uma segurana onde se torna classe, mtodos e variveis inalterveis.
package cap1.x;

class Papi { final void setNum(){System.out.println(final);} } /* aqui estou subscrevendo meu mtodo final, isso no vlido para um cdigo que no compila */ class fifi extends Papi{ public void setNum(){} }

package cap1.x; class Al{ final void setName(){System.out.println(final herdado);} } class Est extends Al{ public static void main(String[] args) { new Est().setName(); }} Imprime: final herdado

Captulo 1 - Fundamentos - declarao de nveis do pacote e acesso

Classes abstract completamente o oposto de uma declarao de final class. Em uma abstract class, obrigatrio haver uma class extends para ela fornecer implementaes dos mtodos abstract. Regras de abstract: Nunca usar abstract com: final e private. Uma class abstract pode ter mtodos abstract ou no. Os mtodos abstract terminam com ponto-e-vrgula e tm o modificador (abstract) que os acompanham Um mtodo abstract na class, a mesma deve ser abstract, seno o cdigo nem compila. No se instancia algo abstract (new class()) isso nem compila. Possuem construtores das classes abstract.

package cap1.x; public abstract class Bike { public void cor(){} //mtodo no abstract sem modificador e com chaves {} abstract void marca();//mtodo abstract com modificador e ponto-e-vrgula } package cap1.x; public class Guri extends Bike{ /* com mtodo da class abstract implementado * corretamente, o cdigo compila */ public void marca(){System.out.println(caloi);} public static void main(String[] args) { }}

Uma class concreta deve fornecer implementaes para todos os mtodos abstract da class no concreta. Isso uma REGRA, porm uma class filha abstract no tem obrigao de fornecer implementaes de nenhum mtodo abstract da class pai abstract.

Sun Certified Java Programmer Guia do Exame SCJP

package cap1.x; public abstract class Jogo { abstract void nome(); } abstract class start extends Jogo{ /* a class abstract no tem obrigao de implementar * os mtodos da superclass abstract */}

No compila
package cap1.x; public abstract class Notcomp { void setName(); // no compila, o modificador abstract foi omitido public static void main(String[] args) { /* no compila; a class concreta no implementa o mtodo abstract da class abstract */ Notcomp nt = new Notcomp(); System.out.println(zomm); }} package cap1.x; public abstract class Zz { abstract void ordem(); } package cap1.x; class Zazz extends Zz{ /* no compila; a class concreta no implementa o mtodo abstract da class abstract */ public static void main(String[] args) { }}

Captulo 1 - Fundamentos - declarao de nveis do pacote e acesso

O mtodo abstract obrigado a ser implementado por uma class concreta. O uso do modificador private com abstract no combina muito bem, devido o uso do modificador ser restrito a class. Veja o problema:
package cap1.x; public abstract class Problem { private abstract void setNN(); /* o cdigo no compila abstract and private jamais, abstract e final tambm no*/ }

package cap1.x; abstract class ProFin { /* tambm no compila * */ final abstract void setnn(); public static void main(String[] args) { }}

O uso dos modificadores: public e default class, mtodos e variveis abstract, native somente mtodos private, protected, final mtodos e variveis stricfp classes e mtodos

Sun Certified Java Programmer Guia do Exame SCJP

Interface apenas um contrato que a classe deve cumprir com a interface que a implementa. As interfaces: No fazem parte da herana Java. Todos os mtodos de uma interface so public e abstract implicitamente. As variveis so implicitamente public static final. Uma interface pode aplicar extends em outra, porm jamais implementar. Uma interface no pode implementar uma class. Uma class pode implementar varias interfaces. No se podem ter mtodos com chaves{} em uma interface. As variveis/mtodos no tm outro modificador alm de public.

package cap1.y; public interface Dados { int z =10; void num(); } package cap1.y; class joga implements Dados { /* o cdigo compila normalmente; implementei meu mtodo e imprimi o valor da interface*/ public void num() { } //mtodo implementado public static void main(String[] args) { System.out.println(z); }}

Captulo 1 - Fundamentos - declarao de nveis do pacote e acesso

public interface Dados { int z =10; void num(); } public class Jhg implements Dados { static int z=8; public void num() { } public static void main(String[] args) { /*refere-se ao static da class * */ z=9; //no compila; tentei alterar o valor de uma varivel final da interface }} Dados.z=20; public class Nointer implements Dados{ void num(){} /* no compila onde est o public? No posso converter de public para default */}

No posso combinar nenhum destes modificadores com os mtodos da INTERFACE: final o mtodo no pode ser subscrito private o mtodo no pode ser herdado native somente a mtodos stricfp classes e mtodos synchronized somente a mtodos concretos e blocos de cdigo. (interface mtodos abstract)

interface Corp { void seta(){} /* no posso ter mtodos com chaves em uma interface, * pois os mtodos so implicitamente abstract aqui */}

10

Sun Certified Java Programmer Guia do Exame SCJP

Modificador de Acesso
Este conceito to importante quanto qualquer outro assunto e no exame, a Sun lida com eles em todos os assuntos. s vezes, o escopo da pergunta sobre Threads, mas, na verdade, o objetivo testar o uso dos modificadores de acesso.

Public funciona da seguinte forma: se a class public, voc pode ter acesso aos membros public e protected dessa classe.

Agora, se sua class no public, ou seja, default e se os membros forem public (mtodos e variveis), o acesso ainda por pacote. Tudo depende do modificador da class para depois verificar se o membro visvel ou no.
package cap1.f; public class Fog { private int z; public void cor(){} } package cap1.g; import cap1.f.Fog; class Ge{ /* vlida a class Fog public e o mtodo cor tambm * s no posso chamar a varivel private aqui */ public static void main(String arg){ new Fog().cor(); }}

Captulo 1 - Fundamentos - declarao de nveis do pacote e acesso

11

package cap1.g; class Refrig { public void marca(){} } package cap1.f; import cap1.g.Refrig; /* no compila; a class Refrig s vista dentro do package cap1.g se a tentativa de importar para outro o cdigo no compilado */ public class Ben { public static void main(String[] args) { }

package cap1.f; public class Aviao { private int num=10; } package cap1.f; public class Opera { public static void main(String arg[]){ System.out.println(new Aviao().num); } /*no compila; a varivel num private da class aviao; ningum pode saber que ela existe */ }

Veja na pgina seguinte alguns exemplos:

12

Sun Certified Java Programmer Guia do Exame SCJP

Protected tem apenas um objetivo acessar, um membro da class atravs de um pacote diferente. Porm, somente funciona atravs da herana.

package cap1.g; /* observe o package dessa class */ public class Zer { protected void zar(){System.out.println(membro protected);} } package cap1.f; import cap1.g.Zer; class Zr extends Zer{ /* o mtodo com o modificado protected foi herdado e estou chamando-o */ public static void main(String[] args) { new Zr().zar(); }} package cap1.g; /* observe o package dessa class */ public class Zer { protected void zar(){System.out.println(membro protected);} } package cap1.f; import cap1.g.Zer; class Zarra extends Zer{ /* isso no compila; no posso usar o nome da superclasse para chamar o mtodo protected */ public static void main(String[] args) { new Zer().zar();

Captulo 1 - Fundamentos - declarao de nveis do pacote e acesso

13

} } Exception in thread main java.lang.Error: Unresolved compilation problem: The method zar() from the type Zer is not visible

Varivel Local
Uma varivel local s pode ser marcada com o modificador FINAL; qualquer outro o cdigo nem compila.
class Foo { void f(){ /* no compila; modificador invlido para esse tipo de variavel*/ private int z=0; }} class Fac { void setN(){ /* modificador vlido para a varivel local * o cdigo compila tranquilamente */ final int a=0; } }

Regras: As variveis locais antes do uso devem possuir um valor, caso contrrio, um erro de compilao ocorre ao tentar usar uma varivel local sem valor. Elas no recebem valor padro como as variveis de instncia. So destrudas aps a concluso do seu escopo.

14

Sun Certified Java Programmer Guia do Exame SCJP

class Fac { void setN(){ int z; System.out.println(10); /* compila normalmente; no usei a varivel local, apenas declarei */ }} class Foo { void f(){ /* no compila; tentei usar uma varivel local sem valor; elas no recebem um valor padro como as variveis de instncia */ int num; System.out.println(num); }}

Construtores
Refere-se construo de objetos da classe. Posso usar qualquer um dos modificadores: public, protected, default e private. Um construtor jamais pode ter: final aplica-se somente a mtodos, classes e variveis static somente a variveis e mtodos abstract somente a classes e mtodos synchronized somente a mtodos e blocos native somente a mtodos stricfp classes e mtodos

Um construtor tem o mesmo nome da classe sem o tipo de retorno e sempre sobrecarregado. Se houver um tipo de retorno, ele ser

Captulo 1 - Fundamentos - declarao de nveis do pacote e acesso

15

um mtodo e no um construtor, porm um mtodo que tem o mesmo nome da classe.


public class Bola { Bola(){} Bola(int z){} /* dois construtores */ }
z

um construtor s pode chamar outro construtor. No pode chamar um construtor dentro de um mtodo ou um bloco. Sempre dentro de outro construtor. ISSO UMA REGRA.

public class Ball { public Ball(int a) { } } /* a class filha obrigada a chamar o construtor da superclass, seno o cdigo nem compila */ class Player extends Ball{ Player(){ super(2); }}

Se o programador no fornecer nenhum construtor, o compilador fornecer um sem argumentos. O compilador sempre faz uma chamada implcita para super(). Dica: No se esquea que o construtor padro somente fornecido quando no declaramos nenhum construtor.

16

Sun Certified Java Programmer Guia do Exame SCJP

public class Peek { } class Pee extends Peek{ Pee(){} /* chamada implcita para super()*/ } public class Nota { Nota(int n){} } class Al extends Nota{ Al(){} /* o cdigo no compila; a superclass no tem nenhum construtor sem argumento. * ento sou obrigado a chamar o construtor criado explicitamente */ } public class Nota { Nota(int n){} Nota(){} } class Al extends Nota{ Al(){} /* agora compila uma chamada implcita para super() - voc no obrigado a chamar todos os construtores */ }

super sempre chama a class pai

this sempre chama algo sendo executando no momento e no caso do construtor, chama o da prpria class.

Captulo 1 - Fundamentos - declarao de nveis do pacote e acesso

17

public class ConstPriv { private ConstPriv(){} public static void main(String[] args) { }} /* o cdigo no compila a subclass que est chamando o construtor da superclass, que private e ela nem deveria saber que ele existe*/ class Cont extends ConstPriv{ Cont(){} }

Modificador Static
Permite acessar um membro sem precisar criar uma instncia da classe(new class()).

mtodos, variveis, blocos e class(aninhada). Esses podem ser marcados com o modificador static.

Isso nao pode ser usado com o modificador static: variveis locais apenas final construtores usado para criar a instncia class public e default interface public e default enum public e default.

public class Zorra { static int n=9; public void run(){ int n1=n; } /* aqui no h problemas, nenhum membro no static pode chamar os membros static. observe que o acesso direto*/}

18

Sun Certified Java Programmer Guia do Exame SCJP

public class Member { int z=10; static void setNum(){ int z1 = z; /* no compila; mtodo static chamando um membro no static isso no vlido o membro no static precisa de uma instncia de class */ }}

o valor de um membro static compartilhado por todos. Static s visualiza outro static.

public class Full { static int z=20; public static void main(String[] args) { System.out.println(z); } /* no h problemas aqui, o cdigo compila tranquilamente */ } import static java.lang.System.out; public class FullProb { int num=0; public static void main(String[] args) {

out.println(num);
} /* no compila o membro no static sendo chamado dentro de um contexto static */ }

Captulo 1 - Fundamentos - declarao de nveis do pacote e acesso

19

Enum
um tipo de class especial, o objetivo aqui criar constantes. Pode ser declarado fora de uma class ou dentro de uma class. Modificadores vlidos:

Public e default

Invlidos: final abstract static private protected


public class Flor { enum floresta{LEAO, LEOA, TRIGRE} public static void main(String[] args) { floresta f = floresta.LEAO; System.out.println(f.toString()); } /* imprime LEAO */ }

No se cria instncias de enum:


floresta f = new floresta() no compila enum cidade{CURITIBA, NATAL, PORTOALEGRE} class Brasil { /* enum fora da class vlido */ public static void main(String[] args) { Cidade c = Cidade.CURITIBA; System.out.println(c); } }

20

Sun Certified Java Programmer Guia do Exame SCJP

public class EnumNo { public static void main(String[] args) { enum time{Flamengo,Palmeiras}; /*no compila enum dentro de um mtodo */ } } private enum Veiculos { /* no aceita nenhum modificador alm de public e default*/ } package cap1.f; public enum Map { BIG(8),HUGE(10); Map(int z){ id=z; } int id; /* declarao vlida; construtor enum sobrecarregado*/ }

Captulo 2

Herana, polimorfismo, retorno covariantes


A herana permite a flexibilidade e a facilidade de manuteno. Com a herana, possvel criar classes mais especializadas sobre a classe-pai. Um dos dois benefcios da OO est na flexibilidade e na manuteno, porm isso no acontece apenas porque o Java implementa os conceitos da OO. Isso depende do programador e o uso do encapsulamento um beneficio essencial para uma boa implementao da OO. Porm, vale ressaltar que depende do programador. A capacidade de fazer alteraes no cdigo de implementao sem interromper o cdigo das outras pessoas que estiverem usando, isso encapsulamento.
public class Encap { private int z=0; public void setConecta(){} public int getError(){return z;} /* o fato de ter variveis de instncia private e mtodos pblicos para acessar o contedo private j implementa a ideia de encapsulamento */ }

22

Sun Certified Java Programmer Guia do Exame SCJP

Polimorfismo - permite a criao de muitas formas e tem o relacionamento semelhante herana. A reutilizao est inserida no conceito de polimorfismo.

Quando se passa no teste -UM, temos o polimorfismo. aplicado tambm com INTERFACE pela palavra-chave implements e pela herana com a palavra-chave extends.
public class Veiculo {} class Carro extends Veiculo{} // carro -UM veiculo interface Som{} /* Vectra um carro que implementa um Som implements -UM. */ class Vectra extends Carro implements Som{}

Varivel de referncia determina qual mtodo ser chamado e durante a execuo, o seu tipo no pode ser modificado. Mas... pode referir-se ou apontar para qualquer objeto que passe no teste -UM. A varivel de referncia fica antes do = (sinal de igualdade). Vlidos:
Carro car = new Carro(); Object o = car;//Object super de car Veiculo v = car;//Veiculo super de car carro

Invlidos:
Veiculo v = new Veiculo();//aqui vlido Som s = v; //Som sub de Vectra Carro c = v;//Carro sub de Veiculo e no super

Captulo 2 - Herana, polimorfismo, retorno covariantes

23

O tipo da varivel de referncia s pode chamar aquilo que a superclass conhece, caso contrrio, o cdigo nem compila.
public class Concorrencia { void setTel(){} } class Voip extends Concorrencia{ void setTel(){System.out.println(subcsrito);} void setCusto(){System.out.println(custo);} } public class Principal { public static void main(String[] args) { Concorrencia c = new Voip(); c.setTel();//chama o mtodo subscrito; /* a linha abaixo no deixa o cdigo compilar a superclass no tem esse mtodo */ c.setCusto(); }} Exception in thread main java.lang.Error: Unresolved compilation problem: The method setCusto() is undefined for the type Concorrencia

O tipo do objeto s chamado com mtodos de instncia. E quando deseja chamar o mtodo subscrito, usa o tipo do objeto. Static e variveis so chamados por variveis de referncia. Superclass s = new Subclass(); s.mtodo(); //chama o mtodo subscrito

24

Sun Certified Java Programmer Guia do Exame SCJP

Caso o mtodo no seja subscrito, chamado o da superclass. Porm, isso no funciona com os mtodos static, j que nem eles so subscritos e sim, redefinidos, e as variveis tambm no so herdadas. Veja:
public class Casa { static void cor(){System.out.println(azul);} } class Ap extends Casa{ static void cor(){System.out.println(amarelo);} } public class CaPrin { public static void main(String[] args) { Casa c } /* imprime a cor azul */ } = new Ap(); c.cor();

Dica: Combinar ABSTRACT com: - private no herdado; - final no pode ser subscrito; - static no herdado = O CDIGO NO COMPILA

Sobrecarga de mtodos o fato de ter vrios mtodos com o mesmo nome, porm com uma lista de argumentos com tipos diferentes. No mtodo sobrecarregado, o tipo de varivel de referncia diz qual mtodo vai ser chamado, ao contrrio do tipo do objeto que chama o mtodo subscrito pela subclasse.

Captulo 2 - Herana, polimorfismo, retorno covariantes

25

class Mundo {} public class Terra extends Mundo{} public class Galatix { void chama(Mundo m){ System.out.println(mundo chamando); } //mtodo sobrecarregado void chama(Terra t){ System.out.println(terra chamando); } public static void main(String[] args) { Galatix g = new Galatix(); Mundo m = new Mundo(); Terra t = new Terra(); /* aqui ele chama mundo e depois terra, de acordo com o tipo passado em args */ g.chama(m); g.chama(t); /*neste aqui, chama o tipo de referncia e no o tipo do objeto Terra. */ Mundo m2 = new Terra(); g.chama(m2); }} EXIBI: mundo chamando terra chamando mundo chamando

Regras do sobrecarregado: Deve alterar a lista args Pode lanar excees novas e mais abrangentes Pode alterar o tipo de retorno

26

Sun Certified Java Programmer Guia do Exame SCJP

Regras do subscrito: no pode alterar a lista args no pode alterar o tipo de retorno (exceto com o retorno de covariantes Java 1.5). Vlido somente para os objetos. pode lanar excees novas e menos restritivas.

Para entender, basta lembrar dos recursos de herana como UM. A partir do Java 1.5 permitido que o mtodo subscrito retorne um valor que passe no teste -UM, desde que esse seja um objeto e no um tipo primitivo.
public class Super { void soma(){} public static void main(String[] args) { } } /* no compila o mtodo subscrito lanando uma exceo mais abrangente que o mtodo da superclass */ class Sub extends Super{ void soma() throws Exception {} /* dica- quando no declaro uma exceo, implicitamente meu mtodo lana uma exceo no verificada RuntimeException*/ } public class Sitio { void mum() throws Exception{} public static void main(String[] args) {} } class Cad extends Sitio{ void mum(){} /* aqui no h problemas, minha subclasse subscreve; o mtodo no tem obrigao de lanar uma exceo ou tratar */ }

Captulo 2 - Herana, polimorfismo, retorno covariantes

27

public class Cobra { void cor(){} public static void main(String[] args) {} } class Minhoca extends Cobra{ void cor() throws NumberFormatException{} /* o cdigo compila sem problemas ja que a subclass lana uma exceo menos abrangente que da superclass */ } public class Tarta { void casco(){} public static void main(String[] args) {} } class Cagado extends Tarta{ void casco() throws Exception{} /* o cdigo no compila a subclass est lanando uma exceo mais abrangente que da superclass */ }

Converso de variveis de referncia tenha muita ateno ao se deparar com este assunto no exame. Aparece por todo o exame e as questes no so as mais simples de responder.

28

Sun Certified Java Programmer Guia do Exame SCJP

public class Tranpor {} class Onibus extends Tranpor{} public class Conducao { public static void main(String[] args) { Tranpor t = new Tranpor(); Onibus o =(Onibus)t; /* o cdigo compila devido s classes envolvidas Tranpor e Onibus fazerem parte da mesma herana, porm uma exceo lanada e no posso dizer que todo Transporte um nibus */ }} Exception in thread main java.lang.ClassCastException: public class Esport {} class Boxe extends Esport{} public class Quadro { public static void main(String[] args) { Esport e = new Boxe(); Boxe b =(Boxe)e;//compila e roda sem problemas Esport es=b;//boxe um esport }

public class Esport {} class Capoeira extends Esport{} public class CapBa { public static void main(String[] args) { Esport t = new Esport(); Capoeira ca=(String)t; } /* nem compila; String no faz parte da herana entre essas classes, o compilador no permite a compilao*/ }

Captulo 2 - Herana, polimorfismo, retorno covariantes

29

Invlido:
Esport p = new Esport(); // no posso converter o objeto //Esport em Boxe: Boxe bh = (Boxe)p;

Porm, o cdigo compila, mas lana uma exceo.

Implementando uma interface um pouco mais de regras a serem seguidas. Uma classe concreta deve implementar todos os mtodos de uma interface. Caso exista uma subinterface, os mtodos dela tambm devem ser implementados.
interface luz extends cor{ void marca(); } interface cor{ void ss(); } class carr implements luz{ /*deve implementar todos os mtodos de luz e cor */ public void marca(){} public void ss(){} }

uma interface no implementa nada, somente estende com extends a outra interface.

interface roda{} /* vlida a relao entre as interfaces */ interface modelo extends roda{}

30

Sun Certified Java Programmer Guia do Exame SCJP

interface moda implements loja{} /* nem compila; a interface no implementa nada*/ interface loja{}

interface roupa{} /* no compila; uma class no aplica extends em nada que seja uma class e roupa uma interface */ class fab extends roupa{}

Retorno de covariantes Este no um assunto complicado. Porm, no exame ele apareceu a todo o momento, sempre quando envolvia herana e a subscrio estava no retorno de covariantes marcando presena. Para entender, basta lembrar dos recursos de herana. -UM, no Java 1.5, permite que o mtodo subscrito retorne um valor um.(Desde que seja um objeto e no tipos primitivos)
public class Foo { Object go(){return null;} } class Bar extends Foo{ /* String -um Object; tranquilamente */ String go(){return null;} }

cdigo

compila

Captulo 2 - Herana, polimorfismo, retorno covariantes

31

public class Primit { int go(){ return 1;} } class Prim extends Primit{ char go(){return d;} /* o cdigo no compila, alterei o tipo, porm no args char no passa no teste -um para o tipo primitivo; isso s funciona com objetos.*/ } class Numbr { Number go(){return null;} } class numb extends Numbr{ Integer go(){return null;} /* o cdigo compila normalmente; objeto Integer um Number */ } public class Numeros { int go(){ float f=10.0f; return (int)f; } /* compilar normalmente se remover ( ); o f de 10.0 no compila */ } public class Varia { int go(){ return 10.0; /*no compila o tipo de retorno; int e no double */ } }

32

Sun Certified Java Programmer Guia do Exame SCJP

public class Floa { float go(){ return 1; /* compila normalmente no h problema retornar um int para um float */ } public static void main(String ar[]){ System.out.println(new Floa().go()); } } Exibe 1.0

Modificador Static dicas


No podem ser subscritos e sim, redefinidos. O seu valor compartilhado em toda a classe. No pertence a nenhuma instncia da classe Somente podem ser chamados por outro static

public class SupStatic { static void set(){System.out.println(super);} public static void main(String[] args) { SupStatic sp = new substati(); sp.set(); } /* o mtodo que chamado foi da varivel de referncia, j que os mtodos static no so subscritos */ } class substati extends SupStatic{ static void set(){System.out.println(sub);} }/* imprime super*/

Captulo 2 - Herana, polimorfismo, retorno covariantes

33

public class Wv { static void num(){System.out.println(static);} void num(){System.out.println(non-stati);} public static void main(String[] args) {} /* o cdigo no compila dois mtodos com tipos de argumentos iguais, com o mesmo nome e retorno tambm. O fato de ser static no muda a regra Static no um tipo de retorno e sim um modificador */ } public class Kv { static int num; public static void main(String[] args) { System.out.println(num); } /* varivel static; posso chamar diretamente e no precisa de uma instncia de class */ } public class StaticMet { void mtodo(){} public static void main(String[] args) { mtodo(); } /* no compila o mtodo no static sendo chamado dentro de um mtodo static*/ }

Acoplamento o estado desejvel o fraco, o indesejvel o forte.

Quando uma classe mal encapsulada, temos a o acoplamento forte e suas variveis public um exemplo. Quando a class A

34

Sun Certified Java Programmer Guia do Exame SCJP

sabe mais do que devia da class B e uma alterao em uma das classes danifica a outra, isto um acoplamento forte.
public class A { int r =10; void met(){ B b = new B(); r=b.num; }} /* observe que a class B e a class A sabem demais uma sobre a outra e isso um estado indesejvel */ class B{ public int num=50; void met(){ num = new A().r; }}

Coeso o grau, o objetivo ou o foco de uma classe. Quando desenvolvemos uma class e ela faz tudo como, por exemplo, gerar relatrio, conectar um banco de dados etc., isso uma baixa coeso porque no tem nenhum foco. A partir do momento em que defino o objetivo, o foco de minha classe, tenho alta coeso. A coeso est relacionada classe estar focada ou no.

Captulo 2 - Herana, polimorfismo, retorno covariantes

35

public class Cad_cli { void dados(){} void endereco(){} } /* tenho aqui alta coeso entre as classes */ class Relatorio{} class Bd_connectar{} public class Usuario { void relat(){} void savearq(){} void exportar(){} /* tenho aqui a baixa coeso, pois uma class que faz tudo. Aqui, tenho o problema de que ter que digitar o cdigo novamente, caso precise de um dos recursos dos mtodos em outra classe*/}

Captulo 3

Atributos

Tenha cuidado com as questes com fluxo de controle, pois elas tendem a ser mais difceis por necessitarem de mais ateno do candidato. As variveis aparecem em qualquer lugar de uma classe java e conhecer como ela se comporta, tendo como base onde foi declarada, essencial para acertar as questes no exame. O uso de uma varivel local permitido aps ser atribudo o valor e somente vista naquele contexto onde foi declarada. Lembre-se que as variveis locais no recebem um valor padro quando so declaradas. Uma varivel de instncia de objetos recebe o valor null, como padro. Uma tentativa de manipular esse valor lanando uma exceo no verificada: NullPointerException.
Varivel de Instncia

- Os seus valores so iniciados automaticamente e so declaradas fora de qualquer mtodo ou bloco.

38

Sun Certified Java Programmer Guia do Exame SCJP

Um detalhe importante o uso do modificador final em uma varivel; esta deve ter um valor inicial, caso contrrio, o cdigo no compila. Vejamos no nvel do cdigo.
public class Varva { int z; void mtodo(){ int z; System.out.println(z); /* o cdigo no compila; tentei usar uma varivel local sem inicializar*/ } public static void main(String[] args) {}}

public class Var { int z; void mtodo(){ int z; System.out.println(this.z); /* aqui no temos problema nenhum, a varivel da instncia chamada e no o cdigo local, e imprime 0 */ } public static void main(String[] args) { new Var().mtodo(); }}

Variveis de instncia do array - no se pode esquecer que no fundo, um array um objeto e isso fundamental ter em mente. Na declarao, um array null, mas quando este instaciado os elementos contidos nele sero do tipo declarado.

Captulo 3 - Atributos

39

public class Array { int[] array;// aqui recebe null porque apenas declarei int [] ar = new int[2];// aqui recebe o valor padro cada elemento public static void main(String[] args) { /* vlido; os cdigos abaixo compilam normalmente */ System.out.println(new Array().array); System.out.println(new Array().ar[1]); System.out.println(new Array().ar);//imprime a referncia do objeto(j que instanciei) } resultado: null 0 I@18d107f

Varivel local se inicializar uma varivel local dentro de um bloco condicional (if/while), o compilador ir reclamar.

public class Cond { void met(){ int n; while(true){ n=4; } System.out.println(n); } /* esse cdigo no compila porque estou inicializando minha varivel local dentro de um bloco de instruo e isso no ser vlido se o cdigo for false. Ento, o que o compilador faz? Para evitar transtorno, ele no aceita, mesmo sendo true */}

Captulo 4 - Operadores

59

boolean b = true; if(b = false); // ele recebe false no compara //invalido o codigo abaixo int x=1; if(x = 0)// x inteiro e no booleano.

Enums

Enum: um tipo especial de class. Os membros de uma enum so constantes. Pode ser declarado tanto fora quanto dentro da class No valido declarar uma enum dentro de um mtodo.

Os enums so static e final. Para enums pode usar o = = ou equals() para comparao das duas variveis.
class EnumEqua2l{ enum Color{RED, BLUE} public static void main(String args[]){ Color c1 = Color.RED; Color c2 = Color.BLUE; if(c1= =c2){ System.out.println(= =); } if(c1.equals(c2)){System.out.println(dot equals);} }}

60

Sun Certified Java Programmer Guia do Exame SCJP

enum Fest{CARNAVAL,SAOJOAO,NATAL} class Em{ public static void main(String args[]){ Fest f = Fest.NATAL; System.out.println(f.toString()); } } class Festa{ enum zorra{TIRADENTES,SOLDADO}; //static,public,protected. default - valido //abstract, final - invalido public static void main(String args[]){ System.out.println(zorra.SOLDADO); } }

No compila
class Enum{ final enum Pu {FUTEBOL, VOLEI,BOXE}; public static void main(String args[]){ System.out.println(Pu.BOXE==Pu.BOXE); Pu p = Pu.FUTEBOL; Pu p2 = Pu.FUTEBOL; System.out.println(p.equals(p2)); } } //no compila olha o modificar de acesso de enum class Enum{ abstract enum Pu {FUTEBOL, VOLEI,BOXE}; public static void main(String args[]){ System.out.println(Pu.BOXE==Pu.BOXE);

Captulo 4 - Operadores

61

Pu p = Pu.FUTEBOL; Pu p2 = Pu.FUTEBOL; System.out.println(p.equals(p2)); } } //no compila olha o modificar de acesso de enum

Instanceof
Este operador usado apenas para variveis de referencia de objeto para verificar se um objeto especifico de outro.
class A{} class B extends A{ public static void main(String args[]){ A meuA = new B(); // um objeto de b do tipo A B meuB = new B(); m2(meuA); } public static void m2(A a){//esse mtodo so recebe argumento que seja da classe pai if(a instanceof B) ((B)a).doStuf(); // converto o objeto a em b } public static void doStuf(){ System.out.println( a refere to a B); }}

62

Sun Certified Java Programmer Guia do Exame SCJP

Um objeto s vai ser especifico do outro se passar no teste -UM. bom lembrar que se uma class implementa uma interface ela faz parte do teste -UM ento temos ai um instanceof valido:

interface foo{} class a implements foo{} class b extends a{} a a = new a(); b b = new b(); a instanceof Foo b instanceof a b instanceof Foo;//implementao indiretamente

Cdigo invalido para instanceof.


class Cat{} class Dog{ public static void main(String[] args){ Dog d = new Dog();// novo objeto de dog System.out.println(d instanceof Cat); } } /* aqui dar pau ja q d nem conhece Cat*/ /* para ser verdadeiro teria que usar -UM.*/

Os arrays so objetos em qualquer circunstancia e sempre ser uma instancia de Object.

Concatenao de Strings
O operador de + pode concatenar String e somar int, porm depende do valor a sua esquerda ou nvel de precedncia.

Você também pode gostar