18
Grupo de Estudos Certificação Java SCJP – Sun Certified Java Programmer

SCJP

Embed Size (px)

Citation preview

Page 1: SCJP

Grupo de Estudos Certificação Java

SCJP – Sun Certified Java Programmer

Page 2: SCJP

Orientação a Objetos –Encapsulamento

O encapsulamento ajuda a implementação por trás de uma interface (ou API);Proteção de variáveis de instância (private);Acesso através de métodos “capturadores - gets” e “configuradores - sets”;O relacionamento É UM se refere a herança, é representado por extends.O relacionamento TEM-UM são baseados na utilização e significa que a instância de uma classe “tem uma” referência a instância de outra classe.

Page 3: SCJP

Orientação a Objetos –Herança

Mecanismo que permite que uma subclasse herda variáveis e métodos da superclasse;

Conceito fundamental do polimorfismo; Todas as classes herdam de Object;

Page 4: SCJP

Polimorfismo

Significa “muitas formas”;Variáveis de referências são imutáveis, mais podem se referir a objetos de subtipos;O tipo de variável de referência (não o tipo do objeto) determina quais métodos poderão ser chamados;As chamadas polifórmicas se aplicam apenas a métodos de instâncias subscritos;

Page 5: SCJP

Subscrição e Subrecarga de métodosOs métodos podem ser subscritos e sobrecarregados, os construtores só podem ser sobrecarregados; Os métodos abstract devem ser subscritos pela primeira subclasse concreta (não abstract);A respeito ao método subscrito, o método novo:

Deve ter a mesma lista de argumentos; Deve ter o mesmo tipo de retorno (exceto covariantes Java 5 – retorno de subclasse);Não deve ter um modificador de acesso mais restritivo;Não pode lançar exceções verificadas novas ou mais abrangentes;

Os métodos final não podem ser subscritos;Só os métodos herdados podem ser subscritos, os métodos private não são herdados;Chamadas super.metodoSubscrito, chamam versão da superclasse de um método subscrito.

Page 6: SCJP

Subscrição e Subrecarga de métodosSignifica reutilizar o mesmo nome do método, mas com argumentos diferentes;Os métodos sobrecarregados:

Devem ter lista de argumentos diferentes; Podem ter tipos de retorno diferentes, contanto que a lista de argumentos sejam diferentes;Podem ter modificadores de acesso diferentes;Podem lançar exceções diferentes;

Os métodos de uma superclasse podem ser sobrecarregados em uma subclasse;O polimorfismo é aplicável à subscrição e não à sobrecarga;O tipo de objeto (e não o tipo de referência) diz qual o método subscrito será usado no tempo de execução;O tipo de referência diz qual método sobrecarregado será usado no tempo de compilação;

Page 7: SCJP

Modificadores de Acesso a Membros

NãoNãoNãoSim

Qualquer classe que não seja uma subclasse e esteja fora do mesmo pacote

NãoNãoSim

(herança)Sim

Subclasse fora do mesmo pacote

NãoSimSimSimSubclasse do mesmo pacote

Não SimSimSimQualquer classe do mesmo pacote

SimSimSimSim

A partir da mesma classe

PrivateDefaultProtectPublicVisibilidade

Page 8: SCJP

Variáveis Locais

As declarações de variáveis locais não podem ter modificadores de acesso; final é o único modificador disponível para variáveis locais;As variáveis locais não recebem valores padrão, portanto, devem ser inicializadas antes do uso;

Page 9: SCJP

Outros modificadores – membros

Os métodos final não podem ser sobrecarregados em uma subclasse;Os métodos abstract foram declarados, com uma assinatura, um tipo de retorno e uma cláusula throws opcional, mais não foram implementados;Os métodos abstract terminam com um ponto-e-vírgula, e não chaves;Pode-se ter uma classe abstrata sem método abstract;Há três maneiras de identificar um método não abstract;

O método não é marcado como abstract;O método possui chaves;O método possui código entre chaves;

A primeira classe não-abstrata concreta a estender uma classe abstract deve implementar todos os métodos abstratos dessa;

Page 10: SCJP

Outros modificadores - membros

O modificador syncronized só é aplicado a métodos e blocos de código, podendo ter qualquer controle de acesso e serem marcados como final (Ex. Método só pode ser acessado por uma thread de cada vez) ;Os métodos abstract devem ser implementados por uma subclasse, tem de ser herdados, por isso não podem ser private nem final;O modificador native só é aplicado a métodos (Ex.: Indica que o método está sendo implementado conforme plataforma, comumente C);O modificador strictfp só é aplicado a classes e métodos (Ex.: Força pontos flutuantes a aderir o padrão IEEE754);

Page 11: SCJP

Métodos com Argumentos Variáveis

A partir do Java 5, os métodos podem declarar um parâmetro que aceita zero a vários argumentos, é o chamado método var-arg;Um parâmetro var-arg é declarado com a sintaxe tipo...nome; por exemplo:

teste (int ... X) {}Um método var-arg só pode ter um parâmetro var-arg;Em métodos com parâmetros normais e um var-arg, o var-arg deve vir por último;

Page 12: SCJP

Declaração de Variáveis

São classificadas em primitivas e de referência;As variáveis de instância (alocadas no heap – objetos) podem qualquer tipo de controle de acesso e serem marcadas como final ou transient;As variáveis de instância não podem ser declaradas como abstract, syncronized, native, strictfp ou static;É válido declarar uma variável local com o mesmo nome de uma variável de instância: isso é chamado de sombreamento;As variáveis final possuem as seguintes propriedades:

Não podem ser reinicializadas, uma vez que tiverem um valor atribuído;Não podem referenciar um objeto diferente se já tiverem um objeto atribuído a elas;

Page 13: SCJP

Declaração de VariáveisAs variáveis de referência final devem ser inicializadas antes que a execução do construtor seja concluída;Não existe objetos final. Uma referência a objeto marcada como final não significa que o objeto propriamente dito seja inalterável;É válido declarar uma variável local com o mesmo nome de uma variável de instância: isso é chamado de sombreamento;As variáveis locais residem na pilha(destrói após uso);O modificador transient só pode ser aplicado a variáveis de instância (Ignorar variável quando tentar serializar objeto que a contém);O modificador volatile só pode ser aplicado a variáveis de instância (Diz a um thread que acesse a variável deve sempre reconciliar a sua cópia private da variável com a cópia master presente na memória);

Page 14: SCJP

Declaração de Arrays

Os arrays podem armazenar tipos primitivos ou objetos, mas o array propriamente dito é sempre um objeto;Quando você declara um array, os colchetes podem ficar a esquerda ou a direita do nome da variável;Nunca é válido incluir o tamanho do array na declaração;Um array de objetos pode armazenar qualquer objeto que passe no teste É-UM (ou instanceof) para o tipo declarado do array. Por exemplo: Se horse estender Animal, então um objeto Horse pode ser colocado em um array de Animal;

Page 15: SCJP

Variáveis e métodos static

Não são associados a nenhuma instância específica de classe;Não é necessária a existência da instância de uma classe para que os membros static desta sejam usados;Só haverá uma cópia da variável ou classe static e todas as instância a compartilharão;Os métodos static não têm acesso direto a membros não-static;

Page 16: SCJP

Enums (Lista Numerada)

Um enum especifica uma lista de valores constantes que podem ser atribuídos a um determinado tipo;Um emum não é uma String nem um int; o tipo constante de um enum é o tipo do próprio enum. Por exemplo: INVERNO, PRIMAVERA, VERÃO e OUTONO são do tipo enum Estação;Um enum pode ser declarado fora ou dentro de uma classe, mas não em um método;Um ewnum declarado fora de uma classe não pode ser marcado com static, final, abstract, protect ou private;

Page 17: SCJP

Enums

Os enums podem conter construtores, métodos, variáveis e corpos de classes constantes;As constantes enum podem enviar argumentos para o construtor enum, usando a sintaxe BIG(8), onde o literal int 8 é passado ao construtor enum;Os construtores enum podem ter argumentos e podem ser sobrecarregados;Os construtores enum nunca podem ser chamados diretamente no código. Eles são sempre chamados automaticamente quando um enum é inicializado;O ponto-e-vírgula ao final da declaração de um enum é opcional. Ambos são válidos:

enum Numero { UM, DOIS, TRES}enum Numero { UM, DOIS, TRES} ;

Page 18: SCJP

FIM