Buscar

Conhecimentos em Java: Anotações e Reflection API

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1) Quais alternativas são verdadeiras com relação ao código abaixo?
* Marque todas as alternativas que respondem o enunciado da questão 
	1
	@Target(ElementType.METHOD)
	2
	@Retention(RetentionPolicy.RUNTIME)
	3
	public @interface Synchronized {
	4
	  boolean value() default true;
	5
	}
	
	A anotação @Synchronized não pode ser lida em tempo de execução, usando a Reflection API.
	
	A anotação @Synchronized pode ser utilizada apenas na declaração de métodos.
	
	Se não for passado um valor para o elemento value, true será assumido.
	
	O código não compila porque não é possível utilizar anotações como @Target e @Retention para anotar a declaração de uma nova anotação.
	
	Usar @Synchronized(true) para anotar um método é considerada uma declaração válida.
2) O que é correto afirmar sobre a anotação @Override do Java? 
	
	Deve ser usada para anotar uma classe que pode ter subclasses.
	
	Deve ser usada para anotar métodos de uma classe que podem ser sobrescritos pelas subclasses.
	
	Indica que o método anotado com esta anotação está sobrescrevendo um método da superclasse.
	
	Indica que a atributo anotado com esta anotação está redefinindo um atributo da superclasse.
	
	Esta anotação não existe.
3) Quais afirmativas são verdadeiras com relação à Reflection API?
* Marque todas as alternativas que respondem o enunciado da questão 
	
	O ponto de entrada para acessarmos a estrutura de uma classe é através da obtenção de um objeto da classe Structure.
	
	Métodos de uma classe podem ser invocados em um objeto através da Reflection API.
	
	Apenas as classes que fazem parte da API do Java possuem informações a respeito da sua estrutura.
	
	Usando a Reflection API, é possível instanciarmos um objeto de uma classe usando apenas o nome da classe em forma de string.
	
	A Reflection API permite que as classes do Java conheçam sua própria estrutura (atributos, métodos, construtores, etc.).
4) Qual código deve ser usado para criarmos uma instância de uma classe chamando o construtor padrão (sem parâmetros), onde apenas o seu nome é conhecido (o nome da classe é MinhaClasse)? 
	
	MinhaClasse.newInstance()
	
	Class.getDeclaredConstructor().newInstance("MinhaClasse")
	
	Class.forName("MinhaClasse") 
	
	Class.forName("MinhaClasse").getDeclaredConstructor().newInstance()
	
	new Instance("MinhaClasse")
5) Quais são formas válidas de obter uma instância da classe Class, que é a classe que representa a estrutura da classe MinhaClasse?
* Marque todas as alternativas que respondem o enunciado da questão 
	
	new Class("MinhaClasse")
	
	MinhaClasse.class
	
	Class.newInstance("MinhaClasse")
	
	MinhaClasse.getClass()
	
	Class.forName("MinhaClasse")
1) Quais alternativas são verdadeiras com relação ao código abaixo?
* Marque todas as alternativas que respondem o enunciado da questão 
view sourceprint?
	1
	@Target(ElementType.METHOD)
	2
	@Retention(RetentionPolicy.RUNTIME)
	3
	public @interface Synchronized {
	4
	  boolean value() default true;
	5
	}
	
	A anotação @Synchronized não pode ser lida em tempo de execução, usando a Reflection API. (alternativa incorreta)
	
	A anotação @Synchronized pode ser utilizada apenas na declaração de métodos. (alternativa correta)
	
	Se não for passado um valor para o elemento value, true será assumido. (alternativa correta)
	
	O código não compila porque não é possível utilizar anotações como @Target e @Retention para anotar a declaração de uma nova anotação. (alternativa incorreta)
	
	Usar @Synchronized(true) para anotar um método é considerada uma declaração válida. (alternativa correta)
	
Resposta correta!
A anotação @Synchronized está declarada de forma correta. Ela pode ser usada apenas para anotar métodos, já que é isso que foi definido através da anotação @Target. Ela também pode ser lida usando a Reflection API, de acordo com o que foi especificado na anotação @Retention. Quando apenas um elemento value é definido na anotação, ele pode ser omitido. Desta forma, ambas as declarações são possíveis: @Synchronized(true) e @Synchronized(value = true).
2) O que é correto afirmar sobre a anotação @Override do Java? 
	
	Deve ser usada para anotar uma classe que pode ter subclasses. (alternativa incorreta)
	
	Deve ser usada para anotar métodos de uma classe que podem ser sobrescritos pelas subclasses. (alternativa incorreta)
	
	Indica que o método anotado com esta anotação está sobrescrevendo um método da superclasse. (alternativa correta)
	
	Indica que a atributo anotado com esta anotação está redefinindo um atributo da superclasse. (alternativa incorreta)
	
	Esta anotação não existe. (alternativa incorreta)
	
Resposta correta!
A anotação @Override existe e é usada para anotar métodos que estão sobrescrevendo métodos definidos na superclasse. O uso desta anotação não é obrigatório, mas caso ela esteja presente, o compilador verifica se o método realmente está sobrescrevendo um método da superclasse. Caso não esteja, um erro de compilação acontece.
3) Quais afirmativas são verdadeiras com relação à Reflection API?
* Marque todas as alternativas que respondem o enunciado da questão 
	
	O ponto de entrada para acessarmos a estrutura de uma classe é através da obtenção de um objeto da classe Structure. (alternativa incorreta)
	
	Métodos de uma classe podem ser invocados em um objeto através da Reflection API. (alternativa correta)
	
	Apenas as classes que fazem parte da API do Java possuem informações a respeito da sua estrutura. (alternativa incorreta)
	
	Usando a Reflection API, é possível instanciarmos um objeto de uma classe usando apenas o nome da classe em forma de string. (alternativa correta)
	
	A Reflection API permite que as classes do Java conheçam sua própria estrutura (atributos, métodos, construtores, etc.). (alternativa correta)
	
Resposta incorreta!
A Reflection API é usada para acessarmos estruturas internas de qualquer classe escrita em Java. O ponto de entrada para o uso da API é a obtenção de uma instância da classe Class que representa a classe cuja estrutura queremos acessar. Uma característica bastante interessante (e muito usada) da Reflection API é a criação de objetos de classes onde apenas o seu nome, em forma de string, é conhecido.
4) Qual código deve ser usado para criarmos uma instância de uma classe chamando o construtor padrão (sem parâmetros), onde apenas o seu nome é conhecido (o nome da classe é MinhaClasse)? 
	
	MinhaClasse.newInstance() (alternativa incorreta)
	
	Class.getDeclaredConstructor().newInstance("MinhaClasse") (alternativa incorreta)
	
	Class.forName("MinhaClasse") (alternativa incorreta)
	
	Class.forName("MinhaClasse").getDeclaredConstructor().newInstance() (alternativa correta)
	
	new Instance("MinhaClasse") (alternativa incorreta)
	
Resposta correta!
A forma de fazer isto em Java é através do código Class.forName("MinhaClasse").getDeclaredConstructor().newInstance(). O código Class.forName("MinhaClasse").getDeclaredConstructor() não cria uma instância da classe: ele apenas retorna uma instância da classe Class que representa a classe MinhaClasse.
5) Quais são formas válidas de obter uma instância da classe Class, que é a classe que representa a estrutura da classe MinhaClasse?
* Marque todas as alternativas que respondem o enunciado da questão 
	
	new Class("MinhaClasse") (alternativa incorreta)
	
	MinhaClasse.class (alternativa correta)
	
	Class.newInstance("MinhaClasse") (alternativa incorreta)
	
	MinhaClasse.getClass() (alternativa incorreta)
	
	Class.forName("MinhaClasse") (alternativa correta)
	
Resposta incorreta!
As duas formas são MinhaClasse.class e Class.forName("MinhaClasse"). Todas as outras formas descritas são inválidas na linguagem Java.

Continue navegando