certificacao java scjp 5

Upload: lanagata

Post on 11-Jul-2015

432 views

Category:

Documents


1 download

TRANSCRIPT

Certificao JAVA Reviso Certificao Java 5 Kathy Sierra Capitulo 1 Declarao e Controle de Acesso Identificadores Legais

1

Os identificadores legais em java, s podem comear por uma letra, $ ou _. Apenas isso qualquer forma diferente o cdigo no compilado. Claro que o uso das palavras chaves no permitido. Conveno da Sun apenas uma forma organizada de voc desenvolver sua sintaxe, porm nada ti obriga a usar uma em particular, porm a conveno a mais utilizada por todos os programadores nato da linguaguem. Veja o seguinte: Para: Interface: as letras devem ser maisculas e as demais minsculas se formar um nome composto o inicio de cada nome deve ser maisculo. Mtodos: a primeira letra deve ser minsculo e seguir o padro JavaBeans que para obter algo de um mtodo voc usa get, fazer algo setNome. Variveis - deve iniciar com letras minsculas, exceto as declaradas como final e do tipo enum que recomendado ser em maisculo. Java Bean Nomeao A nomeao foi criada para ajudar desenvolvedores a criar componentes java de fcil interpretao a outros programadores. Boolean is ou get. Chamada set devem usar argumentos ou no e deve retornar um tipo void. Obter get - no pode ter argumentos e deve retornar um tipo. E ser um mtodo public(set e get). Classes Uma class declarada como padro(default) ela pertence apenas aquele pacote(pasta) aonde ela foi criada. No possvel acessar uma default class de um pacote diferente mesmo que ele tenha um import: package p; class Ave{} package A; import p.Ave; class Galo extends Ave{} Esse codigo nao compila devido minha class Ave ser padrao daquele pacote, ela dele e ningum pode usar ( igual a mulher do seu vizinho, logicamente dele). A soluo para isso declarar a class Ave como public assim ela estaria disponvel para o mundo, ou seja, Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA

2

para qualquer pacote. Quando uma class public voc pode importa-la para outro pacote diferente.package cap1.Fornecedor; class Dept { } package cap1.Produto; import cap1.Fornecedor.Dept; public class Prod { public static void main(String[] args) { System.out.println("Produto fornecedor"); } } /* esse codigo nao compila pois a Class Dept default entao nao pode ser importada para outro package a nao ser aquele aonde foi declarada, cheio de pegadinha com isso nos simulados */

Class abstrataAs class abstratas elas nunca podem ser declaradas como FINAL, pois uma classes abstrata ela deve ter algum que a extenda. E : Jamais usar FINAL E ABSTRACT juntos tanto para classes quanto para mtodo abstract. Uma class abstrata pode ter 1 ou nenhum mtodo abstrato, porem se uma class concreta tiver um mtodo abstrato, ela deve ser declarada como abstract. Para se entender de abstrato aquilo que no real exemplo: veiculo pode ser qualquer coisa moto, carro, avio. Por isso que no se criar instancia new de objetos de uma classe abstrata. S se cria instancia de uma class quando algo real. Como Galinha, Carro. Isso ai posso criar um objeto e fazer dele o que quiser: dar nome, cor, idade etc. abstract class Lopes{ void setIdade(int d); }package cap1.Carros; public abstract class Celta { } package cap1.cliente; import cap1.Carros.Celta; class Cli extends Celta{ public static void main(String args[]){ System.out.println("funfou"); } } /* observe que importei uma class de outro pacote, ela sendo publica e extends a ela*/

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA Se ligue:package cap1.Produto; import cap1.Fornecedor.*; public class Prod { public static void main(String[] args) { System.out.println("Produto fornecedor"); } } /* essa funciona observe que coloque * na importao informando que vou importar todas as classes visiveis. */ a sintaxe abaixo no compila package cap1.Carros; abstract class Moto { int z=10; } package cap1.cliente; import cap1.Carros.Moto; public class Honda extends Moto{ public static void main(String[] args) { } } Exception in thread "main" java.lang.Error: Unresolved compilation problem: Descubra porque... muita ateno nesse momento....

3

PEDAGINHAS DO EXAME:package cap1.Carros; public abstract class Aviao { String nome="Boing"; } package cap1.cliente; import cap1.Carros.Aviao; public class Pass extends Aviao{ public static void main(String[] args) { System.out.println(nome); } } /* isso nao compila a variavel nome da class abstract nao eh static e to tentando acessa-la dentro de um metodo static*/ package cap1.Carros; public abstract class Aviao { static String nome="Boing"; } package cap1.cliente; import cap1.Carros.Aviao; public class Pass extends Aviao{ public static void main(String[] args) { System.out.println(nome); }}

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA/* apesar dela ser static agora, ela s vista nesse pacote acesso default*/ package cap1.Carros; public abstract class Aviao { public static String nome="Boing"; } package cap1.cliente; import cap1.Carros.Aviao; public class Pass extends Aviao{ public static void main(String[] args) { System.out.println(nome); } } /* Agora sim funciona, percebe como a Sun vai sacanear com isso ne? to errando bastante questoes de declaracao de escopo e fundamentos devido a essa falta de ateno*/

4ta -

class Bike{ void cor(); } class Boy extends Bike{ void cor(){} public static void main(String ar[]){ new Boy().cor(); } } /* isso aqui nao compila o metodo da class Bike nao abstract deve ser, pq usei ; no final da instruo do mtodo*/ abstract class Bike{ abstract void cor(); } class Boy extends Bike{ void cor(){} public static void main(String ar[]){ new Boy().cor(); } } /* esse aqui funciona de qualquer forma na implementacao do metodo tanto com o controle de acesso public ou default so nao pode ser menos restrito ou seja, um private*/ Interface apenas um contrato feito entre class e a interface que ela vai implementar. As interface serve para o caso do seguinte: Minha class Ferrari ou seja meu carro Ferrari ele vai ser o nico entre outros 10 carros de luxo que vai ter efeitos especiais no painel. Ento fazemos um contrato com a interface que vai prestar esse servio de adaptar isso a minha Ferrari. E minha class Ferrari vai cumprir todas as regras da Interface.

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA interface Efeitos{ void setPiscar(); void setFarol(); } class Ferrari implements Efeitos{ void setPiscar(){} //no compila o mtodo deve ser declarado como public void setFarol(){}// }

5

uma interface 100% abstrata e no pode ter de maneira nenhuma FINAL em nenhum mtodos dela. A diferena entre interfaces e class abstrata que nas interfaces no posso ter momento nenhum um mtodo que no seja abstrato. Mas posso ter variveis, desde que seja constante. As constantes so public static e final As interfaces so sempre public e abstract implicitamente O mtodo que implementa a interface deve declarar explicitamente como public os mtodos implementados, seno gera o erro de compilao. O valor de uma constante aps a definio ele no pode ser mais alterado o mesmo que voc se trancar em um quarto e mandar jogar a chave fora, ai j era logicamente. No temos em interface acesso default, todos so definidos implicitamente de acordo com que for. Mtodo: public e abstract e variaveis public static e final. Interfaces no implementa outra apenas a entende. (extends) Interfaces so implementadas por classes. E jamais ela implementa uma classe. A nica coisa que interface faz estender a outra e ser implementada por uma class concreta. Class abstrata pode passar a implementao de uma interface para a prxima class concreta.package cap1; public interface Veiculo { int x=10; } package cap1; public class Carro implements Veiculo{ public void setNome(String n){ n="celta"; System.out.println(n); } public void setPlaca(int p){ p=2568; System.out.println(p); } public static void main(String[] args) { System.out.println(x);//10 new Carro().setNome("celta"); new Carro().setPlaca(25); } }

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA

6

/* observe que implementei os metodo e acessei minha variavel x - public static e final */ o cdigo abaixo no compila coloquei minha interface com default e tento acessa-la me outro pacote veja. package cap1.inter; interface Moda { String r = "roupa"; } package cap1; public class Loja implements Moda{ public static void main(String args[]){ System.out.println(r); } } Exception in thread "main" java.lang.Error: Unresolved compilation problem: r cannot be resolved Para resolver esse problema devo fazer isso: package cap1.inter; public interface Moda { String r = "roupa"; } package cap1; import cap1.inter.Moda; public class Loja implements Moda{ public static void main(String args[]){ System.out.println(r); } } ............ Observe que isso tambm no compila: package cap1.inter; interface Moda { String r = "roupa"; } /* default nivel de acesso da minha interface*/ package cap1; import cap1.inter.Moda; public class Loja implements Moda{ public static void main(String args[]){ System.out.println(r); } }

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA Modificadores de acesso

7

que controla o nvel de acesso entre os membros de uma class. Ele pode ser: public, default, private e protect. Importante falar aqui que uma classe s pode ser default ou public. O importante est no nvel da class se ela est disponvel para outra class visualizar ela ento seu membros(mtodos e variveis) est disponvel tambm para ela, claro aqueles que for marcado. //a class B no tem acesso aos membros da class A se declaradas em package diferentes class A{ public int a=10; } class B{ A i = new A(); i.a; } Observe que as duas tm acesso padro mais nenhuma conhece a outra, A nem sabe que B existe pq ela padro.(lembrando que elas tanto em package diferentes). Quando um membro declarado com public todas as classes tm acesso a ele mesmo fora do package(claro tem q importar). Lembrando que a class deve ser public caso contrario nada feito. Os private pertence aquela mesma class ningum poder ver a no ser que seja da class o qual foi declarado. o capital na sua conta bancaria private a somente voc tem acesso certo?. Pense nisso quando ver algo declarado em uma class private. class Conta{ private double real = 1000.0000.000; }

protected e defaultsao bastante parecidos e confudem muito. Se ligue na idia deles: o protected voc pode ter acesso ao membro de uma class mesmo que ela esteja fora do pacote atual, isso atravs de herana. default no possvel ter acesso ao membro de outro pacote a no ser q seja aquele que foi declarado,. Default = = membro deste pacote e ningum vai usa-lo, se quiser que entre no pacote. Mesmo com uma class public se o membro for default ele no pode ser usado em outra classes de outros pacotes. Para um protected no faz diferena se o membro declarado como protected est fora do pacote, ele acessado da mesma forma, atravs da herana.

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA package cert; class Ot{ protected int x=9; int z = 10; } package oth; import cert.*; class Her extends Ot{ System.out.println(x); }

8

Lembrando que variveis de pacotes diferentes(so marcadas como protected) nao sao herdadas, entao ai nada foi herdado, porem a subclass visualiza o membro de uma class que esta em outro pacote. Porem o membro z no visualizado ele nem existe para class Her. As variveis locais elas no recebem nenhum modificador de acesso alem de FINAL. Mas Por que? Simples se elas so locais apenas aquele mtodo ou bloco ento no precisa ter nenhum dos outros modificadores, elas s vo existir ali. Um exemplo so as variveis usando em uma instruo for. Ela existe enquanto o for retorna true. Aps isso elas so destrudas.package cap1.Other; public class Prim { protected static int num = 20; } package cap1; import cap1.Other.Prim; public class Protect extends Prim{ public static void main(String[] args) { System.out.println(num); } } /* aqui ele herdou ops visualiza o membro*/ /* com membro protected nao posso criar uma instancia para acessar o membro protegido assim: Prim p = new Prim(); p.num; */ /*isso eh invalido para membros protegido o codigo nao compila*/

.............................................................package cap1; public class Peca { protected int codPeca=1452; } package cap1.Carros; import cap1.Peca; public class Vectra extends Peca{ public static void main(String[] args) { System.out.println(codPeca); } }

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA/* nesse aqui uma pegadinha minha variavel nao static e to tentado acessa-la atraves de um metodo static*/ Exception in thread "main" java.lang.Error: Unresolved compilation problem: Cannot make a static reference to the non-static field codPeca

9

............................................................package cap1; public class Peca { protected int codPeca=1452; } package cap1.Carros; import cap1.Peca; public class Vectra extends Peca{ public static void main(String[] args) { Peca p = new Peca(); System.out.println(p.codPeca); } } /* nessa aqui crie uma referencia a instancia para acessar um membro protegido e isso no valido*/cdigo no compila observe o exemplo abaixo mesmo pacote e a varivel foi herdada. package cap1; public class Mem { static int a=10; } package cap1; public class MemTest extends Mem { public static void main(String[] args) { System.out.println(a); } }

.........................................................package cap1.Other; public class Vava { static int e=20;//sou apenas deste pacote. } package cap1.inter; import cap1.Other.Vava; public class Vv extends Vava{ public static void main(String[] args) { System.out.println(e); } } /* pacotes diferentes, e a variavel nao foi herdada pq nao ta com protected */ /* as variaveis de instancia e metodos sao membros da classe*/

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA Exemplos com DEFAULTpackage cap1; class Defau { static int x = 10; } /*class que pertence ao pacote*/ package cap1.Carros; import cap1.Defau; public class Fau extends Defau{ public static void main(String[] args) { System.out.println(x); }

10

} /* observe que ele nem importa a minha class que eh somente do pacote dela*/ ............................... package cap1; public class Defau { static int x = 10; } /*minha class eh public disponivel para todos, porem o membro so pode ser visto nesse pacote*/ package cap1.Carros; import cap1.Defau; public class Fau extends Defau{ public static void main(String[] args) { System.out.println(x); } } /*a class eh importada pq ela eh public porem o membro nao posso acessalo de um pacote diferente, somente aonde ele foi declarado isso nao compila*/ Exception in thread "main" java.lang.Error: Unresolved compilation problem: The field Defau.x is not visible

As Variaveis Locais nao podem ter modificadores de Acessopackage cap1; public class VarLoca { public static void main(String[] args) { private int x=10; public int z=20; System.out.println(x + z); } } /* isso nao compila as variaveis locais ela pertence somente aquele escopo aonde foi declarada entao nao se pode usar nenhum tipo de modificador de acesso*/

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVApackage cap1; public class VarComp { public static void main(String[] args) { final int x = 10; System.out.println(x); }

11

} /* isso compila e imprime o resultado, as variaveis locais so podem receber um * modificador, que FINAL, pois ele nao eh de acesso e sim modificador de classe * nao esquecer esse detalhe*/

Mtodos FINAIS O que for declarado como final significa que uma constante e que no pode ser mudada.. no caso de mtodos eles no podem ser subscrito em uma subclass.package cap1; public class Fin extends F{ public void setF(){} public static void main(String[] args) { Fin fi = new Fin(); fi.setF(); } } class F{ public final void setF(){System.out.println("final");} } /* isso nao compila tentei subscrever um metodo final*/ .................... package cap1; public class ArgMet { public void setArg(int x, final int num){ System.out.println(x + " " + num); } public static void main(String[] args) { new ArgMet().setArg(20,30); } } /* esse codigo compila tranquilo, um ponto aqui eh que variaveis de argumentos eh semelhante a variaveis locais, elas nao podem receber nenhum modificador de acesso, apenas os modificadores referente a nao acesso como final*/ package cap1; public class TentARg { public void muda(final int num){ num=50; System.out.println(num); } public static void main(String[] args) { new TentARg().muda(22); } }

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA/* esse aqui ja nao compila variavel no args nao pode ser alterada * pq eh final*/

12

Mtodos Abstract So mtodos que foi declarado porem no possui implementaes dele. Devem ser implementados pela primeira class concreta que extends a class abstract do mtodo. Ele so deve existir em uma class abstract. So subscritos e no sobrecargados. Uma class abstract pode ter 1 ou nenhum mtodo abstrato Mas se a class tiver pelo menos 1 mtodo abstrato eh obrigatrio ela ser abstract.package cap1; public abstract class Abt { public void noAbt(){} public static void main(String[] args) { } } /* compila normal eh uma class abstract porem sem nenhum metodo nao h problema nenhum aqui */ ............... package cap1; public class Noabt { public abstract void chama(); public static void main(String[] args) { } } /* isso aqui nao compila metodo abstract em uma class concreta nao rola*/ .................... package cap1; public abstract class PriAbt { abstract private void setP(); } class Pri extends PriAbt{ private void setP(){} public static void main(String args[]){ } } /* pode parecer que ta implementado mais na verdade nao ta, o metodo da class Pri eh dela e nao tem nada ver com o metodo da abstracta que privado, e esse cdigo nao compila devido abstract & private

jamais,

como abstract e final tb nao permitido */ Lembre-se sempre dos modificadores de acesso default eh aplicado tb com classes abstract nada muda.. referente a ser concreta ou abstract.

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA ***Abstract e Static no se do bem!!package cap1; public abstract class StaticAbt { abstract static void setA(); public static void main(String[] args) { } } /* metodo abstratos nao podem ser static*/ ............. package cap1; public class Varabt { abstract String s = "camilo"; public static void main(String[] args) { } } /*abstract so para metodos e class nada de variaveis*/

13

Mtodos Synchronized usado para sincronizao de mtodos e bloco de cdigos. Mtodos nativos - usado para apenas mtodos. Lembrando que um modificador. Mtodos Strictfp - ele fora os pontos flutuantes no padro IEEE 754. O uso desse modificador em classes e mtodos.

Var-argsEle permite receber inmero valores via parmetro de um tipo declarado. void x(int...g){} Posso receber inmeros parmetros do tipo int. Argumento aquilo que passado explicitamente. void setI(10); Parmetro passo o tipo do que pode receber. Void setD(int a); Na lista de parmetros o var-args deve vim sempre por ultimo. Construtores Eles so sempre chamados quando um objeto construdo. No possui nenhum tipo de retorno. E deve ter o mesmo nome da class. No pode ser marcados como static, final nem abstract. Pode receber um modificador de acesso como protected. class C{ C(String s){} } class D extends C{ public static void main(){} } /*isso nao compila, o compilador chama super() implicitamente porem ela nao encontra o contrutor da super s/ argumentos*/

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA class C{ C(String s){} } class D extends C{ public static void main(){ D(){ super("S"); } }} /*nao compila construtor sendo chamado dentro do metodo*/ class C{ C(String s){} } class D extends C{ D(){ super("S"); } public static void main(){ } } /* aqui compila */ class C{ C(String s){} } class D extends C{ static D(){ super("S"); } public static void main(){ } } /* no compila um construtor nao pode recber, final, static ou abstract*/ class C{ C(String s){} } class D extends C{ D(){ this(); } Material desenvolvido Camilo Lopes - Resumo de Estudo

14

Certificao JAVA public static void main(){ } } /* um construtor chamado ele mesmo recusividade e tb a chamada super nao pode entrar ai ja que nao posso ter this e super no mesmo bloco do construtor*/ class C{

15

C(String s){this();} } /* kd o construtor sem argumentos? isso nao compila*/ Variveis Primitivos so as tradicionais como int, float, double etc. uma vez declarado seu tipo jamais pode ser modificado. Variveis de referencia so usadas para se referir a um objeto. E seu tipo no pode ser modificado nunca. Lembrando que pode se referir a um objeto que passa no teste -um . Exemplo : Cachorro extends Animal{} posso referencia minha varivel de referencia para cachorro e para animal j que cachorro passa no teste -UM. Class Animal{} Class Cachorro extends Animal{} Animal s = new Cachorro(); // minha variavel de referencia s, -UM objeto cachorro do tipo Animal. String s1, s2; Estou me referenciando ao mesmo objeto ou seja String. Variveis de instancia Elas esto dentro de uma class, porem fora de qualquer mtodo e s inicializadas com o valor padro ou no quando uma instancia da classe criada. Arrays So nada mais que objetos de um tipo que armazena elementos de um determinado tipo, mais no fundo sempre so objetos. int array[] = new int[3];//instancie meu array que vai receber elemento do tipo int. int []outro;//aqui eh declaracao e nao cria o array propriamente dito. Variveis transient a varivel ignorada para serializao do objeto. Transient = = ignore essa varivel. So aplicado a VARIVEIS DE INSTANCIA. Variveis volatile - aplicado tambm somente a VARIVEIS DE INSTANCIA. Mtodos e variveis static Quando se cria variveis para serem usadas independente de ter uma instancia dessa class. Um membro static so pode acessar outro membro static jamais uma variveis de instancia da class diretamente.

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA 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. enum Coffe{BIG,HUGE} class Cafe{ public static void main(String args[]){ Coffe c = Coffe.BIG; //a forma de declaracao eh crucial System.out.println(c); } }

16

.............................................class EnuClass{ enum Tam{M(10),P(20),G(30); Tam(int a){ tam=a; }//fim do contrutor private int tam; public int getTam(){ return tam; } }//fim da class especial do tipo enum public static void main(String args[]){ Tam t = Tam.P; System.out.println(t+" "+t.getTam());//exibe P 20 }} import java.util.Scanner; class ModaLoja{ enum idade{INFANTIL(1),ADULTO(2),JOVEM(3); idade(int a){ cod=a; } private int cod; public int getSec(){ return cod; }} public static void main(String args[]){ Scanner dados = new Scanner(System.in); idade id= idade.ADULTO; System.out.println("Escolha a secao 1 - INFANTIL 2 -ADULTO 3 - JOVEM"); int sec = dados.nextInt(); if(sec==id.getSec()){//se for 2 System.out.println("Voce esta na secao de " + idade.ADULTO); }}}/* bem complexo esse, mas bem interessante*/ Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA CAPITULO 2 Herana promove a reutilizao de cdigos para usar o polimorfismo cdigos mais claros o uso de herana previne a duplicao do cdigo.

17

Por exemplo: em alguns programas fazer a modificao em um lugar teria que rastrear os outros pontos para alterar tambm. Com herana isso quebrado. Toda subclasse(+ especializada) ela herda os mtodos da superclasse. Exemplo: class Game{ public void inicio(){ System.out.println("comecou o jogo"); } } class Mortal extends{ public void sub(){ System.out.println("jogo mortal"); } } class GameTest{ public static void main(String args[]){ Mortal jogador = new Mortal(); jogador.inicio(); jogador.sub(); } } obs.: impresso os dois mtodos, porem o ponto chave aqui que a subclasse herdou o mtodo da superclasse implicitamente.

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA Relacionamento -UM - conceito baseado na herana de classes ou implementao de interfaces. Esse item um tipo desse outro Exemplo:

18

carro UM veiculo.(carro um tipo de veiculo). Ferrari UM carro.(Ferrari um tipo de carro). No conceito de herana sempre vamos usar o relacionamento -UM, na sintaxe que vimos anteriormente vimos que a class Mortal -UM jogo da class me Game. class Fami{ public void setF(){System.out.println("Minha familia ");} public static void main (String adas[]){ Tio t = new Tio(); t.setF(); } } class Sob extends Fami{} class Tio extends Sob{/*ele herda tb os metodos da super da super*/} - excetos: private. final quer dizer que no pode ser subcrito, porem herdado. static - no so herdado mais visveis para subclass. Polimorfismo muitas Formas - permite programar no geral. quando uma mesma mensagem enviada para um ou vrios objetos, porem os resultados diferente da temos o polimorfismo. Sabemos que todos os animais corre, porem cada um de uma maneira diferente(cavalo, coelho). Sabemos tambm que o estoque armazena produtos, porem para cada empresa um produto diferente, de acordo com o ramo da empresa. Polimorfismo X interface Interface no faz parte da hierarquia de classe ou seja, uma class no pode extends a uma interface mais pode implementa-la. Polimorfismo - faz parte da hierarquia de classe. Uma classe pode herdar atributos da classe me e pode implementar os mtodos.(marcados como abstract). class Fabrica{ public void setF(){System.out.println("FAbrica");} public static void setFa(){System.out.println(" fabrica static ");} } Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA class Pc extends Fabrica{ public static void setFa(){System.out.println("fabrica static sub");} public static void main(String args[]){ Fabrica f = new Pc(); f.setFa(); }} /* observe aqui que metodos static nao sao herdados, e quando ele chama, o metodo da superclass do tipo da variavel e nao do objeto*/

19

Mtodos subscritos - sempre que tiver uma classe que mtodo de uma superclasse posso subscrever o mtodo Motivos: definir um comportamento especifico a determinado tipo de subclasse. Os mtodos abstratos so os mesmo mtodos subscritos. Porm nunca sobrecarregados. S possvel referenciar a objetos do tipo que a super classe conhea. Voc no vai indicar uma pessoa ou dar referencia boas de uma pessoa para uma vaga de emprego se voc nunca viu e nem conhece essa pessoa certo? Nas classes funciona da mesma forma. Exemplo: class Animal{ public void eat(){ System.out.println("class generic"); } } public class Cavalo extends Animal{ public void eat(){ System.out.println("raa mangalarga"); } } class AnimalTest{ public static void main(String args[]){ Animal a = new Animal(); Animal b = Cavalo(); a.eat();//class generic b.eat();//raa mangalarga } } o cdigo acima imprime os dois mtodo porem primeiro ele imprime um que do tipo animal que um objeto da classe animal e o segundo do tipo animal porem um objeto da classe Cavalo.Ai ele executa o segundo mtodo, bom ai estamos dizendo tambm que a

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA

20

class cavalo -UM Animal, ou seja ela recebe todas as caractersticas de um da class animal que esteja disponvel. O cdigo abaixo o que est em comentrio, caso fosse removido // teramos problemas na compilao pois foi definido um mtodo do tipo animal sendo que a class no possui esse mtodo. Veja: public class Animal { public void printYour(){ System.out.println("chamei a super class"); } } class Horse extends Animal{ public void printYour(){ super.printYour();// chama a superclass } public void buck(){} } public class TestAnimal { public static void main(String args[]){ Animal a = new Animal(); Animal b = new Horse();//referencia animal, mais eh um objeto horse Animal c = new Horse();

a.eat();//chamo o mtodo da classe referente b.eat(); //dar erro pq a class animal nao tem o metodo buck e sim a class horse. //c eh um objeto horse mais nao referente a classe animal. //c.buck(); // esse mtodo no temos no tipo da class animal } } Regras a seguir: O novo mtodo (nvel de acesso)pode ser alterado desde que seja menos restritivo do que substituto. No posso trocar um public para um protected porem o inverso permitido.(Protected Public) Tipo de retorno dever ser o mesmo A lista de argumentos deve ser igual como no mtodo subscrito, seno gera uma sobrecarga. Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA

21

Mtodos estticos no podem ser subscritos. Mais so redefinidos em tempo de execuo chamando o mtodo da superclass do tipo. Super() uma referencia a superclasse. O mtodo subscrito pode ou no lanar uma exceo menos restritiva que a da superclasse.class DuvS{ public static void main(String args[]){ aviao b = new boing(); b.gol(); }} //super class aviao{ void gol(){ System.out.println("gol");} } //subclass class boing extends aviao{ void gol() throws Exception{} } /* isso nao compila o metodo subcrito ta lanando uma nova Exceo mais abragente, implicitamente o metodo da super lana uma exceo no verificada - RuntimeException*/

................................................................................... Para static isso tambm valido veja: Codigo abaixo tambm no compila.class DuvS{ public static void main(String args[]){ aviao b = new boing(); b.gol(); }} class aviao{ static void gol(){ System.out.println("gol");} } class boing extends aviao{ static void gol() throws Exception{} }

............................................. J esses compila:class DuvS{ public static void main(String args[]){ aviao b = new boing(); b.gol(); }} class aviao{ static void gol(){ System.out.println("gol");} } class boing extends aviao{ static void gol() throws RuntimeException{} } //to lanando uma exceo do mesmo tipo da superclass

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVAclass DuvS{ public static void main(String args[]){ aviao b = new boing(); b.gol(); }} class aviao{ static void gol() throws Exception{ System.out.println("gol");} } class boing extends aviao{ static void gol() {} } /* isso valido, mesmo que a superclass lance uma excecao a subclasse nao obrigado a lanar, ja que dessa forma implicitamente a subclass lanca RuntimeException*/

22

Mtodos Sobrecarregados Possibilita usar o nome de um mtodo em uma classe varias vezes porem com argumentos diferentes. Exemplo: posso ter dois arquivos com mesmo nome, porem tipo diferentes em formato.(Word, Excel,pdf). Os mtodos sobrecarregados Podem: alterar o tipo de retorno alterar o modificador de acesso(private, protected) ser sobrecarregado na mesma classe ou subclasse. O tipo a que o objeto referenciado que determina qual mtodo ser sobrecarregado. Animal cavalo = new horse(); // objeto horse mais uma referencia a class animal. No subscrito o tipo do objeto. - quando executado o mtodo do objeto e no da referencia. class TV{ public void setMs(TV t){System.out.println("TV");} } class Us extends TV{ //realizando sobrecarga public void setMs(Us u){System.out.println("usuario tv sobrecarregado");} } class LojaTv{ public static void main(String args[]){ TV t = new TV(); t.setMs(t); TV t1 = new Us(); t1.setMs(t1); //ele chama TV Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA //na sobrecarga o que vale o tipo e nao objeto criado do //tipo Us }} Para chamar a verso sobrecarrega preciso criar uma varivel de referencia do tipo Us. Outro exemplo que pode confundir: class Teclado{ public void cor(){System.out.println("preto - teclado");} public void cor(String a){System.out.println("teclado " + a);} public static void main(String args[]){ Teclado t = new Teclado(); t.cor(); Teclado c = new Mouse(); c.cor(); //apesar de ter ocorrido uma sobrecarga ele chama o do //objeto ja que o metodo sobrecarregado foi subscrito na //super class Teclado cc = new Mouse(); cc.cor("Verde"); }} class Mouse extends Teclado{ public void cor(){System.out.println("Azul - mouse");} public void cor(String a){System.out.println("mouse "+ a);} } /* ele herda tudo da superclass*/ /* pontos analisar: - metodo cor sobrecarregado na superclass - metodo cor subcrito na subclass */ ..................................................package cap1; public class Shop { public void setInfo(){System.out.println("Secao de infomatica");} public void setInfo(String secao){System.out.println("Secao " +secao);} public static void main(String[] args) { Shop s = new Shop(); s.setInfo(); s.setInfo("Eletronicos"); Shop sp = new CliInfo(); sp.setInfo("Roupa"); }

23

} class CliInfo extends Shop{ public void setInfo(){System.out.println("cliente esta subscrito");} public void setInfo(String s){System.out.println("novo met " + s);} } /* observe que alterei o nome da variavel do objeto e nao teve problema isso valido, so nao posso alterar o tipo senao eh uma sobrecarga*/

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA

24

Converso de variveis de referenciaDog d = (Dog)Animal;//para dog converso Aqui estou convertendo a variavel de referencia porque antes disto ela fez: For(Animal animal: array){ Animal.MakeNoise(); If(animal instanceof Dog) Animal.playDead(); //animal nao tem esse mtodo por isso tive que converter para Dog ........................................... class Faunabr{} class Gira extends Faunabr{} class FaunaTest{ public static void main(String args[]){ Faunabr fb = new Faunabr(); Faunabr f = (Gira)fb;//compila mas lanca uma exececao //so compila pq ta na mesma arvore de herana //pq uma fauna nao pode ser uma gira } } ................................................. class Pais{} class Brasil extends Pais{} class PaisT{ public static void main(String args[]){ Pais pb = new Brasil(); Pais p = (Brasil)pb; //isso compila ja que pb um objeto Brasil }} /* lembre-se o que pode ser alterado eh o objeto e nao o tipo dele. ja que pb eh do tipo Pais e referencia a um objeto Brasil posso converter explicitamente pb para Brasil */

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA /* nao compila se o tipo nao fazer parte da arvore de herana*/ /* lanca uma exceo quando tento converter algo impossivel ex: Pais em Brasil:

25

Pais pb = new Pais(); Pais p = (Brasil)pb; isso compila pq os tipos da na arvore de heranca mais na hora de conversao a jvm nao consegue e lana uma exceo ClassCastException*/ .............................................................public class Capital { public void setName(){System.out.println("Capital");} public static void main(String[] args) { Capital c = new Salvador(); c.setName();//chama da subclass Capital c1 =(Capital) c; //isso eh mesmo que o codigo acima ja que Salvador -uma capital //ele chama o metodo da class Salvador ja que ela subscreve o metodo da Capital c1.setName(); //codigo acima pode ser feito assim mesma coisa Capital c2 = c; //tipo do objeto c2.setName(); Capital c3 = new Capital(); c3.setName();//imrprime da class Capital } } class Salvador extends Capital{ public void setName(){System.out.println("CApital Salvador");} }

Abaixo cdigo que no compila e lana excees:public class Cidade { public void setName(){System.out.println("Cidade ");} public static void main(String[] args) { Cidade cd = new Cidade(); cd.setName(); //isso compila normal Cidade cd1 = (Valenca)cd; //ja aqui tambm compila porem eh lancada uma exceo //uma cidade nao pode ser Valenca - lembrar que nao posso alterar o tipo de referencia cd1.setName(); } //o fator de compilar que faz parte da mesma arvore de herana } class Valenca extends Cidade{ public void setIdade(){ System.out.println("Mais de 450 anos");} public void setName(){System.out.println("Cidade Valenca");} }

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA......................... public class Cidade2 { public void setName(){System.out.println("Cidade ");}

26

public static void main(String[] args) { Cidade2 cd = new Feira(); cd.setIdade(); //isso nao compila setIdade, eh um metodo que so tem na class //Feira, entao Cidade2 nao tem por isso que nao compila } } class Feira extends Cidade2{ public void setIdade(){ System.out.println("Mais de 450 anos");} public void setName(){System.out.println("Cidade Feira");} } public class Cidade2 { public void setName(){System.out.println("Cidade ");} public static void main(String[] args) { Cidade2 cd = new Cidade2(); Cidade2 cd2 = (Object)cd; cd2.setName(); //isso nao eh valido ja que nao posso converter para um tipo mais Generico //lembrar que Cidade2 extends a Object } } class Feira extends Cidade2{ public void setIdade(){ System.out.println("Mais de 450 anos");} public void setName(){System.out.println("Cidade Feira");} } Exception in thread "main" java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from Object to Cidade2 ................ public class Cidade2 { public void setName(){System.out.println("Cidade ");} public static void main(String[] args) { Cidade2 cd = new Cidade2(); Cidade2 cd2 = (Feira)cd; //compila vai.. ja que Feira, e Cidade2 est na mesma arvore de herana //porem uma exceo eh lanada em tempo de execucao nao posso converter //uma Cidade em Feira } } class Feira extends Cidade2{ public void setIdade(){ System.out.println("Mais de 450 anos");} public void setName(){System.out.println("Cidade Feira");} } Exception in thread "main" java.lang.ClassCastException:

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA Interface

27

fazemos um contrato com a JVM que todos os mtodos vlidos definido na interface deve ser implementado. Fornecer implementao concreta para todos mtodos da interface marcado como abstract. Seguir as regras de sobrecarga Manter assinatura e o mesmo tipo de retorno(regra de subscrito). Se a classe que implementa for abstrata ela no tem obrigao de implementar todos os mtodos da interface. class vendas implements Loja{ //mtodos aqui } obs.: uma classe pode implementar 2 ou mais interface. class venda implements Loja, comisso{} Lembre-se sempre disso: uma interface jamais vai implementar outra. Uma interface jamais vai implementar uma class Interface no extends a class. interface empregado{ public void setNome(); public String getNome(); } abstract class Venda implements empregado{ string nome; public void setNome(){ nome = "camilo";}} ....................................... interface coca{ void setN(); }

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA interface fanta{ void setN(); } class Clic implements coca,fanta{ public void setN(){System.out.println("Fanta");} public void setN(){System.out.println("Conta");} public static void main(String args[]){ }} /* isso nao compila, devido as duas interfaces ter metodos iguais e quando a class Clic herda eles, so herda 1, nao posso ter dois metodos iguais na mesma class*/ /* se a linha 8 ou 9 for removida ele roda tranquilex*/

28

As interfaces - no possui construtores por no fazer parte da arvores de herana j que eles no pode ser herdado por class.

Tipos de retornoquando alteramos uma lista de argumentos de um mtodo estamos sobrecarregando, portanto o tipo de retorno valido, no com a super classe. Array um tipo valido de retorno public String []go(){ return new String[]{Camilo,lu}; } void nao pode retornar nenhum tipo de retorno. Retorno a objetos em um mtodo que tenha um tipo de retorno a referencia a um objeto voc pode retorna a qualquer tipo de objeto. public Animal getAnimal(){ return new horse(); // desde que horse extends a Animal. Perceba a diferenca entre os codigos abaixo: O primeiro no compila porque no posso dizer que short -UM int, ele pode ser convertido implicitamente para um int. Agora eu posso dizer que uma subclass -UM subtipo da superclass. A sacada ai o tipo de retorno funciona para objetos do mtodo porem para primitivos apenas o return. Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA

29

class VarRetur{ int inte(){ return (short)127; } } class vvv extends VarRetur{ short inte(){ return 7; } } /* nao compila isso short nao -UM int, apenas convertido*/ .............................................................. //aqui compila tranqilo... class VarRetur{ VarRetur inte(){ return new VarRetur(); } } class vvv extends VarRetur{ vvv inte(){ return new vvv(); } }

..................................................

ConstrutoresServe para inicializar o estado das variveis de instancia. Toda class possui um construtor. Construtores pode usar qualquer modificador de acesso, ate o private . Obs.: os construtores privados somente cdigos dessa class possui acesso.class PrivateConst{ private PrivateConst(){ } } class PvtC extends PrivateConst{ PvtC(){} } /* nao compila pois a subclasse ta chamando implicitamente(super()) um construtor q ela nao deveria nem conhcer*/

Construtores sobrecarregadosConstrutores so chamados apenas por outros construtores jamais por um mtodo. Lembrese eles no so herdados por uma subclasse. Serve para fornecer alternativas do estado inicial e uma varivel de instancia por exemplo: O cliente pode fornecer o nome do cachorro ou o programa pode sugerir um. Isso acontece muito quando vamos cria um e-mail no ato do cadastro o sistema oferece uma sugesto para e-mail. Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVAclass Cotr{ Cotr(){ } } class Cot extends Cotr{ Cot(int z){} } /*implicitamente super()*/

30

........................................... No compila:class Cotr{ Cotr(int z){ } } class Cot extends Cotr{ Cot(int z){} } /*ele tem uma chamada implicitamente super() mais a superclass nao tem nenhum construtor sem argumento*/

Estticos - staticGarante que somente haver uma referencia a determinada varivel na memria. Static no quer dizer que a varivel ou mtodo no pode ter seu valor alterado (no caso como final). O static permite acessar algo diretamente sem a necessidade de instanciar um objeto. Quando os mtodos ou variveis no so static necessrio criar objetos da classe, ou seja, instanciar.(usar o new). Criando uma instancia: Empresa funcionrio = new Empresa(); // criei um objeto funcionrio da classe empresa.

Exemplo legal. class ClassEstatic{ ///variavel static public static int contador = 0; //variavel de instancia public int outrocontador = 0; //mtodo static Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA public static void incrementa(){ contador++; System.out.println("contador static " + contador); } public void incrementaOutro(){ outrocontador++; System.out.println("contador nao static " + outrocontador); }} class TestStatic{ public static void main(String args[]){ ClassEstatic c1 = new ClassEstatic(); c1.incrementa(); c1.incrementaOutro(); ClassEstatic c2 = new ClassEstatic(); c2.incrementa(); c2.incrementaOutro();

31

/*observe que na saida meu static sofre alterao pq ele recebe o valor e permanece, o nao static ele a cada objeto criado eh zerado o seu valor*/ /*isso pq a varivel no static o valor dela ta disponivel para todos que eh static*/ } }

//posso acessar direto as variaveis static class TestStatic2{ public static void main(String args[]){ ClassEstatic.incrementa(); ClassEstatic c2 = new ClassEstatic(); c2.incrementaOutro(); } }//lembre-se que static nao pode acessar um metodo non-static diretamente

.................................................class Hip{ static void doSt(){System.out.println("a");}} Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA class Jaca extends Hip{ static void doSt(){System.out.println("b");} public static void main(String arg[]){ Jaca.doSt(); Hip j = new Jaca(); // chamado da superclass j.doSt();}}/* o metodos static nao sao subscritos, eles so redefinidos*/class Membtatic{ static int a=9; int z=5; public static void main(String ar[]){ Membtatic m = new Membtatic(); System.out.println(z); } } //nao compila variavel de instancia sendo referenciado dentro de um // contexto static ......................................

32

CAPITULO 3 Converso de tipos primitivos

A converso ela permite a transformao de valores primitivos de um tipo para outro, de modo explicito ou implcito. Explicito- necessrio que o programador informe ao compilador. Implcito - voc no precisa informar nada ao compilador. Ex.: posso converter um int em long, pois potencialmente long aceita um int mais o inverso deve ser feito de forma explicita.(cast). Voc pode colocar na caixa de TV 20 uma de 20 ou uma menor, jamais uma acima de 20(29,32 etc). O uso das variveis Em java temos a opo de inicializar uma varivel local ou deix-la sem inicializar, porem depende do tipo desta varivel. - variveis locais - antes de serem utilizadas devem possuir um valor de acordo com o seu tipo. - variveis instancia - elas pertence a toda classe e podem ser utilizada com o valor padro adquirido pelo tipo da mesma. Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA

33

As variveis de instancia refere-se a um objeto recebe um valor padro do tipo da varivel. NULL= significa que a varivel de referencia no foi atribudo nenhum objeto na pilha. J que NULL apenas se refere-se a objeto String.(array[]). static void main(String args[]){} um mtodo da classe. Obs.: pode criar variveis locais e no inicializar e o programa no emitir o erro na compilao, desde que a varivel local no seja utilizada no escopo da declarao. Referencias de objetos locais Quando duas variveis refere-se ao mesmo objeto alterao em um dos 2, vai refletir na outra varivel.class ReferObjt{ public static void main(String args[]){ Integer i = new Integer(10); Integer j=i; System.out.println(i); System.out.println(j); i+=20; //sera que j ta referenciado ao novo valor de i? System.out.println(i);//imprime 30 System.out.println(j);//imprime o valor 10 } //o fato aqui que wrapper sao finais.. apenas o uso do autoboxing que //ocultou isso na linha i+=20 ele cria outro objeto wrapper para referenciar a esse novo valor } //agora veja esse exemplo class ObjtRefe{ static void metodo(int[] a){ a[1]=5; } public static void main(String ar[]){ int[]objt = {2,1}; for(int a : objt) System.out.print(a +" "); metodo(objt); System.out.println(); for(int a : objt) System.out.print(a +" "); } } /* aqui as coisas eh diferente objetos array sao multaveis alterei o array passado dentro do metodo e refletiu na referencia original*/ //isso funciona para qualquer array multavel, lembre String sao imutaveis //entao nao funciona

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA OBJETOS STRING Os objetos string so inalterveis.

34

Em strings quando se tem duas variveis apontando para o mesmo objeto a JVM atualizara apenas a varivel de referencia. String a = Camilo; String d=a; Se uma alterao ocorre, apenas a vai sofrer alterao, d no sofrer nada. Passando variveis de referencia de objeto Uma varivel de referencia significa que est se passando uma copia dos bits. Passar por valor - significa passar uma copia da varivel o mtodo chamado NO pode alterar a varivel que a chamou variveis de referncia de objetos o mtodo chamado PODE alterar o objeto que a varivel referencia.class DuvObjtRe{ int array[] = new int[2]; static void go(int [] a){ a[1]=5;} public static void main(String ar[]){ go(new DuvObjtRe().array); for(int z:new DuvObjtRe().array) System.out.println(z); } } //imprime 0,0 devido ser acessado por uma NEW instancia da class //e nao a instancia que foi passada no metodo

.........................................................class DuvObjtRe{ int array[] = new int[2]; static void go(int [] a){ a[1]=5;} public static void main(String ar[]){ DuvObjtRe b =new DuvObjtRe(); go(b.array); for(int z:b.array) System.out.println(z); } } //agora sim ele imprime com alteracao no objeto original //se ligar nisso para nao errar sao detalhes //que sao facilmente esquecidos

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA ARRAY

35

So objetos que armazena diversas variveis do mesmo tipo . - pode ser primitivo ou de objeto. Mas um array sempre ser um objeto na PILHA. Pode ser criado: int[] array; int array[]; para definir o tamanho do array o objeto deve ser instanciado (criado - new) na pilha. Invlido: int[5] array ; valido: int[] array = new int [10]; array objetos segue a mesma sintaxe. Thread[] array = new Thread[3]; Um array deve ter sempre um tamanho quando for construdo. Sintaxe invalida: int[] carlist = new int[]; // no compila.kd o tamanho? Array multidimensionais So array dentro de array. int[][] array = new int[3][]; Obs: linhas e colunas na verdade um tabela(matriz). Inicializando array objetos Um array de objetos na verdade, ele no armazena objetos, apenas armazena uma referencia a ele. importante lembrar que referencia a objetos sem atribuio sempre ser nulas implicitamente.class ArryIntege{ public static void main(String args[]){ Integer [] array = new Integer[4]; System.out.println(array[0]);//null impresso

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVAarray[1]=1; System.out.println(array[1]); System.out.println(array[0]+2); //lanca uma exceo NullPointException } }

36

NullPointerException

chama um mtodo com referencia nula.

Animal[] pets = new Animal[3]; //aqui tem um objeto na pilha, com trs referencias nulas do tipo Animal, porem no tem nenhum objeto animal. pets[2] = new animal; pets[1] = new animal; Agora tenho dois novos objetos Animal na Pilha. No permitido um valor negativo para ndice de um array. Erros de array causam excees de tempo de execuo e no erros de compilador. Vlidas: int[][] array = new int[3][]; array[0] = new int[4]; //primeiro elemento do array est em um array int de quatro elemento. class biarray{ public static void main(String args[]){ int[][] z = new int[2][]; z[0]=new int[2]; z[1]=new int[1]; z[0][1]=2; z[1][0]=4; System.out.println(z[1][0]);//imprime 4. System.out.println(z[0][0]);//imprime 0 }} /* exemplo massa*/

invlidosclass arrbi{ public static void main(String args[]){ int[] ar = new int[2][]; //invalido a dimensao do array Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA int z[]=[1]new int;//a posicao do colchetes deve vim apos new ou int. }} Loop Array

37

length a nica varivel publica que fornece a quantidade de elementos de um array, ou seja, o seu tamanho. Dog[]array = new Dog[6];//array de 6 referencia ao objeto de Dog. For(int x=0;x ExceptionInIninitalizationError um exemplo bsico. Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA static int[] array = new int[2]; static{array[3]=4;} lana ExceptionInIninitalizationError e ArrayIndexOutBoundsException .

41

Usando a class Wrapper- fornecer converso de tipos primitivos em objetos String e virse-versa. o nome do tipo primitivo sempre representado com a letra MINSCULA, exceto para int = Integer e char = Character. Uma class Wrapper: - possui dois construtores 1 primitivo (boolean,byte, double) 2 String exceto o Char - Character que tem apenas o primitivo char. Exemplos: Float f1 = new Float(3.14f);//args com tipo primitivo float Float f2 = new Float("3.14f");//args string Character c1 = new Character('c'); xxxValue() exemplo: intValue, shortValue()

-

serve para converter o valor de um objeto em um tipo primitivo.

Integer i2 = new Integer(42); double d = i2.doubleValue(); // aqui eh a converso do Objeto Integer para double Float f2 = new Float(3.14f); short s = f2.shortValue();//converso do valor do objeto para tipo primitivo short. xxxValue() parsexxx(String) Wrapper valueOf(String) Converso de objeto Wrapper para primitivo Converso String para primitivo Converso String para Wrapper

parseXXX(), e valueOf() usa o argumento String. valueOf() -> converso de String para Wrapper. Exemplos: double d4 = Double.parseDouble("3.14"); //converto de String para double

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA

42

Double d5 = double.valueOf("3.14"); //converto de String em um objeto class Wrapper toString() - permite uma representao significativa de um objeto. A mesma encontra-se na classe primordial Object. Obs.: as class Wrapper so marcadas como final automaticamente. xxValue() objt primitivo Float objt = new Float(3.85f); int c=objt.intValue(); X parseXx(String) String primitivo int it = Double.parseDouble(3.14);

Exemplo de resumo com as diferenas. class Warp { public static void main(String args[]){ Integer os = new Integer(100);//objeto aqui long a = os.longValue(); //usei acima o xxvalue()//aqui de objeto para um primitivo System.out.println(a); double b = double.parseDouble("3.14");//string aqui System.out.println(b); ///usei o parsexxx() convertendo de String para um tipo primitivo Double db = Double.valueOf("3.87");//string aqui System.out.println(db); //aqui usei valueOf convertendo o string para objeto }}public class ValuWrap{ public static void main(String args[]){ //convertendo de Wrapper para primitivo Integer i = new Integer(50); int it = i.intValue(); Short s =20; System.out.println("int " +it); System.out.println("short " +s); //wrapper --> primitivo - long Long l=70L; long lo = l.longValue(); System.out.println("Long "+lo); } }

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA AutoBoxing - torna-se + conveniente o uso das classes wrapper.

43

Quando usar == != ? - quando os tipos primitivos de uma classe wrapper forem: Boolean, Byte, Character, Short e Integer. Usa Wrapper adequado para a combinao de conjuntos. Quando quizer que seu conjunto(quando chega Collection vai ver a essncia disso aqui) armazene objetos e primitivos, usa o warppers. - as variveis de referencia wrapper podem ser nulas, por ser objetos. NullPointerException. class Boxing2{ static Integer x;//aqui eu crio se tiver um valor public static void main(String [] args){ doStuf(x); } static void doStuf(int z){ int z2 = 5; System.out.println(z2 + z); } } /*compila porem lana um NullPointerException devido o valor x nao refere-se a nenhum objeto Integer, ento ele nao abre nenhum valor*/ class UseBox{ public static void main(String args[]){ UseBox u = new UseBox(); u.go(5); //chmada ao metodo } boolean go(Integer i){ Boolean ifso = true; //crio um objeto com true Short s = 300; //crio um Short com um valor if(ifso){ System.out.println(++s); //abre, incrementa, encapsula novamente } else{ System.out.println(s); } return !ifso; //se for falso o teste do if } } /*imprime na saida 301*/ //convertir de Wrapper para primitivo xxxvalue //i.shortValue()

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA Sobrecarregado da maneira difcil MTODOS class EasyOver{ static void go(int x){System.out.print("int ");} static void go(long x){System.out.print("long ");} static void go(double x){System.out.print("double ");} public static void main(String [] args){ byte b = 5; short s = 5; long l = 5; float f = 5.0f; go(b); go(s); go(l); go(f); }}

44

No exemplo anterior observamos que no mtodo no temos nenhum args do tipo byte, short e float porem a JVM, ela usou o mtodo menor e AMPLIOU para um maior. Ento short, byte implicitamente convertido para um tipo int. class NoAmplia{ static void go(Integer a){} public static void main (String ddd[]){ go(new Long(5)); } } /* nao posso colocar um Long dentro de um Integer*/ /* o mesmo que tentar colocar uma carreta em uma garagem para um carro impossivel sao objetos diferentes*/

Boxing == e equalsCom objetos wrappers deve se tomar cuidado ao usar = = e equals. = = eles funciona como igualdade ate 127. equals verifica se os valores dos objetos wrapper so iguais.class WrapTrue{ public static void main(String args[]){ Integer i=10; Integer j=10; Integer m = new Integer(10); System.out.println(i==j);//valor System.out.println(m==j);//objetos System.out.println(i.equals(m));//valor } } true false true

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVAclass Autobox{ public static void main(String args[]){ //aqui crio dois objetos com mesmo valor Integer g = new Integer(8); Integer h = new Integer(8); System.out.println(g==h);//true System.out.println(g.equals(h)); //true //aqui economizo memoria tenho dois objetos com mesmo valor primitivo //java 5 funciona normal Integer a=5; Integer c=5; System.out.println(a==c); Boolean v= new Boolean("true"); boolean t=true; Boolean m = new Boolean(t); System.out.println(v==t);//true System.out.println(v==m);//false dois objetos no help com mesmo valor. System.out.println(v.equals(m));//true } }

45

............................................class Equ{ public static void main(String args[]){ Integer i = new Integer(5); Long ii = new Long(5); int j=5; Integer k = new Integer(5); int m=5; System.out.println(i.equals(k));//true System.out.println(i==j);//true System.out.println(i==k);//false System.out.println(m==k); //true m se refere-se k System.out.println(j.equals(m));//false nao sao do mesmo tipo }//tipos primtivos compara com = = } /* as classes String e Wrapper sobrescreverm o metodo equals*/ /* coidgo nao compila pq to tentando comparar tipos diferentes com equals*/

Sobrecarga com BOXING e Var-args - O boxing um recurso recm criado do java 5, os elaboradores preferiram manter os cdigos existente, a AMPLIAO mais preferida ou seja tem mais prioridade que BOXING e que var-args. static void go(Byte x,); static void go(byte y); //esse metodo chamado ------------------------class AddBoxing{ static void go(Integer x){System.out.println("Integer ");} static void go(long x){System.out.println("long ");} public static void main(String [] args){ int i = 5; go(i); //ele chama o long devido ampliar para o maior }} Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA E BOXING e VAR-ARGS quem tem mais prioridade? O boxing tem mais preferncia de prioridade que os var-args. - os var-args um mtodo de captura total.(vai se abordado l na frente). class BoxorVar{ static void go(Byte x, Byte y){System.out.println("Byte, Byte ");} static void go(byte...x){System.out.println("byte...");}

46

public static void main(String [] args){ byte b= 5; go(b,b);//aqui ele chama o meu boxing devido ter preferencia maior que meu vararg //a saida em Byte, Byte } } ..................class SobreCarg{ static void go(Integer x){System.out.println("autoboxing "+x);} static void go(int...x){System.out.println("var args"+x);} public static void main(String args[]){ go(5); } } autoboxing 5

Ampliando Variveis de Referencia - em variveis de referencia (objetos) a ampliao de herana, ou seja, -UM. class Animal{static void eat(){}} class Dog extends Animal{ public static void main(String args[]){ Dog d = new Dog(); d.go(d);//eh valido devido d ser um dog.. e dog ser um animal } void go(Animal a){ System.out.println("dog eh um animal ampliado com sucesso"); } //aqui eu tenho um objeto animal //entao qualquer classe q herde animal pode chamar esse metodo } o cdigo permitido sem problemas pois Dog um animal, ento tudo que animal faz dog tambm faz. Houve AMPLIAO de dog para animal. - a ampliao permitida da class que extends a class pai. Uma class Wrapper no possvel ampliar, pois no valido dizer que Short -UM Integer.

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA class Dog4{ public static void main(String[] camilo){ Dog4 d= new Dog4(); d.test(new Integer(5)); } void test(Long x){} } //no possvel nenhuma class wrapper pode ser apliada um Short no eh um Integer. Sobrecarga na Combinao de ampliao com BOXING No possvel ampliar e depois fazer boxing(objeto). Porem o compilador PODE fazer um BOXING seguida por uma operao de ampliao. Invlido: static void go(Long x){} byte b =5; go(b); // precisa ampliar para depois converter muita coisa par o compilador. ................................. class WindenBox{ static void go(Long x){System.out.println("Long");} public static void main(String[]args){ byte b=5; go(b); //precisa ampliar para depois fazer o boxing NAO VALIDO isso // muita coisa para o compilador. }} /*WindenBox.java:5: go(java.lang.Long) in WindenBox cannot be applied to (byte) go(b);*/ Vlido: class BoxWiden{ static void go(Object o){ Byte b2 = (Byte)o; System.out.println(b2); } public static void main(String [] args){ byte b= 5; go(b); }} //amplio para objeto(boxing) //imprime cinco normal

47

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA Sobrecarga em combinao com VAR-ARGS - possivel combinar var-args com ampliao ou com BOXING. static void Wid_var(long...x){} static void box_va(Integer...x){} int i = 5; Wid_var(5,5); box_va(5,5); class Varg{ static void wide_var(long...x){System.out.println("long...");} static void box_var(Integer...x){System.out.println("Integer");} public static void main(String args[]){ int i = 5; wide_var(i); box_var(i); }} //ele imprimi os dois metodo posso combinar var-args //com boxing e ampliar //entao eu ampliei 5 para var-args e depois para o boxing

48

Coletor de lixo uma soluo automtica em Java para o gerenciamento da memria. A coleta de lixo gira em todo objeto que no possa ser alcanado pelo programa. Esse objeto encontra-se na memria heap.(cuidado para no confudir, com pilha stack). public class GargabeTruck{ public static void main(String args[]){ StringBuffer sb = new StringBuffer("Ola"); // instancia meu objt e apontando System.out.println(sb); // imprimindo meu objt sb=null; // minha variavel nao aponta para nenhum objt //sujeito a coleta se o caminho do lixo passar }} //StringBuffer pertence a class object Exemplo 2: mostra o ponto que um objeto eh coletado public class Gargabe2{ public static void main(String args[]){ StringBuffer variavelreferencia = new StringBuffer("Rodando lixo"); StringBuffer variavelreferencia2 = new StringBuffer("Rodando lixo 2"); System.out.println(variavelreferencia); variavelreferencia = variavelreferencia2; // aqui minha variavel de referencia aponta para o objeto //ela nao eh alcanavel para coleta }}

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA Exemplo 3: mostra o tamanho da memria antes e depois do coletor se ele passar.

49

import java.util.Date; class Check{ public static void main(String [] args){ Runtime rt = Runtime.getRuntime(); System.out.println("total JVM memory " + rt.totalMemory()); System.out.println("LIVRE JVM memory " + rt.freeMemory()); Date d = null; for(int i=0;i 99; System.out.println("o valor eh " + b); // imprime true por ser > } } no pode comparar tipos diferentes. Por exemplo, no posso perguntar se um boolean um char? temos uma exceo um valor flutuante pode se comparar com valores inteiros double int.class DoubleInt{ public static void main(String ar[]){ int a=4; double b=4.0; System.out.println(a==b); //true } }

50

Nunca confundir = com = = so completamente diferente o = atribuio o = = comparao. import java.awt.Button; class CompareRef{ public static void main(String [] args){ Button a = new Button("exit"); //aqui eh outro objeto no heap com o mesmo valor do objt a Button b = new Button("exit"); Button c=a;//aqui referencia ao mesmo objeto System.out.println("is referece a = = b? " + (a = = b));//false System.out.println("is referece a = = c? " + (a= =c));//true }} Para os valores boolean voc pode usar = dentro de um if. boolean b = true; if(b = false); // ele recebe false no compara //invalido int x=1; if(x = 0)// x inteiro e no booleano. Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA ENUMS 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");} }}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)); } } //nao 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); Pu p = Pu.FUTEBOL; Pu p2 = Pu.FUTEBOL; System.out.println(p.equals(p2)); } } //nao compila olha o modificar de acesso de enum

51

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA

52

instanceofeste 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 metodo 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'"); }} 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.*/

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA

53

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, porem depende do valor a sua esquerda ou nvel de precedncia. String a = string; int b= 3; int c = 7; System.out.println(a + b + c); No cdigo acima ele no soma os inteiros por ter uma string a esquerda. System.out.println(x.foo() + 7); Nessa cdigo ele depende do resultado metodo para saber o que vai fazer concatenar ou somar. Acrscimo e decrscimo Aumenta ou diminui o valor de uma varivel. Uma regra interessante que o operador ps-fixado(i++) s incrementado aps a exibio do valor, enquanto no ser pre-incrementado(++i) o pr faz o inverso, realiza antes da varivel ser usada: Varivel FINAL Lembre-se que varivel final no pode ser alteradas, ento operadores de incremento ou diminuio gera um erro de compilao. final int x=5; x++; ..........class TEstFinl{ static final int z; public static void main(String ar[]){ System.out.println(z ); } } /* nao compila variaveis declarada como final deve ter um valor padrao antes de seu uso*/ // elas nao recebe valor padro

Operador ternario usado para avaliar expresses booleanos de modo semelhante ao if. class Salary{ public static void main(String args[]){ int num = 3; String status =(num5)); System.out.println(!b&&(5>3));//inverte apenas nessa expresso System.out.println(b); } } false true false

Material desenvolvido Camilo Lopes - Resumo de Estudo

Certificao JAVA ...............................................................public class OpeCirc { public static void main(String[] args) { boolean c=true; boolean d = false; System.out.println(c^d); System.out.println(d^c); System.out.println(false^false); } } //^ teste os dois operandos se 1 for true resultado sempre sera true independente da ordem

55

...............................public class OpeOu { public static void main(String[] args) { System.out.println(2>3 | 4 >2); // testa os dois operando System.out.println(8>2 || 1