44
Elenilson Vieira [email protected] SCJP SCJP Declarações e Controle de Acesso Declarações e Controle de Acesso

Declarações e Controle de Acesso

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Declarações e Controle de Acesso

Elenilson [email protected]

SCJPSCJPDeclarações e Controle de AcessoDeclarações e Controle de Acesso

Page 2: Declarações e Controle de Acesso

Definições Básicas

Um programa Java é uma coleção de objetos se comunicando com outros objetos pela invocação de métodos

Classe: descreve um objeto de forma a explicitar seus tipos de comportamento e estado (variáveis de instância)

Objeto: a representação, em tempo de execução, da classe

Page 3: Declarações e Controle de Acesso

Definições Básicas

Estado (variáveis de instância): Cada objeto terá um único conjunto de variáveis de instância como descrito em sua classe e elas definirão o seu estado.

Comportamento (métodos): Onde a lógica da classe é colocada. São lá que os algoritmos são colocados e executados

Page 4: Declarações e Controle de Acesso

Herança

Códigos definidos em uma classe podem ser reusados em outras classes. Uma subclasse tem que explicitamente declarar que está herdando de uma superclasse mas uma superclasse nem sabe quem são suas herdeiras

class A{public int x = 10;

}class B extends A{

public void b(){System.out.println(x);

}}

Page 5: Declarações e Controle de Acesso

Interface

De certa forma elas atuam como superclasses mas não há qualquer implementação dos métodos e estes devem ser implementados pelas classes que implementam a interface.

Public interface A{public void a();

}public class B implements A{

public void a{}}

Page 6: Declarações e Controle de Acesso

Identificadores Legais

Devem começar com letras, $ ou caractere de ligação (_) Não há limites de quantos caracteres um identificador pode conter (achei estranho!) identificadores são sensíveis a maiúscula e minúscula não se pode usar palavras reservadas

Ex: _a, $a, ___________2_w, .b, :a, e#.

Page 7: Declarações e Controle de Acesso

Arquivos Fonte

Pode conter apenas uma classe pública

Se há uma classe pública no arquivo, o nome do arquivo deve ser o mesmo seguido de “.java”

Se a classe faz parte de um pacote, a declaração deve ser a primeira linha antes de qualquer código

Page 8: Declarações e Controle de Acesso

Arquivos Fonte

Declarações import devem vir entre o local da declaração do package e o início da classe

Declarações import e package valem para todas as classes declaradas do arquivo de código fonte

Um arquivo pode ter mais de uma classe não pública

Page 9: Declarações e Controle de Acesso

Modificadores de Acesso

Uma classe A pode acessar uma classe B se A pode uma das 3 coisas:

Criar uma instância de B Extender a classe B Acessar determinados métodos e variáveis dentro

da classe B

Page 10: Declarações e Controle de Acesso

Modificadores de Acesso: Default

Dá acesso apenas a classes que estejam dentro do pacote

package cert;class Beverage { }

package exam.stuff;import cert.Beverage;class Tea extends Beverage { }

Can't access class cert.Beverage. Class or interface must be public, in same package, or an accessible member class.import cert.Beverage;

Page 11: Declarações e Controle de Acesso

Modificadores de Acesso: Public

Dá acesso a todas as outras classes que tentarem

package eu;public class A{}

package B;import eu.A;public class B{

A a = new A();}

Page 12: Declarações e Controle de Acesso

Outros Modificadores de Acesso

Final

Abstract

Strictfp (não é necessário saber o que strctfp faz, mas saber que é um modificador para classe e métodos, não para variáveis).

Page 13: Declarações e Controle de Acesso

Outros Modificadores de Acesso

Final faz com que classes não possam ser especializadas. Usar final não vai contra o conceito de OO?

Usa-se final por segurança e apenas quando está certo que nenhum programador precisará extender sua classe.

Page 14: Declarações e Controle de Acesso

Classes Abstratas

Classes abstratas Não podem ser instanciadas e sua única finalidade é

ser extendida Por que criar uma classe que não pode ser instanciada? Bem, poderíamos ter uma classe bem genérica dada como Carro, mas qual o motor desse carro? E o câmbio? Quantos cavalos de potência? Isso são características de modelos de carros, então uma classe BWM pode extender carro e implementar seus métodos abstratos

Page 15: Declarações e Controle de Acesso

Classes Abstratas

Se há algum método marcado como abstrato, a classe inteira deve ser abstrata

Uma classe abstrata pode conter métodos não abstratos

Não se pode marcar uma classe como abstract e final

Page 16: Declarações e Controle de Acesso

Interfaces

Pense em uma interface com 100% dos métodos marcados como abstratos

Uma interface pode ter apenas métodos abstratos

Todos os métodos de uma interface são implicitamente públicos e abstratos

Todas as variáveis definidas em uma interface devem ser públicas, estáticas e finais. Se você não explicitar, elas mesmo assim serão.

Page 17: Declarações e Controle de Acesso

Interfaces

Métodos de uma interface não podem ser estáticos

Uma interface não pode extender uma classe mas pode extender uma ou mais interfaces :O (pág 59)

Uma interface não pode implementar outra interface

Você pode tipar uma interface como abstract mas é redundante

public abstract interface Rollable { }public interface Rollable { }

Page 18: Declarações e Controle de Acesso

Interfaces

Page 19: Declarações e Controle de Acesso

Modificadores de Acesso

Default, public, protected, private

Classes podem usar apenas default e public mas membros podem usar os 4

Page 20: Declarações e Controle de Acesso

Modificadores de Acesso

Membros públicos Significa que todas as outras classes tem acesso a

esse membro seja usando o (.) ou extends

Page 21: Declarações e Controle de Acesso

Modificadores de Acesso

Membros private Significa que apenas a própria classe tem acesso a

esses membros

Um método private pode sofrer override em uma subclasse?

Page 22: Declarações e Controle de Acesso

Modificadores de Acesso

Protected e Default São quase idênticos, mas há uma pequena e crítica

diferença: no default os membros podem ser acessados apenas dentro do pacote e o protected é igual ao default mas suas subclasses podem acessar mesmo estando fora do pacote

package tu;public class A{

void a(){}}

package nos;public class B extends A{

void b(){a();

}}

Page 23: Declarações e Controle de Acesso

Relembrando

Variáveis Locais Apenas o final é aplicado

…public void a(){

final int c = 10;}

Page 24: Declarações e Controle de Acesso

Relembrando

Métodos final não podem ser sobrescritos

Métodos abstratos: são métodos sem implementação

Assim? public abstract void vos();

Ou assim? public abstract void lalala(){}

Page 25: Declarações e Controle de Acesso

Definições Básicas

Estado (variáveis de instância): Cada objeto terá um único conjunto de variáveis de instância como descrito em sua classe e elas definirão o seu estado.

Comportamento (métodos): Onde a lógica da classe é colocada. São lá que os algoritmos são colocados e executados

Page 26: Declarações e Controle de Acesso

Métodos Synchronized

Indicam que o método pode ser acessado por uma única thread no tempo.

public synchronized void c(){}

Page 27: Declarações e Controle de Acesso

Métodos Native

Indica que o método é dependente de plataforma. Não é necessário saber como funciona, apenas que é um modificador

Page 28: Declarações e Controle de Acesso

Métodos strictfp

Faz com que seja usado o padrão IEE754 para operações com ponto flutuante (mais precisão e mais velocidade nas operações

Page 29: Declarações e Controle de Acesso

Argumentos Variáveis

Usamos os …; Pode haver outros argumentos mas esses devem vir antes e o var-arg deve vir por último. Não pode ter mais de um var-arg

Sintaxe:void a(int... x); // Legalvoid b(char c, int... y); // legalvoid c(int... u, String a);//Ilegalvoid d(int u...);//Ilegal

Page 30: Declarações e Controle de Acesso

Construtores

Devem ter o mesmo nome da classe e JAMAIS ter tipo de retorno. Não podem ser assinalados como static, final ou abstract.

public class Elenilson{public Elenilson(String nome){}

}

Page 31: Declarações e Controle de Acesso

Variáveis Primitivas

Podem ser de 8 tipos e podem ser declaradas como variáveis de classe, de instância, argumentos de métodos e variáveis locais

Não é necessário saber calcular a faixa dos tipos mas saber que os tipos inteiros na sequencia são byte, short, int, long e os de ponto flutuante são float e double

Os tipos tem sinais e o bit mais a esquerda indica se é positivo ou negativo (1 e 0) e os outros indicam o valor.

Page 32: Declarações e Controle de Acesso

Variáveis Primitivas

Page 33: Declarações e Controle de Acesso

Variáveis de Instância

São declarados dentro da classe mas fora de qualquer método. São inicializadas apenas na instanciação da classe

Page 34: Declarações e Controle de Acesso

Variáveis Locais

Tem seu tempo de vida no início do método e são destruídas no término do métodos. Não pode ter modificadores de acesso e podem ser apenas assinaladas como final

public void a(){int x = 10;

}

Page 35: Declarações e Controle de Acesso

Variáveis

Page 36: Declarações e Controle de Acesso

Arrays

São objetosInt x[];int[] y = new int[10];

Pode-se declarar arrays multidimensionaisint a[][][];char[] b[];

Page 37: Declarações e Controle de Acesso

Final, Transient, Volatile e Static

Variáveis final não podem ter seus valores alterados. Final pode ser

usado para classes, métodos e variáveis

Variáveis e métodos static São pertencentes às classes e existem

independentemente da instanciação

Page 38: Declarações e Controle de Acesso

Final, Transient, Volatile e Static

Page 39: Declarações e Controle de Acesso

Final, Transient, Volatile e Static

Variáveis transiente indica para a JVM não salvar o valor de uma

variável em uma serialização

Volatile: Indica para a JVM que sempre que precisar

consultar o valor da variável que a busque na cópia principal (não use a cópia do registrador como otimização)

Page 40: Declarações e Controle de Acesso

Enum

Restringe variáveis a um número fechado de valores que são definidos pelo programador

enum CoffeeSize { BIG, HUGE, OVERWHELMING };CoffeeSize cs = CoffeeSize.BIG

Page 41: Declarações e Controle de Acesso

Enum

Page 42: Declarações e Controle de Acesso

Enum

Page 43: Declarações e Controle de Acesso

Perguntas?

Page 44: Declarações e Controle de Acesso

Elenilson [email protected]

Obrigado!