Anúncio
Anúncio

Mais conteúdo relacionado

Anúncio
Anúncio

Último(20)

Declarações e Controle de Acesso

  1. SCJP Declarações e Controle de Acesso Elenilson Vieira elenilson.vieira.filho@gmail.com
  2. 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
  3. 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
  4. 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); } }
  5. 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{} }
  6. 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#.
  7. 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
  8. 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
  9. 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
  10. 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;
  11. 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(); }
  12. 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).
  13. 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.
  14. 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
  15. 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
  16. 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.
  17. 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 { }
  18. Interfaces
  19. Modificadores de Acesso  Default, public, protected, private  Classes podem usar apenas default e public mas membros podem usar os 4
  20. Modificadores de Acesso  Membros públicos  Significa que todas as outras classes tem acesso a esse membro seja usando o (.) ou extends
  21. 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?
  22. 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(); } }
  23. Relembrando  Variáveis Locais  Apenas o final é aplicado … public void a(){ final int c = 10; }
  24. 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(){}
  25. 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
  26. Métodos Synchronized  Indicam que o método pode ser acessado por uma única thread no tempo. public synchronized void c(){}
  27. Métodos Native  Indica que o método é dependente de plataforma. Não é necessário saber como funciona, apenas que é um modificador
  28. 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
  29. 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); // Legal void b(char c, int... y); // legal void c(int... u, String a);//Ilegal void d(int u...);//Ilegal
  30. 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){} }
  31. 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.
  32. Variáveis Primitivas
  33. 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
  34. 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; }
  35. Variáveis
  36. Arrays  São objetos Int x[]; int[] y = new int[10];  Pode-se declarar arrays multidimensionais int a[][][]; char[] b[];
  37. 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
  38. Final, Transient, Volatile e Static
  39. 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)
  40. 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
  41. Enum
  42. Enum
  43. Perguntas?
  44. Obrigado! Elenilson Vieira elenilson.vieira.filho@gmail.com
Anúncio