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 { }
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); // Legal
void b(char c, int... y); // legal
void c(int... u, String a);//Ilegal
void 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 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;
}
Arrays
São objetos
Int x[];
int[] y = new int[10];
Pode-se declarar arrays multidimensionais
int 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
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