Download - Declarações e Controle de Acesso
Elenilson [email protected]
SCJPSCJPDeclarações e Controle de AcessoDeclaraçõ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
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
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);
}}
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{}}
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#.
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
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
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
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;
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();}
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).
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.
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
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
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.
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 { }
Interfaces
Modificadores de Acesso
Default, public, protected, private
Classes podem usar apenas default e public mas membros podem usar os 4
Modificadores de Acesso
Membros públicos Significa que todas as outras classes tem acesso a
esse membro seja usando o (.) ou extends
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?
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();
}}
Relembrando
Variáveis Locais Apenas o final é aplicado
…public void a(){
final int c = 10;}
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(){}
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
Métodos Synchronized
Indicam que o método pode ser acessado por uma única thread no tempo.
public synchronized void c(){}
Métodos Native
Indica que o método é dependente de plataforma. Não é necessário saber como funciona, apenas que é um modificador
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
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
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){}
}
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.
Variáveis Primitivas
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
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;
}
Variáveis
Arrays
São objetosInt x[];int[] y = new int[10];
Pode-se declarar arrays multidimensionaisint a[][][];char[] b[];
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
Final, Transient, Volatile e Static
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)
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
Enum
Enum
Perguntas?