Vous êtes sur la page 1sur 55

Pacotes java.lang, java.util, java.

text
Destacando Object, String, StringBuffer, Math, Classes Wrappers, Formatao de nmeros, moedas e datas

Joo Carlos Pinheiro


jcpinheiro@cefet-ma.br Verso: 2.1 ltima Atualizao Maio / 2005

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:

java.lang.Object java.lang.Number java.lang.String java.security

java.text java.math java.sql java.rmi java.net

java.awt java.io java.util java.util.zip

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

O pacote java.lang ...


Entre as classes desse pacote, podemos citar algumas das mais utilizadas:
Object - a superclasse da hierarquia de todas as classes do Java Classes para encapsular e processar string de caracters (String e StringBuffer) As classes que encapsulam os tipos de dados primitivos wrappers (Character, Integer, Float, etc.)

6 6

O pacote java.lang ...


Math - prov mtodos matemticos As classes para acesso aos recursos do sistema (Runtime e System) Thread, usada para criar linhas de execuo (segmentos) Throwable, a superclasse de todas as classes de erro e excees em Java

7 7

A Classe raiz da hierarquia - Object


Todos os objetos em Java herdam de maneira implicita a classe Object Principais mtodos que devem ser sobrepostos
equals() - Defina os critrios de igualdade para seu objeto hashCode() - retorna um cdigo hash para um objeto. Para que um objeto possa ser localizado em um HashMap toString() - prov uma representao em string de um objeto (quando um objeto impresso este mtodo chamado implicitamente)
8 8

A Classe raiz da hierarquia - Object


Outros mtodos importantes
getClass()- retorna a estrutura de uma classe associada a um determinado objeto wait(), notify() e notifyAll() - suportam sincronizao de thread para um objeto

9 9

Classes empacotadoras (Wrappers)


Cada tipo primitivo possui uma classe correspondente que encapsula um tipo primitivos para que eles possam ser usados em um contexto de Orientao a Objetos
Classe Integer Byte Float Character Void Long Short Double Boolean Tipo primitivo int byte float char void long short double boolean

10 10

Classes Empacotadoras

Character Byte

Boolean Short

Number Integer Long Float Double

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

Mtodo de instancia xxxValue()


Retorna o tipo primitivo representado pelo objeto em questo
int i = objN1.intValue(); // i = 42 byte b= objN1.byteValue();//converte objN1 em byte
12 12

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

s = java; // Representao literal


A classe String final, o que significa que no pode ser herdada e os seus mtodos no podem ser redefinidos
15 15

Classe String ...


Observaes importantes
Strings so inalterveis, mas as variveis de referncia a string no otimizada para leitura, mas no para modificao Nenhum mtodo de String modifica o objeto armazenado
Se voc cria uma nova String sem atribu-la a uma referncia ela fica perdida para o seus programa

16 16

Classe String ...

1. 2. 3. 4. 5.

s = abc; s2 = s s2.concat(xyz); s2 = s2.concat(def); ... s

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

Principais mtodos da classe String


A linguagem Java prov suporte especial para a concatenao de strings e para a converso de outros objetos em Strings Exemplos: usando o operador +:
String s = def; System.out.println (abc+ s);

Usando o mtodo concat( )


String c = abc.concat(def); // Sada: abcdef

20 20

Principais mtodos da classe String


public int length() Determina o comprimento da String
String s = 0123456; System.out.println(s.length()); //Sada: 7

public char charAt(int index) Obtm o caractere em uma localizao especifica


String s = curso; System.out.println(s.charAt(2));//Sada ser r

public String replace(char old, char new) Substitui Caracteres

String s = paraleleppedo System.out.println(s.replace(p, P);// ParalelePPed 21 21

Principais mtodos da classe String


Mtodos para comparao de Strings

public boolean equals(Object obj)


redefine (substitui) o mtodo equals de Object

public boolean equalsIgnoreCase(String outraString)


compara as Strings sem diferenciar caracteres maisculas de minsculas
String s = Java; System.out.println(s.equalsIgnoreCase(JAVA); // true System.out.println(s.equalsIgnoreCase(AVAJ); // false

22 22

Principais mtodos da classe String


Localizando caracteres e substrings em String public int indexOf(int ch)
retorna 1 caso no encontrar String letras="abcdefghijklmabcdefghijklm"; letras.indexOf('d'); // Sada: 3 letras.indexOf( 'a', 1 ); // Sada: 13 letras.indexOf( "def" ); // Sada: 3 letras.indexOf( "def", 7);// Sada: 16

public int lastIndexOf(int ch)


letras.lastIndexOf(d); // Sada: 16

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

A classe StringBuffer fornece trs construtores


StringBuffer( ); StringBuffer(String); StringBuffer(int);

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

Principais mtodos de StringBuffer


StringBuffer append(String s)

atualiza o valor do objeto que o chamou adicionando o texto no final


StringBuffer sb = new StringBuffer("set "); sb.append("point"); System.out.println(sb); //Sada: set point

StringBuffer insert(int posio, String s)

insere na posio especificada


StringBuffer sb = new StringBuffer("2224567"); sb.insert(3, "-"); System.out.println(sb); // Sada: 222-4567 27 27

Principais mtodos de StringBuffer


StringBuffer reverse( ) inverte a String String toString() transforma o buffer em String para que possa ser lido

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

As classes String e warapper so finais, e tem mtodos equals() substitudos

30 30

O contrato do mtodo equals()


Reflexividade obj.equals(obj) Simetria obj1.equals(obj2) obj2.equals(obj1)

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

Exemplo de substituio do mtodo equals()


class Ponto { private int x, y; public boolean equals(Object obj) { if (obj instanceof Ponto ) { Ponto ponto = (Ponto) obj; if (ponto.x == this.x && ponto.y == this.y) { return true; } } return false; } }

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

Todos os mtodos da classe Math so static, Vamos descrever alguns deles


abs() min() ceil() random() floor() max() round() sqrt()

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()

Retorna o menor valor dos valores fornecidos


Math.min(145, 159); //Sada: 145 Math.min(145.1, 139.04); //Sada: 139.04 Math.min(-145.4, -159.1);//Sada: -159.1

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.abs(145.0); //Sada:145.0 Math.abs(-145.0);//Sada:145.0


38 38

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

Math.ceil(-8.02); //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

Math.round( ) Retorna o mais prximo inteiro do valor fornecido


Math.round(145.0); // Sada: 145 Math.round(145.5); // Sada: 146 Math.round(-145.5);// Sada: -145 Math.round(145.9); // Sada: 146 Math.round(-145.8);// Sada: -146

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

Formatao e parsing de nmeros


O mtodo getNumberInstance() de NumberFormat instancia um formatador de nmeros para um determinado local
private static void test( Locale loc, double val){ NumberFormat nf = NumberFormat.getNumberInstance(loc); nf.setMaximumFractionDigits(2); System.out.println("format: "+nf.format(val)); } test( Locale.getDefault(), 1234.5678); test( Locale.US, 1234.5678); format: 1.234,57 format: 1,234.57

46 46

Unidades monetrias e percentagens


Os mtodos getCurrencyInstance() e getPercentInstance() de NumberFormat instanciam formatadores de unidades monetrias e percentagens para um determinado local
NumberFormat cf = NumberFormat.getCurrencyInstance(); cf.setMinimumFractionDigits(2); NumberFormat pf = NumberFormat.getPercentInstance(); System.out.println(cf.format(32)+" - ("+ pf.format(0.15)+")"); try { Number val = cf.parse("R$ 1,50"); System.out.println("parse: "+ val); R$ 32,00 - (15%) parse: 1.5 } catch( ParseException e ) { System.out.println(e.getMessage()); } 47 47

Formatao personalizada de nmeros


A classe DecimalFormat, derivada de NumberFormat, formata nmeros dado um padro e um conjunto de smbolos
DecimalFormat df = new DecimalFormat("0.#E0"); System.out.println( df.format(12345.678) ); System.out.println( df.format(100000) ); 1,2E4 1E5

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));

Quarta-feira, 6 de Abril de 2005 -- 23:02 06/04/2005 23:02:19 51 51

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); }

O dia 17/04/2005 cai num(a) Segunda-feira um dia til

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