Java Parte 2 Uso de Classes e Objetos Uso de Classes e Objetos • • • • • • Documentação da Java API A classe Object As classes String e StringBuffer As classes Wrapper Uso de arrays fixos e a Classe Vector A classe Math Biblioteca de classes Java • Programas Java são formados por partes chamadas classes. • Classes são formadas por métodos que realizam tarefas e retornam informações após seu término. • Programadores devem tirar proveito de ricas coleções de classe existentes em bibliotecas de classes Java ou Java APIs. Java API - Application Programming Interface • Interfaces de Programas Aplicativos Java é o conjunto de classes já desenvolvidas e testadas que devem ser usadas pelos programadores. • O “mundo” Java se divide em duas partes – Desenvolvimento de suas próprias classes – Como utilizar as classes presentes nas extensas bibliotecas Java. Documentação Java API Utilização da instrução package • package é um diretório no sistema de arquivos que contém classes que são logicamente relacionadas. • Deve estar na primeira linha do arquivo (sem considerar os comentários e espaços em branco) e deve ser único. • Sintaxe: package nome do package; Alguns packages da Java API • java.lang - Java Language Package • javax.swing - J. Swing GUI Components Package • javax.swing.event - J. Swing Event Package • java.awt- J. Abstract Windowing Toolkit Package • java.awt.event - J. AWT Event Package • java.text - J. Text Package • java.sql - J. Database Connectivity Package UA “Classes, Objetos e Encapsulamento” - Teoria Utilização da instrução import • Para usar classes definidas em outros packages use a instrução import. • Vem antes da declaração da classe e depois da declaração package (se houver). • Sintaxe: import nome do package[.subpackages].nome da classe; OU import nome do package[.subpackages].*; UA “Classes, Objetos e Encapsulamento” - Teoria Funcionamento do import • Sem o import: public class DesenhaPontos2{ public static void main(String args[]) { ... javax.swing.JTextArea areaDeTexto = new javax.swing.JTextArea(200,150); strNum = javax.swing.JOptionPane.showInputDialog("Entre com o número de pontos: "); • Com import da classe: import javax.swing.JOptionPane; //importa apenas a classe indicada public class DesenhaPontos2{ ... javax.swing.JTextArea areaDeTexto = new javax.swing.JTextArea(200,150); strNum = JOptionPane.showInputDialog("Entre com o número de pontos: "); • Com import do pacote: import javax.swing.*; //importa todas as classes do pacote mas NÃO os pacotes dentro do pacote public class DesenhaPontos2{ ... JTextArea areaDeTexto = new JTextArea(200,150); strNum = JOptionPane.showInputDialog("Entre com o número de pontos: "); A classe Object • A classe Object é a classe pai de todas as classes dentro da linguagem. • Nunca se cria uma classe “a partir do zero”. Cada classe Java é uma subclasse de object. Portanto, cada classe herda os 11 métodos definidos pela classe object. Dois desses importantes métodos são o toString( ) e o equals(), que estudaremos mais adiante. Classe String • Uma string é uma seqüência de caracteres. • A classe String representa todas as strings em Java. • São objetos somente leitura, ou seja, não podem ter seu valor modificado após a sua criação. • Como são objetos, valem todas as regras que aprenderemos, entretanto como são muito importantes, algumas simplificações podem acontecer em sua criação. Criando objetos String • Algumas formas de criação. String campo1 = “Tênis”;//forma simplificada //Concatenação de objetos String String campo1 = “Tênis” + “ “ + “nas Olimpíadas”; //Forma comum de criação de objetos usando o operador new. String campo1 = new String(“Tênis”); Exemplo de método da classe String: substring() • O método substring() pode receber um ou dois parâmetros inteiros e retorna um subconjunto do String original: public class TestaString{ public static void main(String args[]){ String url = "http://www.xxxxxx.com.br/curso/javaprogramming1/index.htm"; String dominio, teste; dominio = url.substring(7,24);//objeto - ponto - nome_metodo - (parâmetros) System.out.println("Dominio = " + dominio); teste = url.substring(25); System.out.println("teste = " + teste); } Dominio = www.xxxxxx.com.br teste = curso/javaprogramming1/index.htm Press any key to continue . . . • Este é um exemplo prático de um método sobrecarregado que estudaremos adiante. } Exemplo de método da classe String: toString() • O método toString() da classe String não aceita parâmetros e retorna o próprio string. public class TestaString{ public static void main(String args[]){ String url = "http://www.xxxxxx.com.br/curso/javaprogramming1/index.htm"; String dominio, teste; ... System.out.println("url = " + url.toString()); } } Dominio = www.infnet.com.br teste = curso/javaprogramming1/index.htm url = http://www.xxxxxx.com.br/curso/javaprogramming1/index.htm Press any key to continue . . . Generalização do método toString • Todos os objetos herdam o método toString() de Object que pode ser sobrescrito pelo programador. public class Homem { ... public String toString() { return nome + “ “ + idade; } } • Qualquer referência adicionada a um String invoca o método toString() do objeto. System.out.println("url = " + url.toString()); System.out.println("url = " + url);//Exatamente o mesmo que a linha anterior Exemplo de método da classe String: equals() • O método equals() é herdado de Object e é sobrescrito em String. Nesta classe tem o objetivo de comparar Strings. public class TestaEquals{ public static void main(String args[]){ String url = "http://www.xxxxxx.com.br/curso/javaprogramming1/index.htm"; String dominio, teste; dominio = url.substring(7,24); if (dominio.equals("www.xxxxxx.com.br")) System.out.println("Site de educacao em TI."); else System.out.println("Outro site."); } } Exemplo de método da classe String: valueOf() • Método valueOf() – converte qualquer variável de tipo primitivo em um String. String quarenta = String.valueOf(40); String cincoPontoDois = String.valueOf(5.2); Outros métodos da classe String Métodos mais importantes concat(), replace(), substring() toLowerCase(), toUpperCase(), indexOf() length(), charAt() equals(), equalsIgnoreCase() Classe StringBuffer • Representa uma seqüência mutável de caracteres Unicode. Por ser mutável, é a candidata natural quando uma série de concatenações se faz necessária. • Não tem relação alguma com a classe String. //Método para ler um string do final para o início public String reverter(String s) { StringBuffer sb = new StringBuffer(); for (int i = s.length() – 1; i >= 0; i--) sb.append(s.charAt(i)); return sb.toString(); } Classes Wrapper • Permite a utilização de tipos primitivos como objetos. boolean byte char short int long float double Boolean Byte Character Short Integer Long Float Double Operações com arrays Você aprenderá • • • • • Declaração. Criação. Inicialização. Matrizes. Classe Vector e outras Classes. Características dos arrays em Java • Tamanho fixo • É referenciado com o mesmo identificador • Todos os elementos possuem o mesmo tipo de dado • Cada elemento possui um índice • Cada posição (índice) só pode guardar um único dado • Todo objeto armazenado em um array deve ser inicializado antes de ser utilizado. Declaração de arrays tipo [] nome_do_array; tipo nome_do_array []; String [] args; float notas[]; double [] salario; ATENÇÃO: //Só documento é um vetor String nome, documento[], endereco; // time e titulo são vetores de Strings String[] time, titulo; Criação de arrays • Uma vez declarados faz-se a criação do array em memória com o operador new seguido do tipo e do tamanho que não poderá ser alterado. //arrays tem o primeiro índice igual a zero. Na instrução //abaixo teremos os elementos notas[0]...notas[3] notas = new float[4]; salario = new double[1000]; int numeroTimes = 64; time = new String[numeroTimes]; int qualquer = umMetodo();//método umMetodo() retorna um int titulo = new String[qualquer]; float f[] = new float[4]; //declaração e criação feitas na mesma linha Inicialização de arrays • Para arrays de tipos primitivos essa fase não é obrigatória. • Para arrays de objetos é necessária a inicialização antes da utilização dos objetos. Enquanto não forem inicializados seus valores serão null. Na verdade arrays de objetos são arrays de referências • Duas maneiras de se inicializar: – Inicialização dos elementos individualmente; – Usar inicializadores de array. demonstração Inicialização de arrays: exemplo public class TestaArray{ public static void main(String args[]){ int numeros[] = new int[4]; System.out.println("numeros[2] = " + numeros[2]); float[] notas = {10, 8.5f, 4, 7}; System.out.println("\nnotas[2] = " + notas[2]); String cores[] = new String[10]; System.out.println("\ncores[3] = " + cores[3]); cores[0] = new String("Amarelo"); cores[1] = "Verde"; for (int i = 2 ; i < cores.length; i++){ cores[i] = new String(); } for (int i = 0 ; i < cores.length; i++){ System.out.println("cores[" + i + "] = " + cores[i]); } } } numeros[2] = 0 notas[2] = 4.0 cores[3] = null cores[0] = Amarelo cores[1] = Verde cores[2] = cores[3] = cores[4] = cores[5] = cores[6] = cores[7] = cores[8] = cores[9] = Press any key to continue . . . demonstração Arrays Multidimensionais • Java implementa arrays multidimensionais permitindo a alocação de arrays em cada elemento do array. String cores[][][] = new String[10][2][3];//mesmo número de colunas em todas as dimensões. • É possível ter um número de colunas diferentes para cada linha e defini-las dinâmicamente ou na inicialização. /*Número de colunas é diferente para cada linha C0 C1 C2 C3 L0 - 44 | 32 | 21 | 12 | L1 - 15 | 28 | 7 | */ int a[][] = new int[2][]; a[0] = new int[4];//4 cols na lin 0 a[1] = new int[3];//3 cols na lin 1 a[0][1] = 44; a[0][2] = 32; //... a[1][1] = 28; a[1][2] = 7; demonstração Matriz • Matriz é um array bidimensional com o mesmo número de colunas para cada linha. public class TestaMatriz{ public static void main(String args[]){ String cores[][] = new String[10][2]; cores[0][0] = "Vermelho"; cores[0][1] = "#ff0000"; cores[1][0] = "Verde"; cores[1][1] = "#00ff00"; for (int i = 0 ; i < 10; i++){ for (int j = 0 ; j < 2 ; j++){ System.out.println("cores[" + i + "]" + "[" + j + "] = " + cores[i][j]); } } } } cores[0][0] = Vermelho cores[0][1] = #ff0000 cores[1][0] = Verde cores[1][1] = #00ff00 cores[2][0] = null cores[2][1] = null cores[3][0] = null cores[3][1] = null cores[4][0] = null cores[4][1] = null ... A classe Vector() • Implementa um array redimensionável de qualquer tipo de objeto. • Não aceita tipos primitivos como elementos, apenas instâncias de objetos. • Para guardar tipos primitivos devemos usar as classes wrapper. • Declarado no pacote java.util demonstração A classe Vector(): exemplo import java.util.Vector; public class TestaVector{ public static void main(String args[]){ Vector nomes = new Vector(); //adiciona elementos no final do vetor nomes.addElement("Sergio"); nomes.addElement("Zair"); nomes.addElement("Leonardo"); nomes.addElement("Eduardo"); System.out.println("\nElemento 'Zair' esta na posicao " + nomes.indexOf("Zair")); System.out.println("\nO elemento na posicao 3 eh " + nomes.elementAt(3)); System.out.println("\nInserindo 'Roberto' na posicao 2..."); nomes.insertElementAt("Roberto",2); System.out.println("\nConteudo do vetor:"); for (int i = 0 ; i < nomes.size() ; i++){ System.out.println("[" + i + "] " + nomes.elementAt(i)); } System.out.println("'Eduardo' foi para posicao 4 de ” + nomes.size()); } } Elemento 'Zair' esta na posicao 1 O elemento na posicao 3 eh Eduardo Inserindo 'Roberto' na posicao 2... Conteudo final do vetor: [0] Sergio [1] Zair [2] Roberto [3] Leonardo [4] Eduardo 'Eduardo' foi para posicao 4 de 5 Press any key to continue . . . A classe Math • Definida no pacote java.lang. • Nenhum objeto dessa classe pode ser criado pois seu construtor é privado (private*) • Seus métodos estáticos (static*) e por isso acessamos com o nome da classe. • Não pode ser estendida (classe final*) por herança. • Possui duas constantes para cálculos. * - Este termo será estudado adiante Alguns métodos da classe Math • ceil(), floor(), round(). • abs(), min(), max(). • sin(), cos(), tan(), asin(), acos(), atan(), toDegrees(), toRadians(). • log(), exp(). • sqrt(), pow(), random(). • Constantes PI, E demonstração A classe Math: exemplo import java.text.DecimalFormat; Sorteio entre 50 e 80: 64 Entre 65 e 64 o maior valor eh 65 Area de um circulo de raio 5 eh 78.53981633974483 Area de um circulo de raio 5 eh 78,54 Press any key to continue . . . public class TestaMath{ public static void main(String args[]){ //Sorteando um numero entre 50 e 80 double valSorteado = Math.random(); int resultado = 50 + (int) (valSorteado*30); System.out.println("Sorteio entre 50 e 80: " + resultado ); //Maior entre dois números int maior; maior = Math.max(resultado,65); System.out.println("Entre 65 e " + resultado + " o maior valor eh " + maior); //Área de um círculo de raio 5 double area = Math.PI * Math.pow(5,2); System.out.println("Area de um circulo de raio 5 eh " + area); //Passando para duas casas decimais DecimalFormat doisDigitos = new DecimalFormat("0.00"); System.out.println("Area de um circulo de raio 5 eh " + doisDigitos.format(area)); } } instanceof para interfaces • Podemos usar o operador instanceof para saber se uma classe implementa uma determinada interface. public boolean yyz (Object obj) { if (obj instanceof Aereo) { (if not ((Aereo)obj).checkDecolagem()) return false; } }