Chapter IV - Methods and Encapsulation Flashcards

1
Q

Modificador de acesso Protected

A

o membro da classe pode ser chamado por classes dentro do mesmo package ou classes que extends dela.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Modificador de acesso default

A

Quando nennhum modificador de acesso é colocado em uma classe, o modificador default é utilizado. A classe/membro entao é visível para as classes que estejam no mesmo package dela.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

O optional specifiers “static” so pode ser utilizado em membros da classe, nunca na declaracao de uma classe.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Todo método tem que obrigatoriamente ter: modificador de acesso (se nenhum for especificado, o default é utilizado), nome e tipo de retorno.
Opcionalmente voce pode adicionar optional specifiers (static, final), uma lista de argumentos e/ou exceptions.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Lembrete:

o array vararg (int… args, por exemplo) deve ser o ultimo da lista de parametros, SEMPRE. Isso tambem significa dizer que voce so pode ter um vararg por metodo.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Caso o array de parametros vararg seja omitido (nao passado como parametro), o Java ira criar um array de tamanho 0 para voce. Entao mesmo que o caller do seu metodo nao passe o array de parametros, varargs.length nao vai estourar uma exception.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Lista dos modificadores de acesso por grau de permissibilidade:

Private -> apenas visivel dentro da propria classe
default (private package) -> visivel dentro da propria classe e dentro do package.
protected -> visivel dentro da propria classe, dentro do package e de todos que extenderem (extends) da sua classe.
public -> visivel em todo o projeto

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Tricky!

Mesmo que eu faca o extends de uma classe que possua membros (atributo ou metodo) estaticos, eu nao posso fazer uso desses membros se eu estiver chamando eles atraves de uma instancia da classe mae que esteja dentro da classe que extends.

Outro caso: os membros protected de uma classe nao ficam visiveis caso uma segunda classe seja publica, extends ela mas uma terceira classe faca a instanciacao dessa segunda classe em outro package fora do package onde a classe mae foi criada.

**Ler quantas vezes for necessario.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Eu posso fazer uso de metodos/atributos estaticos de uma classe atraves da instancia da classe! Nesse caso o compilador do Java usa o tipo de referencia ao inves de usar a propria instancia em si.

Mesmo que eu tenha uma instancia que seja null, ainda assim ele nao vai lancar exception porque ele nao vai usar a instancia e sim o tipo da instancia.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Se eu tenho uma variavel static dentro da minha classe, ela sera compartilhada entre todas as intancias dessa mesma classe.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Static x Instance

Uma instancia pode fazer uso como bem quiser de membros estaticos.
Um membro estatico nao pode fazer uso de membros que nao sejam estaticos (seja variaveis ou metodos).

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Variáveis do tipo final no contexto de um bloco inicializador:

  • se ja tiver sido inicializado, nao pode alterar o valor;
  • se nao tiver sido inicializado, posso iniciar;
  • a variavel do tipo final nao pode ficar sem inicializacao, entao preciso inicia-la dentro do bloco.
A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Imports static:

  • posso importar um metodo/atributo (static) e utilizar apenas o nome dele, sem a classe que normalmente o chamaria, exemplo:
import static java.util.Arrays.asList;
//...
List list = asList("one", "two"); //funciona
A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Imports static sao apenas para os membros da classe (variaveis e métodos).

Tricky!

O exame pode tentar usar um metodo estatico (que foi importado) de uma classe que ele nao importou! Nesse caso vai dar erro por falta de ter o import da classe.

//Erro de compilação

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Em termos de passagem de dados para chamadas de métodos, o Java funciona com pass by value, ou seja, ele copia o valor do objeto para enviar para dentro do metodo.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Overloading.

Modificadores de acesso, optional specifiers, lista de exceptions e retorno não caracterizam um overload de um método (na verdade o codigo nao vai compilar).

Em resumo, o overloading correto do metodo é quando usamos a mesma assinatura, mas mudamos algo na lista de parâmetros.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Overloading e varargs -

Java reconhece que voce esta passando um varargs quando a lista (array) de parametros é passado separadamente.

fly (new int [ ] { 1,2,3 }); // java vai entender como um array padrao
fly (1,2,3) // java vai entender como sendo varargs

A
18
Q

Overloading - Autoboxing

O Java tenta encontrar um match para o parametro que eu passei, se ele não encontrar na primeira, ele vai tentar fazer um autoboxing pra ver se ajuda, se não tiver um overloading pra esse cara, ai ele vai logo pro que mais se encaixar (ou dar um erro de compilação se não conseguir encontrar um match).

A
19
Q

Default constructors so sao criados quando eu nao crio nenhum outro construtor, seja ele publico ou privado. Ele so sera gerado quando a classe for compilada.

A
20
Q

A forma de fazer uso de um construtor sendo chamado dentro de outro (constructor chaining), sem instanciar um outro objeto, eh por meio do uso do “this()”. “this()” vai chamar outro construtor que eu possa ter na minha classe.

Obs: this() tem que ser o primeiro statement do construtor aonde eu chamo, se nao o codigo nao compila.

A
21
Q

Order of Initialization de uma classe:

1 - Superclass
2 - variaveis static e initializers static, pela ordem que aparecem no arquivo
3 - variaveis de instancia e initializers de instancia, pela ordem que aparecem no arquivo
4 - construtores
A
22
Q

Sobre a ordem de inicializacao de variaveis e execucao de statements, ter cuidado:

se eu estou instanciando um objeto dentro da minha propria classe (do metodo main), tenho que lembrar que antes do main ser executado, a regra 1 e 2 sao executadas primeiras (porque eu estou referenciando a minha propria classe).

A
23
Q

JavaBeans convention:

metodos getters boolean podem comecar com “Get” ou “is”.

A
24
Q

Functional programming é uma forma de escrever código mais declarativamente.

A
25
Q

Expressoes lambdas sao metodos anonimos (nao pertencem a ninguem)

A
26
Q

Exemplo de uma expressao que verifica, para cada animal da lista, se o mesmo pode pular:

print(animalsList, a -> a.canHop() );

//public void print(List list, Predicted checker){}

A
27
Q

Lembrete:

public int method() { return null; } //The code does not compile

É errado porque null é do tipo Object e o método ta esperando um tipo primitivo inteiro.

A
28
Q

Sobre passar varargs como argumento de metodo:

Válido

howMany(new boolean[2]);
howMany(new boolean[2] {true, true} );
howMany(true, true);

Inválido
howMany( {true, true} ); // The code does not compile

A
29
Q

Obviamente, o cenceito de imutabilidade faz uso de atributos private.

A
30
Q

Eu posso fazer imports static de tudo que tem em uma classe, e nao apenas de um metodo especifico.

Valido: mypackage.MyClass.* (todos os membros staticos dessa classe)

O que eu nao posso fazer eh usar import static mypackage.* (todas as classes) da erro de compilacao

A
31
Q

Estar bem atento se um membro estatico esta chamando ou nao um membro nao estatico (pois nao eh possivel)

A
32
Q

Cuidado!

Eu posso fazer o import de todas as classes que tem dentro de um pacakge, se esse import nao for static.
Se for static eu so posso fazer o import de todos os membros estaticos da classe.

A
33
Q

Lembrar que as instancias de uma classe que tenham um atributo estatico partilham do acesso a esse atributo, ou seja, elas todas podem fazer modificacoes nesse atributo.

A
34
Q

Imports (estaticos ou default) nao possuem parametros, exemplo:

import static java. util.Collections.sort(ArrayList); //The code does not compile

A
35
Q

O Java por padrao utiliza o tipo primitivo double para armazenamento de dados com ponto flutuante. Caso eu queria realmente usar o float, eu devo colocar o f no final do valor.

Ex: private float price = 5.40f;

A
36
Q

Lembrar de checkar o tipo de parametros que o metodo da minha interface ta esperando (quando trabalhando com lambdas)

A
37
Q

O Java nao me obriga a colocar a keyword return ou utilizar ponto e virgula quando nao faço uso das chaves na chamada da expressão lambda.

A
38
Q

Os parenteses so são opcionais na minha expressao lambda se eu tiver apenas um argumento e ele nao tiver seu tipo explícito.

A
39
Q

Java não me permite redeclarar uma variável local, por isso que não posso dar reassigned dos parâmetros de uma expressão lambda dentro da mesma.

Entretanto posso criar novas variáveis dentro do body da lambda.

A
40
Q

Lambdas só funcionam com interfaces que possuam apenas um método. Se minha interface tiver mais de um…já não consigo fazer uso de expressões lambdas.

A