Java para Concursos – Módulo 3
Vitor Almeida
[Link]
Agenda
● 1 Números e Datas
●
2 Interfaces e Classes Abstratas
●
3 Enums
● 4 Coleções
●
5 Generics
● 6 Classes Internas
[Link] 2
1 Números e Datas
[Link] 3
1.1 Introdução
● Basicamente fazemos três coisas com números
e datas
– Parsing (conversão de uma String em número ou
data)
– Formatação
– Manipulação
● Veremos três classes
– [Link]
– [Link] e [Link]
[Link] 4
1.2 Conversão de Números
● Wrappers possuem métodos estáticos para
conversão de Strings para números
public static int parseInt(String s) throws
NumberFormatException
● Exemplo
1 int x = [Link]("123");
[Link] 5
1.2 Conversão de Números
● Exemplo
01 import [Link];
02 public class NumTeste {
03 public static void main(String[] args) {
04 Scanner scanner = new Scanner([Link]);
05 String userInput = [Link]();
06 try {
07 int i = [Link](userInput);
08 [Link]("Digitou: " + i);
09 }
10 catch (NumberFormatException e) {
11 [Link]("Input inválido");}}}
[Link] 6
1.2 Formatação de Números
● Para formatar números, Java oferece a classe
[Link]
● É uma classe abstrata. Na prática, você
utiliza a subclasse [Link]
[Link] 7
1.2 Formatação de Números
● Exemplo
1 import [Link];
2 import [Link];
3 public class NFTeste {
4 public static void main(String[] args) {
5 NumberFormat nf =
[Link]([Link]);
6 [Link]([Link](123445));
7 }
8 } //123,445
[Link] 8
1.2 Formatação de Números
● Você pode usar o método parse de
NumberFormat para conversão de Strings
public [Link] parse([Link]
s) throws ParseException
[Link] 9
1.3 [Link]
● Math fornece métodos estáticos para
realização de operações matemáticas
● Tem duas constantes: E e PI
●
Métodos
public static double abs(double a)
public static double acos(double a)
public static double asin(double a)
[Link] 10
1.3 [Link]
● Métodos
public static double atan(double a)
public static double cos(double a)
public static double exp(double a)
public static double log(double a)
public static double log10(double a)
public static double max(double a, double b)
public static double min(double a, double b)
[Link] 11
1.4 Trabalhando com o Tempo
● São duas classes
– [Link]
– [Link]
● Dois construtores para Date
public Date()
public Date(long t)
● Dois métodos úteis
public boolean after(Date d)
public boolean before(Date d)
[Link] 12
1.4 Trabalhando com o Tempo
● Exemplo
1 Date d1 = new Date(1000);
2 Date d2 = new Date(1001);
3 if ([Link](d2)) {
4 [Link]("d1 anterior a d2");
5 } else {
6 [Link]("d1 depois de d2");
7 }
[Link] 13
1.4 Trabalhando com o Tempo
● Para criar uma instância de Calendar, use os
métodos
public static Calendar getInstance(Locale l)
public void setTime(Date d)
1 Calendar c = [Link]();
2 [Link](minhaData);
●
O método getTime retorna a data
armazenada em uma instância de Calendar
public final Date getTime();
[Link] 14
1.4 Trabalhando com o Tempo
● Para pegar uma parte da data armazenada
num objeto Calendar utilize o método get
public int get(int campo)
●
Os campos possíveis
– [Link], [Link], [Link],
[Link], [Link], Calendar.
SECOND, [Link]
[Link] 15
1.4 Trabalhando com o Tempo
● Para formatar datas podemos usar a classe
[Link]
● Ela aceita 4 estilos
– [Link] ou 12/2/2011
– [Link] ou Dec 2, 2011
– [Link] ou December 2, 2011
– [Link] ou Friday, December 2, 2011
[Link] 16
1.4 Trabalhando com o Tempo
● O método getInstance é utilizado para pegar
uma instância de DateFormat, o format é
utilizado para formatar e o parse para
converter uma String em data
public static DateFormat getDateInstance(int
estilo)
public final String format(Date d)
public Date parse(String s) throws
ParseException
[Link] 17
1.4 Trabalhando com o Tempo
01 import [Link];
02 import [Link];
03 import [Link];
04 public class DateFormatTest {
05 public static void main(String[] args) {
06 DateFormat l =
[Link]([Link]);
07 DateFormat f =
[Link]([Link]);
08 [Link]([Link](new Date()));
09 [Link]([Link](new Date()));
10 try {
11 Date d = [Link]("December 2, 2006");
12 } catch (ParseException e) {}}}
[Link] 18
1.4 Trabalhando com o Tempo
● Outra coisa para se preocupar é quanto à
tolerância de DateFormat. Por padrão, ela
permite a conversão de Strings com datas
irreais (exemplo: 31/02/2013)
● Dois métodos tratam do problema
public boolean isLenient()
public void setLenient(boolean value)
[Link] 19
1.4 Trabalhando com o Tempo
● A classe SimpleDateFormat permite usar
padrões
1 import [Link];
2 import [Link];
3 public class SimpleDateFormatTeste {
4 public static void main(String[] args) {
5 String pad = "dd/MM/yyyy";
6 SimpleDateFormat f = new
SimpleDateFormat(pad);
7 [Link]([Link](new Date()));
8 }}
[Link] 20
1.5 Questões de Concurso
●
1 Cesgranrio CMB 2012 Qual método da classe Match
retorna o menor número inteiro maior ou igual ao
valor dado?
(A) valueOf()
(B) random()
(C) floor()
(D) ceil()
(E) min()
[Link] 21
1.5 Questões de Concurso
●
1 Cesgranrio CMB 2012 Qual método da classe Match
retorna o menor número inteiro maior ou igual ao
valor dado?
(A) valueOf()
(B) random()
(C) floor()
(D) ceil()
(E) min()
[Link] 22
1.5 Questões de Concurso
●
2 FCC TRE-CE 2012 Considere o fragmento de código Java a seguir:
double a, b, c, d, e, f, r1, r2;
boolean r3;
a = 2; b = 3; c = 5; d = 3; e = 10; f = 1;
r1 = [Link](b, a) – e / (a+b) * d + a * c + d;
r2 = [Link](r1) * b + e – c * a;
r3 = r1 + b != r2 + d;
Os valores que serão armazenados nas variáveis r1, r2 e r3 são, respectivamente,
a) 15.0, 11.61 e true.
b) 16.0, 12.0 e true.
c) 16.0, 12.0 e false.
d) 16.0, 34 e true.
e) 15.0, 12.0 e false.
[Link] 23
1.5 Questões de Concurso
●
2 FCC TRE-CE 2012 Considere o fragmento de código Java a seguir:
double a, b, c, d, e, f, r1, r2;
boolean r3;
a = 2; b = 3; c = 5; d = 3; e = 10; f = 1;
r1 = [Link](b, a) – e / (a+b) * d + a * c + d;
r2 = [Link](r1) * b + e – c * a;
r3 = r1 + b != r2 + d;
Os valores que serão armazenados nas variáveis r1, r2 e r3 são, respectivamente,
a) 15.0, 11.61 e true.
b) 16.0, 12.0 e true.
c) 16.0, 12.0 e false.
d) 16.0, 34 e true.
e) 15.0, 12.0 e false.
[Link] 24
1.5 Questões de Concurso
● Gabarito
– 1D
– 2B
[Link] 25
2 Interfaces e Classes Abstratas
[Link] 26
2.1 Interfaces
● Uma interface não é uma classe com métodos
sem implementação
● Uma interface é um contrato entre um
provedor de serviços e um cliente
●
Exemplo
1 public interface DriveImp {
2 public void imprimir(Documento doc);
3 }
[Link] 27
2.1 Interfaces
● Uma implementação de DriveImp
1 public class HPDriver implements DriveImp {
2 public void imprimir(Documento doc) {
3 //código para fazer HP imprimir
4 }
5 }
●
Atributos são implicitamente públicos,
estáticos e final
1 public int STATUS = 1;
2 int STATUS = 1;
3 public static final STATUS = 1;
[Link] 28
2.1 Interfaces
● Ter que implementar todos os métodos de
uma interface é tedioso
● A saída é criar uma classe base
1 import [Link];
2 import [Link];
3 import [Link];
4 import [Link];
5 import [Link];
6 public class MeuServ extends GenericServlet{
7 public void service(ServletRequest request,
ServletResponse response)
throws ServletException, IOException {
8 [Link]().print("Olá");}}}
[Link] 29
2.2 Classes Abstratas
● Uma classe possui métodos abstratos, que
precisam ser implementados pelas subclasses,
mas também podem possuir métodos com
implementação
●
Os métodos sem implementação devem ser
declarados como abstratos
1 public abstract class ImpPadrao {
2 public String toString() {
3 return "Uma impressora para imprimir";
4 }
5 public abstract void print(Object doc);}
[Link] 30
2.2 Classes Abstratas
●
Um exemplo de subclasse
1 public class HPImpr extends ImpPadrao {
2 public void imprimir(Object doc) {
3 [Link]("Imprimindo");
4 //mais código da HP
5 }
6 }
[Link] 31
2.3 Questões de Concurso
● 1 CESPE TRT-ES 2009 A interface é uma
coleção de operações que pode especificar
serviços de uma classe ou componente.
[Link] 32
2.3 Questões de Concurso
● 1 CESPE TRT-ES 2009 A interface é uma
coleção de operações que pode especificar
serviços de uma classe ou componente.
[Link] 33
2.3 Questões de Concurso
● 2 CESPE ANAC 2009 Em Java, se uma
subclasse é derivada de uma superclasse com
um método abstract sem fornecer uma
definição para esse método abstract na
subclasse, esse método permanece abstract e
os objetos instanciados a partir dessa
subclasse não poderão utilizar o método
abstract.
[Link] 34
2.3 Questões de Concurso
● 2 CESPE ANAC 2009 Em Java, se uma
subclasse é derivada de uma superclasse com
um método abstract sem fornecer uma
definição para esse método abstract na
subclasse, esse método permanece abstract e
os objetos instanciados a partir dessa
subclasse não poderão utilizar o método
abstract.
[Link] 35
2.3 Questões de Concurso
●
3 Cesgranrio CMB 2012 Uma diferença entre classe e interface é que a
classe
a) pode ter um campo de dados, enquanto a interface não.
b) pode ser implementada em uma interface, enquanto a interface não
pode ser implementada em uma classe
c) é usada apenas em applets, enquanto a interface é usada apenas em
aplicativos dedicados.
d) é catalogada em pacotes, enquanto a interface não.
e) declara e implementa seus métodos, enquanto a interface apenas
declara.
[Link] 36
2.3 Questões de Concurso
●
3 Cesgranrio CMB 2012 Uma diferença entre classe e interface é que a
classe
a) pode ter um campo de dados, enquanto a interface não.
b) pode ser implementada em uma interface, enquanto a interface não
pode ser implementada em uma classe
c) é usada apenas em applets, enquanto a interface é usada apenas em
aplicativos dedicados.
d) é catalogada em pacotes, enquanto a interface não.
e) declara e implementa seus métodos, enquanto a interface apenas
declara.
[Link] 37
2.3 Questões de Concurso
●
4 Cesgranrio Petrobrás 2012 Ao escrever o código da
Classe PortaDeCofre em Java para que ela atenda a
interface Porta, como um programador deve começar a
declaração da classe?
a) public class Porta:PortaDeCofre {
b) public class PortaDeCofre :: Porta {
c) public class PortaDeCofre inherits Porta {
d) public class PortaDeCofre extends Porta {
e) public class PortaDeCofre implements Porta {
[Link] 38
2.3 Questões de Concurso
●
4 Cesgranrio Petrobrás 2012 Ao escrever o código da
Classe PortaDeCofre em Java para que ela atenda a
interface Porta, como um programador deve começar a
declaração da classe?
a) public class Porta:PortaDeCofre {
b) public class PortaDeCofre :: Porta {
c) public class PortaDeCofre inherits Porta {
d) public class PortaDeCofre extends Porta {
e) public class PortaDeCofre implements Porta {
[Link] 39
2.3 Questões de Concurso
●
5 Cesgranrio BNDES 2009 Qual das afirmações a seguir faz uma apreciação
correta a respeito da linguagem de programação Java?
a) O conceito de herança múltipla é implementado nativamente.
b) Uma classe pode implementar somente uma interface ao mesmo tempo.
c) Uma classe pode implementar uma interface ou ser subclasse de outra
classe qualquer, mas não ambos simultaneamente.
d) A construção de um método que pode levantar uma exceção, cuja
instância é uma subclasse de [Link], não exige
tratamento obrigatório por parte do programador dentro daquele método.
e) Objetos da classe [Link] têm comportamento otimizado para
permitir que seu valor seja alterado sempre que necessário, liberando
imediatamente a memória usada pelo conteúdo anterior.
[Link] 40
2.3 Questões de Concurso
●
5 Cesgranrio BNDES 2009 Qual das afirmações a seguir faz uma apreciação
correta a respeito da linguagem de programação Java?
a) O conceito de herança múltipla é implementado nativamente.
b) Uma classe pode implementar somente uma interface ao mesmo tempo.
c) Uma classe pode implementar uma interface ou ser subclasse de outra
classe qualquer, mas não ambos simultaneamente.
d) A construção de um método que pode levantar uma exceção, cuja
instância é uma subclasse de [Link], não exige
tratamento obrigatório por parte do programador dentro daquele método.
e) Objetos da classe [Link] têm comportamento otimizado para
permitir que seu valor seja alterado sempre que necessário, liberando
imediatamente a memória usada pelo conteúdo anterior.
[Link] 41
2.3 Questões de Concurso
● Gabarito
– 1C
– 2E
– 3E
– 4E
– 5D
[Link] 42
3 Enums
[Link] 43
3.1 Introdução
● Você utiliza enums para criar um conjunto
válido de valores para um atributo ou método
● Com Enum você garante que seu programa
terá apenas valores válidos
[Link] 44
3.1 Introdução
● Exemplo de Enum
1 public enum TipoCliente {
2 INDIVÍDUO,
3 ORGANIZAÇÃO
4 }
[Link] 45
3.1 Introdução
● Uso de uma Enum
1 public class Cliente {
2 public String nomeCliente;
3 public TipoCliente tipoCliente;
4 public String endereco;
5 }
● Atribuição de valor a uma Enum
1 Cliente cliente = new Cliente();
2 [Link] = [Link]ÍDUO;
[Link] 46
3.2 Enums em uma Classe
● Enum dentro de uma classe
1 public class Forma {
2 private enum TipoForma {
3 RETÂNGULO, TRIÂNGULO, CÍRCULO};
4 private TipoForma tipo = TipoForma.CÍRCULO;
5 public String toString() {
6 if ([Link] == [Link]ÂNGULO) {
7 return "Forma de retângulo";}
8 if ([Link] == [Link]ÂNGULO) {
9 return "Forma de triângulo";}
0 return "Forma de círculo";}}
[Link] 47
3.2 [Link]
● Quando você define uma Enum, o javac cria
uma definição de classe que extende de
[Link]
● Particulariedades da classe
– Não existe construtor público nem a
possibilidade de instanciação
– Existe apenas uma instância para cada valor da
Enum
[Link] 48
3.3 Iterando Enum
● Você utiliza um for e o método values da
classe Enum
1 for (TipoCliente tipoCliente :
[Link]())
{
2 [Link](tipoCliente);
3 }
[Link] 49
3.3 Enum e Switch
● Exemplo
1 Cliente c = new Cliente();
2 [Link] = [Link]ÍDUO;
3 switch ([Link]) {
4 case INDIVÍDUO:
5 [Link]("Tipo: Indivíduo");
6 break;
7 case ORGANIZAÇÃO:
8 [Link]("Tipo: Organização");
9 break;}
[Link] 50
4 Coleções
[Link] 51
4.1 Introdução
[Link] 52
4.1 Introdução
[Link] 53
4.1 Introdução
● A maioria das interfaces possuem uma
implementação completa
● Muitas vezes, temos duas versões: uma
sincronizada e outra não
●
Exemplo: Para a interface List, temos
[Link] e ArrayList
[Link] 54
4.1 Introdução
[Link]
[Link] 55
4.1 Introdução
[Link] 56
4.1 Introdução
[Link] 57
4.1 Introdução
[Link] 58
[Link] 59
[Link] 60
4.1 Introdução
● As interfaces possuem uma implementação
concreta
● Muitas vezes, temos duas versões: uma
sincronizada e outra não
●
Exemplo: Para a interface List, temos
[Link] e ArrayList
[Link] 61
4.2 A Interface Collection
● Uma Collection é um conjunto de objetos de
tamanho variável e que pode ter objetos
diferentes
● Métodos
– add insere um elemento na coleção
– clear tira todos os elementos
– size retorna o número de elementos
– isEmpty testa se a coleção é vazia
– toArray move os elementos para um Array
[Link] 62
4.2 A Interface Collection
● Mais métodos
[Link] 63
4.1 List e ArrayList
● Coleção ordenada, cujo primeiro elemento
está na posição 0.
● Métodos de list:
public boolean add([Link] element)
public void add(int ind, [Link] e)
public [Link] set(int ind,
[Link] e)
public [Link] remove(int ind)
[Link] 64
4.1 List e ArrayList
● Para criar um List, você atribui um objeto
ArrayList para uma variável de referência List
1 List myList = new ArrayList(20);
● Listas permitem objetos duplicados (ou duas
referências apontando para o mesmo objeto)
[Link] 65
01 import [Link];
02 import [Link];
03 public class ListTeste {
04 public static void main(String[] args) {
05 List myList = new ArrayList();
06 String s1 = "Hello";
07 String s2 = "Hello";
6
08 [Link](100); 100
09 [Link](s1); Hello
World
10 [Link](s2); Opa
11 [Link](s1); Hello
1
12 [Link](1); null
13 [Link](2, "World");
14 [Link](3, "Opa");
15 [Link](null);
16 [Link]([Link]());
17 for (Object object : myList) {
18 [Link](object);}}}
[Link] 66
4.1 List e ArrayList
● Em [Link] tem o método asList que
permite adicionar vários elementos em uma
lista de uma vez
1 List l = [Link]("Chuck", "Norris");
Métodos para pesquisar determinado objeto
public int indexOf([Link] o)
public int lastIndexOf([Link] o)
[Link] 67
4.2 Iterando coleções
● Existem duas formas, a mais fácil e prática é
com o for
1 for (Object object : myList) {
2 [Link](object);
3 }
[Link] 68
4.2 Iterando coleções
●
Collection é subclasse de Iterable que tem um
método iterator
● Este método retorna um objeto [Link]
●
Iterator tem os métodos:
– hasNext (retorna true se existe o próximo elemento)
– next (move para o próximo elemento e o retorna)
– Remove (retira o elemento)
[Link] 69
4.2 Iterando coleções
● Na prática
1 Iterator iterator = [Link]();
2 while ([Link]()) {
3 String s = (String) [Link]();
4 [Link](s);
5 }
[Link] 70
4.3 Set e HashSet
● Set é um conjunto matemático que não
permite objetos duplicados
1 Set set = new HashSet();
2 [Link]("Hello");
3 if ([Link]("Hello")) {
4 [Link]("sucesso");
5 } else {
6 [Link]("xiii");
7 }
[Link] 71
4.3 Set e HashSet
● HashSet é a implementação de Set mais
utilizada porque é mais rápida
● Permite um único null entre seus objetos
●
Não a garantia de que os elementos estejam
ordenados
●
Outras implementações: TreeSet e
LinkedHashSet
[Link] 72
4.4 Queue e LinkedList
●
Queue é uma Collection FIFO
● Métodos
– offer – funciona como o add, mas sem lançar exceção
– remove – remove um elemento, lança exceção se vazia
– poll – remove um elemento, retorna null se vazia
– element – retorna o elemento, mas não remove (exceção)
– peek, retorna o elemento, mas não remove (null)
[Link] 73
4.4 Queue e LinkedList
● Exemplo:
1 Queue queue = new LinkedList();
2 [Link]("a");
3 [Link]("b");
4 [Link]("c");
5 [Link]([Link]());
6 [Link]([Link]());
7 [Link]([Link]());
8 //a b c
[Link] 74
4.5 Conversão de Coleções
● Coleções possuem um construtor que aceitam
uma Collection
public ArrayList(Collection c)
public HashSet(Collection c)
public LinkedList(Collection c)
1 List l = new ArrayList();
2 [Link]("Hello");
3 [Link]("World");
4 [Link]("World");
5 Set set = new HashSet(l);
[Link] 75
4.6 Map e HashMap
● Um Map constitui uma série de pares de chaves/valores
● Métodos
– put – coloca uma par chave/valor
– putAll – coloca um Map em outro
– remove – passa a chave e remove o par
– clear, size, isEmpty
– keySet – retorna um set com todas as chaves
– values – retorna uma Collection com todos valores
[Link] 76
4.6 Map e HashMap
● Exemplo:
1 Map map = new HashMap();
2 [Link]("1", "hum");
3 [Link]("2", "dois");
4 [Link]([Link]());
5 [Link]([Link]("1"));
6 Set keys = [Link]();
7 for (Object object : keys) {
8 [Link](object);
9 }
[Link] 77
4.7 Questões de Concurso
● 1 CESPE 2012 BASA O código de classe a seguir é adequado para
converter, em Java, um array de string para um arraylist.
import [Link].*;
public class prova {
public static void main(String[] args) {
List minhaLista = new ArrayList();
String[] palavras = new String[] {"Java", "é", "Legal"};
[Link](minhaLista, palavras);
[Link](minhaLista);}}
[Link] 78
4.7 Questões de Concurso
● 1 CESPE 2012 BASA O código de classe a seguir é adequado para
converter, em Java, um array de string para um arraylist.
import [Link].*;
public class prova {
public static void main(String[] args) {
List minhaLista = new ArrayList();
String[] palavras = new String[] {"Java", "é", "Legal"};
[Link](minhaLista, palavras);
[Link](minhaLista);}}
[Link] 79
4.7 Questões de Concurso
●
2 FCC TRF 2012 No Java, é uma interface que não permite elementos
duplicados e modela a abstração matemática de conjunto. Contém
apenas métodos herdados da interface Collection e adiciona a restrição
de que elementos duplicados são proibidos.
A interface citada é:
a) List.
b) Set.
c) ArrayList.
d) Map.
e) HashMap.
[Link] 80
4.7 Questões de Concurso
●
2 FCC TRF 2012 No Java, é uma interface que não permite elementos
duplicados e modela a abstração matemática de conjunto. Contém
apenas métodos herdados da interface Collection e adiciona a restrição
de que elementos duplicados são proibidos.
A interface citada é:
a) List.
b) Set.
c) ArrayList.
d) Map.
e) HashMap.
[Link] 81
4.7 Questões de Concurso
●
3 FCC 2009 TJ-SE Uma lista Java é uma coleção ordenada
de elementos do mesmo tipo, conhecida por sequência.
Os elementos de uma lista podem ser acessados pela sua
posição, isto é, seu índice e são derivados da interface
a) [Link], que estende a interface Collection.
b) [Link], que estende a interface Set.
c) [Link], que estende a interface Collection.
d) [Link], que estende a interface List.
e) [Link], que estende a interface Collection.
[Link] 82
4.7 Questões de Concurso
●
3 FCC 2009 TJ-SE Uma lista Java é uma coleção ordenada
de elementos do mesmo tipo, conhecida por sequência.
Os elementos de uma lista podem ser acessados pela sua
posição, isto é, seu índice e são derivados da interface
a) [Link], que estende a interface Collection.
b) [Link], que estende a interface Set.
c) [Link], que estende a interface Collection.
d) [Link], que estende a interface List.
e) [Link], que estende a interface Collection.
[Link] 83
4.7 Questões de Concurso
●
4 FCC 2009 PGE-RJ A interface Map do fremework de
coleções da linguagem Java retorna o valor associado
a uma chave especificada por meio do método
a) Object get(Object key).
b) Object put(Object key, Object value).
c) int size( ).
d) Object firstKey( ).
e) boolean containsKey(Objet key).
[Link] 84
4.7 Questões de Concurso
●
4 FCC 2009 PGE-RJ A interface Map do fremework de
coleções da linguagem Java retorna o valor associado
a uma chave especificada por meio do método
a) Object get(Object key).
b) Object put(Object key, Object value).
c) int size( ).
d) Object firstKey( ).
e) boolean containsKey(Objet key).
[Link] 85
4.7 Questões de Concurso
●
5 FCC 2009 TRT Em Java, uma Collection que não
contém elementos duplicados é a interface
a) SET.
b) MAP.
c) LIST.
d) ITERATOR.
e) ENUMERATION.
[Link] 86
4.7 Questões de Concurso
●
5 FCC 2009 TRT Em Java, uma Collection que não
contém elementos duplicados é a interface
a) SET.
b) MAP.
c) LIST.
d) ITERATOR.
e) ENUMERATION.
[Link] 87
4.7 Questões de Concurso
● Gabarito
– 1E
– 2B
– 3E
– 4A
– 5A
[Link] 88
5 Generics
[Link] 89
5.1 Introdução
● Com Generics você cria tipos e métodos
parametrizados
● Benefícios
– Checagem de tipo em tempo de compilação
– Eliminação da necessidade de Casting
[Link] 90
5.1 Introdução
● A vida antes da JDK 5
1 List l = new ArrayList();
2 [Link]("Provas de TI");
3 [Link]("Bom demais");
4 String s1 = (String) [Link](0);
[Link] 91
5.2 Como funciona?
● Exemplo
1 import [Link];
2 import [Link];
3 public class GenericsListTeste {
4 public static void main(String[] args) {
5 List<String> l = new ArrayList<>();
6 [Link]("Java");
7 [Link]("com generics");
8 String s2 = [Link](0);
9 [Link]([Link]());}}
[Link] 92
5.2 Como funciona?
1 List<List<String>> minhaListadeListas;
(…)
2 String s = [Link](0).get(0);
[Link] 93
5.2 Como funciona?
● Maps Generics
1 import [Link];
2 import [Link];
3 public class MapTeste {
4 public static void main(String[] args) {
5 Map<String, String> m = new HashMap<>();
6 [Link]("key1", "Provas de TI");
7 [Link]("key2", "Salvação");
8 String s = [Link]("key1");}}
[Link] 94
●
Uso do ?
01 import [Link];
02 import [Link];
03 public class CoringaTeste {
04 public static void printList(List<?> l) {
05 for (Object element : l) {
06 [Link](element);}}
07 public static void main(String[] args) {
08 List<String> l1 = new ArrayList<>();
09 [Link]("Hello");
10 [Link]("World");
11 printList(l1);
12 List<Integer> l2 = new ArrayList<>();
13 [Link](100);
14 [Link](200);
15 printList(l2);}}
[Link] 95
●
? delimitado
01 import [Link];
02 import [Link];
03 public class CoringaTeste {
04 public static double getMedia(List<?
extends Number> l) {
05 double total = 0.0;
06 for (Number n : l) {
07 total += [Link]();}
08 return total/[Link]();}
09 public static void main(String[] args) {
10 List<Integer> l1 = new ArrayList<>();
11 [Link](3);
12 [Link](30);
13 [Link](300);
14 [Link](getMedia(l1)); // 111
15 }}
[Link] 96
5.3 Escrevendo Tipos Genéricos
●
Você pode criar classes Generics
01 public class Ponto<T> {
02 T x;
03 T y;
04 public Ponto(T x, T y) {
05 this.x = x;
06 this.y = y;}
07 public T getX() {
08 return x;}
09 public T getY() {
10 return y;}
11 public void setX(T x) {
12 this.x = x;}
13 public void setY(T y) {
14 this.y = y;}}
[Link] 97
5.3 Escrevendo Tipos Genéricos
● Agora é só usar
1 Ponto<Integer> p1 = new Ponto<>(4, 2);
2 [Link](7);
3 Ponto<Double> p2 = new Ponto<>(1.3, 2.6);
4 [Link](109.91)
[Link] 98
5.4 Questões de Concurso
●
1 CESPE 2012 ANAC O código abaixo irá compilar e retornar o
número 70.
import [Link].*
public class OutTeste {
– public static void main(String[] args) {
●
List<Integer> list = new ArrayList<Integer>();
●
[Link](0, 70);
●
int total = [Link](1);
●
[Link](total);
– }
●
}
[Link] 99
5.4 Questões de Concurso
●
1 CESPE 2012 ANAC O código abaixo irá compilar e retornar o
número 70.
import [Link].*
public class OutTeste {
– public static void main(String[] args) {
●
List<Integer> list = new ArrayList<Integer>();
●
[Link](0, 70);
●
int total = [Link](1);
●
[Link](total);
– }
●
}
[Link] 100
5.4 Questões de Concurso
●
2 Cesgranrio Petrobrás 2012 Uma aplicação Java precisa manter na memória principal do
computador uma coleção de objetos com as seguintes características:
• poderá conter dezenas de milhares de objetos;
• seus objetos não estarão ordenados;
• um número considerável de objetos poderá ser inserido em tempo de execução;
• a operação mais executada será o percurso sequencial na ordem inversa de inserção dos
objetos na coleção.
Diante dessas características, qual das classes irá proporcionar à aplicação a melhor
performance em relação à manipulação dessa coleção?
a) LinkedList <E> b) ArrayList <E> c) HashSet <E> d) HashMap <K,V> e) TreeSet <E>
[Link] 101
5.4 Questões de Concurso
●
2 Cesgranrio Petrobrás 2012 Uma aplicação Java precisa manter na memória principal do
computador uma coleção de objetos com as seguintes características:
• poderá conter dezenas de milhares de objetos;
• seus objetos não estarão ordenados;
• um número considerável de objetos poderá ser inserido em tempo de execução;
• a operação mais executada será o percurso sequencial na ordem inversa de inserção dos
objetos na coleção.
Diante dessas características, qual das classes irá proporcionar à aplicação a melhor
performance em relação à manipulação dessa coleção?
a) LinkedList <E> b) ArrayList <E> c) HashSet <E> d) HashMap <K,V> e) TreeSet <E>
[Link] 102
5.4 Questões de Concurso
● Gabarito
– 1E
– 2A
[Link] 103
6 Classes Internas
[Link] 104
6.1 Introdução
● Temos 04 tipos de classes internas:
– Classe estática aninhada (static nested class)
– Classe não estática aninhada
● Classe interna comum (member inner class)
● Classe interna local (local inner class)
● Classe interna anônima (anonymous inner class)
[Link] 105
6.1 Introdução
● Exemplo básico:
1 public class Externa {
2 class Interna {
3 }
4 }
[Link] 106
6.2 Classes Estáticas Aninhadas
1 class Externa {
2 private static int valor = 9;
3 static class Interna {
4 int calcular() {
5 return valor;}}}
6
7 public class staticTeste {
8 public static void main(String[] args) {
9 [Link] i = new [Link]();
0 [Link]([Link]());}}
[Link] 107
6.3 Classes Internas Comuns
1 class TopLevel {
2 private int valor = 9;
3 class Inner {
4 int calcular() {
5 return valor;}}}
6 public class MemberInnerTeste {
7 public static void main(String[] args) {
8 TopLevel t = new TopLevel ();
9 [Link] i = [Link] Inner();
0 [Link]([Link]());}}
[Link] 108
6.4 Classes Internas Locais
01 import [Link];
02 interface Log {
03 public void log(String m);}
04 public class LocalClassTeste {
05 String a = (new Date()).toString();
06 public Log getLog() {
07 class LogImpl implements Log {
08 public void log(String m) {
09 [Link](a + " : " + m);}}
10 return new LogImpl();}
11 public static void main(String[] args) {
12 LocalClassTeste t = new LocalClassTeste();
13 Log log = [Link]();
14 [Link]("Exemplo de classe local");}}
[Link] 109
6.5 Classes Internas Anônimas
1 interface Printable {
2 void print(String m);}
3 public class AnonymousInnerClassTeste{
4 public static void main(String[] args) {
5 Printable p = new Printable() {
6 public void print(String m) {
7 [Link](m);}};
8 [Link]("Java");}}
[Link] 110
6.6 Questões de Concurso
●
1 VUNESP 2010 CEAGESP Considere o código a seguir, escrito na linguagem de
programação JAVA.
public class Testing {
private static int i = 0;
public static void go(){[Link](i++);}
public static void main(String args[]){
new Testing().go(); new Testing().go(); new Testing().go(); new Testing().go();
new Testing().go2();
public void go2(){new TestingIntern().run();}
public class TestingIntern {
public void run(){[Link](i++);}}}
●
Após a sua execução, o resultado apresentado será:
a) 01234 b) 23456 c) Sintax Error( )
d) ArrayOutOffBound( ) e) NullPointerException( )
[Link] 111
6.6 Questões de Concurso
●
1 VUNESP 2010 CEAGESP Considere o código a seguir, escrito na linguagem de
programação JAVA.
public class Testing {
private static int i = 0;
public static void go(){[Link](i++);}
public static void main(String args[]){
new Testing().go(); new Testing().go(); new Testing().go(); new Testing().go();
new Testing().go2();
public void go2(){new TestingIntern().run();}
public class TestingIntern {
public void run(){[Link](i++);}}}
●
Após a sua execução, o resultado apresentado será:
a) 01234 b) 23456 c) Sintax Error( )
d) ArrayOutOffBound( ) e) NullPointerException( )
[Link] 112
6.6 Questões de Concurso
● 2 FCC 2010 MPE-RN A linguagem Java 6 permite a
declaração de uma classe aninhada que se trata de
uma classe
● a) genérica.
●
b) abstrata.
●
c) agregada.
● d) membro de outra.
●
e) anônima.
[Link] 113
6.6 Questões de Concurso
● 2 FCC 2010 MPE-RN A linguagem Java 6 permite a
declaração de uma classe aninhada que se trata de
uma classe
● a) genérica.
●
b) abstrata.
●
c) agregada.
● d) membro de outra.
●
e) anônima.
[Link] 114
5.4 Questões de Concurso
● Gabarito
– 1A
– 2D
[Link] 115
Fim
[Link] 116