Beruflich Dokumente
Kultur Dokumente
text
Destacando Object, String, StringBuffer, Math, Classes Wrappers, Formatao de nmeros, moedas e datas
Objetivos
Apresentar as principais classes do pacote
java.lang Principais mtodos da classe Object Principais mtodos da classe Math Uso das classes Wrapper Revelar o funcionamento das classes String e StringBuffer Apresentar a importncia dos mtodos equals() e hashCode() Comparao de Objetos
2 2
Motivao
O correto entendimento das principais classes do pacote java.lang fundamental para um entendimento mais fidedigno de outros recursos fornecidos pela linguagem As classes nesse pacote so to fundamentais que so implicitamente importadas pelas classes que criamos
3 3
A Hierarquia de Classes
A hierarquia de classes dos pacotes em Java muito mais larga do que profunda, isso leva a uma grande independncia entre elas A tabela abaixo mostra apenas a hierarquia das classes bsicas do Java:
4 4
O pacote java.lang
Contm as principais classes da linguagem Java
Compondo o arcabouo sobre o qual toda a linguagem construda
As classes nesse pacote so to fundamentais que so implicitamente importadas pelas classes que criamos
5 5
6 6
7 7
9 9
10 10
Classes Empacotadoras
Character Byte
Boolean Short
Construtores Todas as classes exceto Character fornecem dois construtores: um que usa o tipo primitivo que estar sendo criado, e outro que usa uma representao em String
Integer objN1 = new Integer(42); Integer objN2 = new Integer(42); Float objF1 = new Float(3.14f); Float objF1 = new Float(3.14f); 11 11
Classes Empacotadoras
Mtodos esttico valueOf()
Fornecem uma outra abordagem para criao de objetos wrapper ( mais eficiente) Integer objN1 = Integer.valueOf(42); // mais eficiente
Classes Empacotadoras
Mtodo esttico parseXxx()
Converso de String em tipos primitivos
Exemplos:
int i = Integer.parseInt(42); float f = Float.parseFloat(15.9);
13 13
Classes Empacotadoras
Principais mtodos
xxxValue No usa argumentos, retorna um tipo primitivo parseXxx - Usa uma String, retorna um tipo primitivo, esttico e lana uma exceo NumberFormatException valueOf - Usa uma String, retorna um objeto encapsulado, esttico e lana uma exceo NumberFormatException
14 14
String
uma cadeia caractere Unicode de 16 bits imutvel Um objeto String criado exatamente como acontece com outros objetos String s = new String(); String s = new String(java); Outra maneira mais prtica quando for encontrado um valor entre aspas
16 16
1. 2. 3. 4. 5.
1 abc 2 s2 4
3 abcxyz
abcdef
17 17
Strings e a memria
Para tornar a linguagem java mais eficiente as Strings criados so automaticamente armazenadas em uma rea reservada chamada de pool de string constantes
Mesmo objeto reutilizado: se uma coincidncia for encontrada, a referncia a nova string ser direcionada para a String existente e nenhum objeto ser criado
18 18
Strings e a memria
String s1 = "java"; String s2 = "java"; System.out.println((s1 == s2)); System.out.println(s1.equals(s2)); System.out.println(s1.hashCode()==s2.hashCode()); Resultado: true true true
19 19
20 20
22 22
23 23
StringBuffer
So strings modificveis
Deve ser utilizada quando se deseja fazer muitas alteraes, ou seja, podem ser manipuladas sem deixar um rastro de objetos, como acontece com Strings
Dica: StringBuffer a maneira ideal de manipular um bloco de dados, pass-lo adiante e, em seguida, reutilizar o mesmo espao na memria para manipular o prximo bloco de dados
24 24
StringBuffer
25 25
StringBuffer
Todos os mtodos de StringBuffer operam sobre o valor do objeto que estiver chamando o mtodo em questo Exemplo:
String s = abc; s.concat(def); String s = abc; StringBuffer sb = new s = s.concat(def); StringBuffer(abc); sb.append(def);
Sada: x = abc
Sada: x = abcdef
Sada: x = abcdef
26 26
Mtodos encadeados
StringBuffer sb = new StringBuffer("abc"); sb.append("def").reverse().insert(3, "-"); System.out.println(sb); // Sada: fed-cba
28 28
Comparando variveis
O operador == retorna uma valor boolean
verdadeiro se as variveis forem equivalentes
Operador == quando aplicado a objetos verifica se eles referenciam o mesmo objeto (ou seja, comparado o padro de bits da referncia)
29 29
Comparando Objetos
equals() s utilizado para comparar objetos equals() retorna um boolean
30 30
Transitividade obj1.equals(obj2) e obj2.equals(obj3) obj1.equals(obj3) Consistncia Caso o objeto no seja alterado, o resultado da comparao tambm no deve mudar Desigualdade ao nulo Qualquer objeto no nulo quando comparado com nulo deve retornar falso
31 31
32 32
java.util.StringTokenizer
Esta classe, quando instanciada com uma String, quebra a string em tokens separados por qualquer dos caracteres especificados como delimitadores Os delimitadores podem ser especificados no momento da criao da classe ou token a token Os mtodos hasMoreTokens() e nextToken() podem ser usados para obter os tokens em ordem
33 33
StringTokenizer
A classe StringTokenizer muito til quando queremos quebrar a String em diversas substrings Exemplo: StringTokenizer s = new StringTokenizer(aaa:bbb:ccc:ddd, :);
while (s.hasMoreTokens()) { System.out.println(s.nextToken()); } A String ser quebrada em quatro Strings aaa, bbb, ccc e ddd 34 34
A classe java.lang.Math
Em Java a classe Math uma classe final Possui duas constantes
public final static double PI public final static double E
35 35
Math.max()
Retorna o maior valor dos valores fornecidos
Math.max(145, 159); //Sada: 159 Math.max(145.1, 139.04); //Sada: 145.1 Math.max(-145.4, -159.1);//Sada: -145.4
36 36
Math.min()
37 37
Mtodo Math.abs( )
Retorna o valor absoluto Se fornecido um valor negativo ele remove o sinal. Podendo ser int, long, float ou double Exemplos: Math.abs(145); Math.abs(-145); //Sada:145 //Sada:145
Math.ceil( )
Retorna o prximo maior valor numrico completo disponvel O valor de retorno sempre double
Math.ceil(9.0); Math.ceil(8.8); Math.ceil(8.02); Math.ceil(-9.0); Math.ceil(-8.8); //Sada: 9.0 //Sada: 9.0 //Sada: 9.0 //Sada: -9.0 //Sada: -8.0
39 39
Math.floor()
Esse mtodo retorna sempre double , que no maior que o valor fornecido
Math.floor(9.0); Math.floor(8.8); // Sada: 9.0 // Sada: 8.0
Math.floor(8.02); // Sada: 8.0 Math.floor(-9.0); // Sada: -9.0 Math.floor(-8.8); // Sada: -9.0 Math.floor(-8.1); // Sada: -9.0
40 40
41 41
Math.random()
Retorna sempre um nmero double aleatrio entre [ 0.0, 1.0 [
Math.round(Math.random() * 50); Math.round(Math.random() * 50); Math.round(Math.random() * 50);
Sada 42 18 32 Outra Sada 23 2 17
42 42
Math.sqrt()
Retorna a raiz quadrada do valor fornecido
Math.sqrt(9.0) // retorna 3.0
Retorna NaN (Not a Number um padro de bits) quando seu argumento for menor que zero
43 43
Internacionalizao
Manipulao de Nmeros, Datas, Hora Pacote: java.text
44
Localizao
Cada objecto da classe Locale identifica normalmente uma lngua e um pas (o local). O mtodo getDefault() retorna o local da plataforma de execuo ou o parmetro passado em setDefault().
private static void printLocale(Locale loc) { System.out.println( Pais ="+loc.getCountry()+ "- "+ loc.getDisplayCountry() +"\nLingua = "+loc.getLanguage()+"-" + loc.getDisplayLanguage() +"\n---------"); Pais = BR - Brasil } Lingua = pt - portugus ... --------printLocale( Locale.getDefault() ); Pais = GB - United Kingdom Lingua = en - English printLocale( Locale.UK ); --------printLocale( new Locale( "en", "US" ) ); Pais = US - United States ...
Lingua = en - English ---------
45 45
46 46
48 48
Datas
Apesar das datas serem representadas de diversas formas o java fornece apenas uma maneira de represent-la (java.util.Date)
Date dataAtual = new Date(System.currentTimeMillis()); //Date dataAtual = new Date(); // gera o mesmo resultado System.out.println(Sada: " + dataAtual); Sada: Wed Apr 06 22:25:10 GMT-03:00 2005
Na primeira verso do Java s existia esta classe que acumulava trs responsabilidades: representar um momento no tempo, interpretar este momento em dias, meses e anos e formatar
49 49
Formatao de Datas
A classe java.text.DateFormat que herda da classe classe abstrata Format trabalha especificamente com a formatao de datas
Permite formatar uma data segundo vrios padres diferentes, identificados por constantes e um Locale especfico
Formato Data
SHORT MEDIUM LONG FULL
06/04/05 06/04/2005 6 de Abril de 2005 Quarta-feira, 6 de Abril de 2005
Hora
17:14 17:14:18 17:14:18 GMT 17H14m GMT
50 50
Formatao de Datas
Para se obter uma instncia de DateFormat, deve-se utilizar um dos mtodos de fbrica estticos: getDateInstance(), getTimeInstance() e getDateTimeInstance() O seu construtor protected
Date date = new Date(); DateFormat df = DateFormat.getDateInstance( DateFormat.FULL ); DateFormat tf = DateFormat.getTimeInstance( DateFormat.SHORT); System.out.println( df.format(date)+" -- "+ tf.format(date)); DateFormat dtf = DateFormat.getDateTimeInstance(); System.out.println(dtf.format(date));
Formatao de Datas
SimpleDateFormat df = new SimpleDateFormat(); String entrada = "1/8/2004"; try { df.applyPattern ("d/M/y"); Date data = df.parse(entrada); df.applyPattern ("'Brasil', EEEE, 'dia' dd 'de' MMMM 'de' yyyy."); System.out.println (df.format(data )); } catch (ParseException e) { e.printStackTrace(); } Brasil, Domingo, dia 01 de Agosto de 2004. 52 52
Interpretao de Datas
A classe java.util.Calendar ajuda a lidar com datas em regras de negcio de uma aplicao
Exemplos: Verificar se a data pertence a um dia til
53 53
Interpretao de Datas
DateFormat dataEntrada = DateFormat.getDateInstance(); DateFormat dataSaida = new SimpleDateFormat("EEEE"); Calendar cal = Calendar.getInstance(); try { Date data = dataEntrada.parse(17/04/2005); cal.setTime(data); int diaSemana = cal.get(Calendar.DAY_OF_WEEK); System.out.println("O dia 25/04/2005 " cai num(a) " + dataSaida.format(data)); if (diaSemana >= Calendar.MONDAY && diaSemana <= Calendar.FRIDAY) System.out.println( um dia til"); else System.out.println( no final de semana); } catch (ParseException e) { System.err.println("Data invlida"); System.exit(2); }
54 54
Bibliografia
Captulo 3 do livro Core Java 2 vol 1 (autores: Cay S. Horstmann e Gary Cornell) Java 2 Certificao SUN para programadores & Desenvolvedores Tutorial Oficial da SUN: Essential Java Classes Curso J100: Java 2 Standard Edition Helder da Rocha (helder@acm.org) argonavis.com.br Revista: Java Magazine. Edio 22.
55 55