Buscar

poos3_aula_3_string_coletor_lixo_arraylist

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

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

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ê viu 3, do total de 7 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

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

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ê viu 6, do total de 7 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

Prévia do material em texto

POOS3 – Programação Orientada a Objetos edilson.ifsp@gmail.com 
 
Aula 3 – String, Coletor de Lixo, ArrayList, Vários Formulários 
1. String 
Em Java, Strings são objetos e cada um dos caracteres da String possui tamanho de 16 bits. Assim 
como com os demais objetos, é possível criar uma instância da classe String utilizando-se a palavra 
chave new. Veja abaixo: 
String s = new String("ifsp"); 
Outra maneira é associar o conteúdo de forma direta: 
s = "ifsp"; 
É importante ressaltar que uma vez que um valor tenha sido associado a uma String, esse valor 
não poderá ser alterado. Ele é imutável. Apesar disso, a variável de referência para a String não é 
imutável. Vejas os Exemplos: 
a) 
 
b) 
 
c) 
 
 
Veja o trecho abaixo. Qual é a saída? 
 String x = "Java"; 
 x.concat(" Rules"); 
 System.out.println("x = " + x); 
Saída: 
 x = Java 
 
 
1.1. Métodos da classe String 
Para testar se duas Strings são iguais, utilize o método equals. Dessa maneira, dadas as Strings s 
e t, a expressão s.equals(t); retorna “verdadeiro” se s e t forem iguais. Caso contrário, o retorno 
será “falso”. Atenção: Não utilize o operador “==” para testar se duas Strings são iguais. O operador 
“==” apenas determina se as Strings possuem a mesma referência na memória. 
Exemplo 1: 
String senhaValida = "ifsp"; 
String senhaFornecida = "ifsp"; 
 
if (senhaFornecida.equals(senhaValida)){ 
 System.out.println("Senha Correta!"); 
} else { 
 System.out.println("Senha Incorreta!"); 
} 
 
Ao executar o código acima, a frase impressa será “Senha Correta”. 
 
Veja a seguir outros métodos bastante úteis para a manipulação de Strings: 
Método Descrição 
charAt() Retorna o caractere do índice especificado 
concat() Concatena uma String no final da outra (+ também funciona) 
equalsIgnoreCase() Compara duas Strings ignorando a distinção entre maiúsculas e minúsculas 
length() Retorna o comprimento de uma String 
replace() Substitui ocorrências de um caractere pelo novo caractere 
substring() Retorna uma parte de uma String 
toLowerCase() Cria uma nova String com as letras em minúsculo 
toString() Retorna o valor de uma String (que representa o objeto em questão) 
toUpperCase() Cria uma nova String com as letras em maiúsculo 
trim() Remove os espaços em branco que aparecem no início ou fim da String 
 
 
 
Exemplos: 
 
String s = "ifsp"; 
String t = "IFSP"; 
String u = " 1 IFSP"; 
 
System.out.println(s.charAt(1)); 
//Saída: f 
 
System.out.println(s.concat(" 2014")); 
//Saída: ifsp 2014 
 
if (s.equalsIgnoreCase(t)){ 
 System.out.println("s e t são Iguais!"); 
} else { 
 System.out.println("s e t NÃO são Iguais!"); 
} 
//Saída: s e t são Iguais! 
 
System.out.println(s.length()); 
//Saída: 4 
 
System.out.println(s.replace("sp", "rs")); 
//Saída: ifrs 
 
System.out.println(s.substring(1)); 
//Saída: fsp 
//Observe que a substring começa no índice 1 e vai até o final da String 
//original 
 
System.out.println(s.substring(1, 3)); 
//Saída: fs 
//Observe que a substring começa no índice 1 e termina no índice 3 (sem 
//incluir o 3) 
 
System.out.println(t.toLowerCase()); 
//Saída: ifsp 
 
System.out.println(s.toUpperCase()); 
//Saída: IFSP 
 
System.out.println(u.trim()); 
//Saída: 1 IFSP 
 
Cuidado com “==” versus “equals()” 
 
 if (new String("ifsp").equals("ifsp")){ // Verdadeiro 
 
 if (new String("ifsp") == "ifsp"){ // Falso 
 
 if (new String("ifsp") == new String("ifsp")){ // Falso 
 
2. StringBuffer e StringBuilder 
As classes StringBuffer e StringBuilder devem ser utilizadas quando existe a necessidade de 
grandes modificações na string de caracteres. Ao contrário de Strings, objetos do tipo StringBuffer e 
StringBuilder podem ser modificados inúmeras vezes sem culminar em uma grande quantidade de 
objetos descartados. 
A classe StringBuilder foi adicionada no Java 5 e possui a mesma API da classe StringBuffer. A 
diferença entre as duas classes é que os métodos de StringBuilder não são sincronizados (veremos 
isso em detalhes quando falarmos de multithreading). Isso possibilita uma melhor performance de 
StringBuilder. 
Os métodos append e delete são exclusivos dessas classes: 
 
Veja: 
StringBuilder sb = new StringBuilder("abc"); 
sb.append("def"); 
System.out.println("sb = " + sb); 
 
A saída é: 
sb = abcdef 
StringBuilder sb = new StringBuilder("abc"); 
sb.delete(0,1); 
System.out.println("sb = " + sb); 
 
A saída é: 
sb = bc 
 
3. Coletor de Lixo 
Java fornece uma solução automática para o gerenciamento de memória por meio do coletor de 
lixo (garbage collector). Isso significa que o programador não tem a necessidade de adicionar 
qualquer tipo de lógica de programação a um determinado aplicativo para realizar o gerenciamento 
da memória. Entretanto, não é possível determinar quando o coletor de lixo irá executar ou quando 
ele não irá executar. 
O coletor de lixo fica sob controle da JVM (Java Virtual Machine) e é ela que decide quando o 
coletor de lixo irá rodar. O objetivo do coletor de lixo é garantir que a heap tenha espaço livre 
disponível para que os objetos Java possam ser alocados. Apesar de ser possível solicitar à JVM que o 
coletor de lixo seja executado, não há garantias de que a JVM irá considerar a solicitação do 
programador. 
Note que o coletor de lixo não pode garantir que haverá memória disponível (afinal, ele tenta 
remover objetos da memória quando eles não são mais utilizados) para a execução de um 
determinado programa. Ele apenas garante que a memória disponível será gerenciada da melhor 
maneira possível. Assim, é possível utilizar alguns mecanismos para indicar que os objetos são 
elegíveis à ação do coletor de lixo. 
 
1) Referência nula 
Quando não há mais referências a um objeto, ele se torna elegível para ser removido pelo 
coletor de lixo. Exemplo: 
 
public class Coletor { 
 public static void main(String [] args) { 
 String sb = new String("olá"); 
 System.out.println(sb); 
 // O objeto do tipo String não está elegível para ser removido 
da memória 
 sb = null; 
 // Agora, o objeto do tipo String está elegível 
 } 
} 
 
 
 
2) Referência Não Associada 
Ao associar a variável de referência de um determinado objeto com outro objeto, o primeiro 
objeto torna-se elegível para ser removido da memória. 
 
public class Coletor { 
 public static void main(String [] args) { 
 String s1 = new String("Olá"); 
 String s2 = new String("Adeus"); 
 System.out.println(s1); 
 // A String "Olá" não está elegível para ser removido da memória 
 s1 = s2; 
 // Agora, a String "Olá" está elegível 
 } 
} 
 
As variáveis locais dos métodos também ficam elegíveis após a execução do método. A exceção é 
o objeto que é retornado pelo método. 
 
3) Referência Isolada 
Imagine uma classe na qual uma variável de instância é referência para outra instância da mesma 
classe. Considere a existência de duas instâncias dessa e que elas referenciam uma à outra. Se as 
referências a esses dois objetos forem removidas, não será possível acessá-los, mesmo que cada 
objeto ainda tenha uma referência válida. Quando o coletor de lixo executa, ele é capaz de identificar 
tal situação. 
 
public class Ilha { 
 Ilha i; 
 public static void main(String [] args) { 
 Ilha i2 = new Ilha(); 
 Ilha i3 = new Ilha(); 
 Ilha i4 = new Ilha(); 
 i2.i = i3; // i2 referencia i3 
 i3.i = i4; // i3 referencia i4 
 i4.i = i2; // i4 referenciai2 
 i2 = null; 
 i3 = null; 
 i4 = null; 
 // i2, i3 e i4 possuem referências entre si, mas perderam os links 
para acesso a eles 
 // i2, i3 e i4 estão elegíveis para serem removidos 
 } 
} 
 
Finalmente, para solicitar que o coletor de lixo execute, utilize: 
 
System.gc(); 
 
4. ArrayList 
ArrayList é uma classe da biblioteca Java cujo tamanho é dimensionado automaticamente 
quando elementos são inseridos ou removidos (ao contrário de um array, que possui tamanho pré-
definido). A declaração de um ArrayList deve ser efetuada como a seguir: 
 
ArrayList<String> nomes = new ArrayList<>(); 
O tipo de parâmetro <String> especifica que o ArrayList é capaz de armazenar elementos do tipo 
String. 
 
ArrayList<Pessoa> clientes = new ArrayList<>(); 
O tipo de parâmetro <Pessoa> especifica que o ArrayList é capaz de armazenar elementos do 
tipo Pessoa (presume-se que a classe Pessoa seja declarada previamente). 
 
4.1. Métodos 
Métodos ArrayList 
add(Object elemento) adiciona o elemento à lista 
remove(int indice) remove o objeto que está no índice informado 
remove(Object elemento) remove o objeto 
contains(Object elemento) retorna "true" se o objeto informado existe no ArrayList 
isEmpty() retorna "true" se a lista não contém objetos 
indexOf(Object elemento) retorna o índice do objeto ou -1 
size() retorna o número de elementos que está na lista 
get(int indice) retorna o objeto que está no índice informado 
 
Exemplo: 
ArrayList<String> nomes = new ArrayList<>(); 
nomes.add("Edilson"); 
nomes.add("Andréia"); 
nomes.add("Maria"); 
nomes.add("João"); 
System.out.println(nomes); 
 
5. Utilizando ArrayList 
Veja o exemplo “Poos3_Aula03_TestandoArrayList”. 
 
6. Utilizando vários formulários 
Veja o exemplo “Poos3_Aula03_VariosFormularios”. 
 
7. Utilizando Combobox 
Veja o exemplo “Poos3_Aula03_ComboBox”. 
 
8. Exercícios 
8.1. Escreva um programa que realiza o cadastro de vários alunos. Cada aluno possui nome, 
idade e sexo. O programa deve conter também uma funcionalidade que exibe o total de 
alunos cadastrados. 
 
8.2. Escreva um programa que realize a venda de produtos. Após selecionar um cliente 
cadastrado e os itens (produtos) que ele gostaria de comprar, mostre o valor total da 
compra e liste os itens comprados pelo cliente. O programa deve permitir o cadastro de 
clientes, de produtos e das vendas. Os produtos devem ser listados em um comboBox. 
Desafio: Mantenha os produtos ordenados 
 
8.3. Crie um formulário que permita o agendamento do serviço de lavagem de veículos. Após o 
preenchimento do nome do cliente, a opção de serviço deve ser definida (a lavagem simples 
custa R$ 35,00 e a completa R$ 60,00). Por fim, existe a possibilidade da aplicação de cera, 
cujo custo é de R$ 200,00. Uma vez que as informações tenham sido preenchidas, é possível 
efetuar o agendamento. Ao clicar no botão agendamento, o valor total do serviço deve ser 
calculado e o veículo incluído na fila de veículos que devem ser lavados. O programa 
também deve exibir a quantidade de veículos agendada e o valor total obtido com o serviço. 
8.4. Escreva um programa que, a partir de três nomes, crie uma senha. Esse processo deve se 
basear nas seguintes regras: 
a) Primeira e Última letra do primeiro nome. 
b) Primeira Metade do segundo nome. Para nomes cuja soma dos caracteres seja ímpar, efetue 
o arredondamento para o próximo número par. Exemplo: 1 seria 2; 3 seria 4, etc. 
c) Caracteres ímpares do terceiro nome, transformados em letras maiúsculas. 
A senha deve ser a concatenação dos resultados dos itens a), b) e c). 
 
8.5. Escreva um programa que simule o cadastro e atendimento de pessoas em um consultório 
médico. Devem ser oferecidas duas opções para o atendente: a primeira realiza o cadastro 
de uma pessoa, considerando-se o nome e a idade. A segunda opção possibilita que uma 
pessoa seja chamada para a consulta. Pessoas com mais do que 50 anos possuem 
prioridade, ou seja, devem ser atendidas antes. Entretanto, é preciso manter a ordem de 
chegada. Assim, um paciente que possui 51 anos deve ser atendido antes que um paciente 
de 60 anos, caso ele tenha chegado primeiro. Uma vez que todos os pacientes com 
prioridade sejam chamados, os demais pacientes podem ser chamados, mantendo-se a 
ordem de chegada. 
Dica: Estude os métodos get() e remove() de um ArrayList.

Outros materiais