Java – Conceitos Bá Básicos Conceitos básicos Características da Linguagem n Java é uma Linguagem OO, contendo uma coleção de APIs para o desenvolvimento de aplicações multiplataforma Java foi lançada pela Sun em 1995. Três grandes revisões: Java Development Kit (JDK) 1.0/1.0.2 Java Development Kit (JDK) 1.1/1.1.8 Java 2 Platform ( Java 2 SDK e JRE 1.2, 1.3, 1.4, 5.0) n Java segundo a Sun MicrosystemsSimples object-oriented distribuída interpretada robusta segura architecture-neutral portável alta performance multithreaded dinâmica Características da Linguagem n Simplicidade: ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ Poucos comandos, Ausência de goto (apesar de suportar break para label), Mecanismos de tratamento de exceção, Não permite sobrecarga de operadores, Não suporta herança múltipla, Não suporta templates, Não utiliza ponteiros, Não trabalha com unions ou estruturas; somente classes. Vetores e strings são objetos. Java só trabalha com referências ! 1 Características da Linguagem n Orientada a Objeto Suporte completo a OOP. Define uma extensa biblioteca de classes, disponibilizadas em pacotes (packages). java.lang => classes para definição básica da linguagem (core language) java.applet => classes para implementação de Applets java.awt => classes para gráficos, texto, janelas, GUI java.awt.image => classes para processamento de imagens java.awt.event => classes para tratamento de eventos na interface GUI java.awt.swing => classes para interface GUI extensão do AWT java.awt.peer => classes para interface GUI independente de plataforma java.io => classes para input / output java.net => classes para network computing java.util => classes para tipos de dados úteis (arrays, listas, etc) Diferentemente de C++, a maioria dos tipos em Java são objetos, com exceção dos tipos: numéricos, caracter e boolean. Características da Linguagem n Distribuída ¡ ¡ ¡ Java suporta aplicações Cliente/Servidor por ser uma linguagem distribuída. Suporta vários níveis de conectividade através de classes presentes no java.net package. Suporta conexão através de sockets (socket class). Características da Linguagem n Robusta ¡ ¡ ¡ Java é uma linguagem fortemente tipada (mais que C++). Requer declaração explícita de métodos (idem ANSI-C). Não suporta ponteiros, eliminando assim a possibilidade de invasões de área e manipulação errônea com aritmética de ponteiros 2 Características da Linguagem n Interpretada ¡ ¡ ¡ ¡ O compilador Java gera Bytecodes ao invés de código nativo de cada máquina. Para executar um programa Java é preciso interpretar os Bytecodes, o que é feito pelo interpretador Java. Através dos Bytecodes, Java provê um formato de arquivo objeto neutro (independente de plataforma), o que permite a sua migração entre plataformas de maneira eficiente e segura. Um programa em Java pode rodar em qualquer plataforma que tenha o interpretador Java instalado e as bibliotecas de run-time. Características da Linguagem Características da Linguagem n A Plataforma Java ¡ ¡ ¡ Uma platforma é o hardware ou o software onde um programa roda. Já foi apresentado que as plataformas mais comuns são Windows XP, Linux, Solaris, e MacOS. A maioria das platformas pode ser descrita como uma combinação de sistema operacional e hardware. A platafroma Java platform differe das outras platafromas por ser uma platafroma software-only que roda sobre outras plataformas baseadas em hardware. 3 Características da Linguagem n A Plataforma Java ¡ A platafroma Java possui os componentes: n n Java Virtual Machine (Java VM) Java Application Programming Interface (Java API) Plataforma Java Variável n n É um um dado com um identificador Declaração: type name n O programa MaxVariablesDemo apresenta todos os tipos pre-definidos em Java e os seu valores máximo. 4 Tipos Primitivos de Dados Palavra Chave Descrição Tamanho/Valor Inteiros byte 1 byte 8 bits complemento de 2 short Inteiro curto 16 bits complemento de 2 int Inteiro 32 bits complemento de 2 long Inteiro longo 64 bits complemento de 2 Ponto Flutuante float Ponto flutuante precisão simples 32-bit IEEE 754 double Ponto flutuante precisão dupla 64-bit IEEE 754 Outros tipos char Um único caracter 16-bit Unicode character boolean Tipo buleano true ou false Nomes de variáveis n n n Um identificador deve ser uma série de caracteres Unicode que comecem com uma letra. Não pode ser uma palavra-chave da linguagem nem true, false ou null. Tem que ser única em seu escopo. Tipos Primitivos x Classes n n As variáveis dos tipos primitivos armazenam o valor que representam; As classes e arrays são referências para os valores que representam. 5 Classes dos Números NumberDemo.java public class NumberDemo { public static void main(String args[]) { Float floatOne = new Float(14.78f - 13.78f); Float floatTwo = Float.valueOf("1.0"); Double doubleOne = new Double(1.0); int difference = floatOne.compareTo(floatTwo); if (difference == 0) { System.out.println("floatOne is equal to floatTwo."); } else if (difference < 0) { System.out.println("floatOne is less than floatTwo."); } else if (difference > 0) { System.out.println("floatOne is greater than floatTwo."); } System.out.println("floatOne is " + ((floatOne.equals(doubleOne)) ? "equal" : "not equal") + " to doubleOne."); } } Escopo de uma Variável n n n O escopo de uma variável é a região do programa onde pode ser acessada através somente de seu identificador. Escopo é diferente de visibilidade, visibilidade é estabelecida para atributos de uma classe através de modificadores. A localização onde são declaradas as variáveis define o seu escopo. 6 Escopo de uma variável MaxVariablesDemo /** * MaxVariablesDemo.java is an application that * compiles and runs under J2SE 5.0. * It requires no other files. */ public class MaxVariablesDemo { public static void main(String args[]) { // integers byte largestByte = short largestShort int largestInteger long largestLong = Byte.MAX_VALUE; = Short.MAX_VALUE; = Integer.MAX_VALUE; Long.MAX_VALUE; // real numbers float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; // other primitive types char aChar = 'S'; boolean aBoolean = true; // display them all System.out.println( "The largest byte value is " + largestByte); System.out.println( "The largest short value is " + largestShort); System.out.println( "The largest integer value is " + largestInteger); System.out.println( "The largest long value is " + largestLong); System.out.println( "The largest float value is " + largestFloat); System.out.println( "The largest double value is " + largestDouble); if (Character.isUpperCase(aChar)) { System.out.println("The character " + aChar + " is upper case."); } else { System.out.println("The character " + aChar + " is lower case."); } System.out.println("The value of aBoolean is “ + aBoolean); } } MaxVariablesDemo n A saída deste programa exemplo é: The largest byte value is 127 The The The The The The The largest short value is 32767 largest integer value is 2147483647 largest long value is 9223372036854775807 largest float value is 3.40282e+38 largest double value is 1.79769e+308 character S is upper case. value of aBoolean is true 7 Variáveis Finais São semelhantes a constantes. São declaradas como: n n final int aFinalVar = 0; Uma variável final que seja declarada e não inicializada é dita uma blank final e uma vez inicializada seu valor não pode mais ser alterado: n final int blankfinal; . . . blankfinal = 0; Operadores Aritméticos Operador Uso Descrição + op1 + op2 Soma op1 e op2; também usedo para concatenar strings - op1 - op2 Subtrai op2 de op1 * op1 * op2 Multiplica op1 por op2 / op1 / op2 Divide op1 por op2 op1 % op2 Calcula o resto da divisão de op1 por op2 % Operadores Aritméticos Operador Uso Descrição ++ op++ Incrementa op de 1; calcula a expressão que contem op antes de incrementa-lo. ++ ++op Incrementa op de 1; calcula a expressão que contem op depois de incrementa-lo. -- op-- Decrementa op de 1; calcula a expressão que contem op antes de decrementa-lo. -- --op Decrementa op de 1; calcula a expressão que contem op depois de decrementa-lo. 8 Operadores Aritméticos Unários Operador Uso Descrição + +op Promove op para int se for um byte, short, ou char - -op Aritmeticamente nega op Operadores Lógicos Operador > Uso Descrição op1 > op2 Retorna true se op1 é maior que op2 >= op1 >= op2 Retorna true se op1 é maior ou igual a op2 < op1 < op2 Retorna true se op1 é menor que op2 <= op1 <= op2 Retorna true se op1 é menor ou igual a op2 == op1 == op2 Retorna true se op1 é igual a op2 != op1 != op2 Retorna true se op1 não é igual a op2 Operadores Lógicos Operador Uso Descrição op1 && op2 Retorna true se op1 e op2 são ambos true; só irá executar op2 se op1 for true || op1 || op2 Retorna true se op1 ou op2 for true; só irá executar op2 se op1 for false ! !op Retorna true se op1 for false & op1 & op2 Retorna true se op1 e op2 são ambos boleanos e true; geralmente verifica op1 e op2; Se os operandos forem números,faz a operação AND bit a bit (bitwise) | op1 | op2 Retorna true se op1 e op2 são ambos boleanos e pelo menos um for true; geralmente verifica op1 e op2; Se os operandos forem números,faz a operação OU bit a bit (bitwise) ^ op1 ^ op2 Retorna true se op1 e op2 são differentes — isto é, se um ou o outro operando for true (XOR). Se os operandos forem números, faz a operação XOR bit a bit (bitwise) ~ ~op1 Complemento bit a bit de op1 && 9 Operadores de Deslocamento Operador Uso Descrição << op1 << op2 Desloca os bits de op1 para a esquerda op2 posições; preenche com zero os bits restantes a direita. >> op1 >> op2 Desloca os bits de op1 para a direita op2 posições; preenche com o bit de sinal os bits restantes do lado esquerdo. op1 >>> op2 Desloca os bits de op1 para a direita op2 posições; preenche com zero bits o lado esquerdo. >>> Operadores de Atribuição Operador Uso Equivalente a += op1 += op2 op1 = op1 + op2 -= op1 -= op2 op1 = op1 - op2 *= op1 *= op2 op1 = op1 * op2 /= op1 /= op2 op1 = op1 / op2 %= op1 %= op2 op1 = op1 % op2 &= op1 &= op2 op1 = op1 & op2 |= op1 |= op2 op1 = op1 | op2 ^= op1 ^= op2 op1 = op1 ^ op2 <<= op1 <<= op2 op1 = op1 << op2 >>= op1 >>= op2 op1 = op1 >> op2 >>>= op1 >>>= op2 op1 = op1 >>> op2 Outros Operadores Operator Use ?: op1 ? op2 : op3 Description Se op1 é true, retorna op2. Caso contrario, retorna op3. [] type [] Declara um array de comprimento desconhecido que contem elementos do tipo type . [] type[ op1 ] Declara um array de comprimento op1 que contem elementos do tipo type . [] op1[ op2 ] Acessa o elemento na posição op2 no array op1. Os índices começam no 0 e vão até o comprimento do array minos um. . op1.op2 É uma referência ao membro op2 de op1. () op1(params) Declara ou chama o método op1 com os parâmetros params. A lista de parâmetros pode ser vazia. (type) (type) op1 Mascara (cast) op1 para o tipo type. Uma exceção será lançada se os tipos forem incompatíveis. new new op1 Cria um novo objeto ou array. op1 pode ser um construtor ou a especificação do array. instanceof op1 instanceof op2 Retorna true se op1 é uma instância de op2 10 Precedência de Operadores postfix operators expr++ expr-- unary operators ++expr --expr +expr -expr ~ ! multiplicative * / % additive + - shift << >> >>> relational < > <= >= instanceof equality == != bitwise AND & bitwise exclusive OR ^ bitwise inclusive OR | logical AND && logical OR || conditional ? : assignment = += -= *= /= %= &= ^= |= <<= >>= >>>= Controle Tipos Palavras-chave loop while, do-while, for Desvio Condicional if-else, switch-case Tratamento de exceção try-catch-finally, throw Interrompendo break, continue, label:, return Comandos de loop while (expression) { statement } do { statement(s) } while (expression); for (initialization; termination; increment) { statement(s) } 11 Iterando em Arrays /** * ForEachDemo.java is an application that compiles and runs * under J2SE v5.0 (and *not* under earlier versions). * It requires no other files. * * See ForDemo.java for an equivalent version that doesn't * use the enhanced for language feature introduced in 5.0. */ public class ForEachDemo { public static void main(String[] args) { int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 }; for (int element : arrayOfInts) { System.out.print(element + " "); } System.out.println(); } } Iterando em Arrays /** * ForDemo.java is an application that compiles and runs * under J2SE v5.0. It requires no other files. * * See ForEachDemo.java for an equivalent version that takes * advantage of the for-each feature introduced in 5.0. */ public class ForDemo { public static void main(String[] args) { int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 }; for (int i = 0; i < arrayOfInts.length; i++) { System.out.print(arrayOfInts[i] + " "); } System.out.println(); } } Desvio Condicional – if/else n O desvio condicional em Java é implementado através dos comandos: if (response == OK) { //code to perform OK action } else { //code to perform Cancel action } 12 Operador ?: n Java também possui o operador ?: if (Character.isUpperCase(aChar)) { System.out.println("The character " + aChar + " is upper case."); } else { System.out.println("The character " + aChar + " is lower case."); } Equivale a: System.out.println("The character " + aChar + " is " + (Character.isUpperCase(aChar) ? "upper" : "lower") + "case."); IfElseDemo.java public class IfElseDemo { public static void main(String[] args) { int testscore = 76; char grade; if (testscore >= 90) { grade = 'A'; } else if (testscore >= 80) { grade = 'B'; } else if (testscore >= 70) { grade = 'C'; } else if (testscore >= 60) { grade = 'D'; } else { grade = 'F'; } System.out.println("Grade = " + grade); } } SwitchDemo.java public class SwitchDemo { public static void main(String[] args) { int month = 8; switch (month) { case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break; case 5: System.out.println("May"); break; case 6: System.out.println("June"); break; case 7: System.out.println("July"); break; case 8: System.out.println("August"); break; case 9: System.out.println("September"); break; case 10: System.out.println("October"); break; case 11: System.out.println("November"); break; case 12: System.out.println("December"); break; default: System.out.println("Not a month!"); break; } } } 13 Tipos enumeráveis n n Um tipo enumerável é consiste em um conjunto fixo de constantes. Em java são definidos usando a palavra-chave enum. enum Days { SUNDAY, MONDAY, TUESDAY,WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; Strings e Caracteres n Em Java há 4 classes que manipulam caracteres: ¡ ¡ ¡ ¡ Character: uma instância desta classe pode aramzenar um caracter e possui métodos para manipular caracteres. String : uma instância desta classe é emrepgada para manipualr conjuntos de caracteres constantes. StringBuffer: é uma classe para armazenar e manipular um conjunto de caracteres não constantes. É como String, só que seu conteúdo pode ser alterado. Pode ser empregada em ambientes multi-threaded. StringBuilder: é semelhante a StringBuffer, porém deve ser empregada em ambientes com single thread. É recomendado o seu emprego ao invés da StringBuffer sempre que possível, uma vez que será mais rápida na maioria dos casos. Qual classe usar? n n n Se o texto for constante use String. Se o texto poderá muda e será acessado por uma única thread,empregue a StringBuilder. Se o texto poderá mudar e será acessado por multiplas threads, use a StringBuffer. 14 length x capacity n n length: este método retorna o comprimento da string armazenada. capacity:este método de acesso retorna a capacidade do StringBuffer ou StringBuilder StringsDemo.java public class StringsDemo { public static void main(String[] args) { String palindrome = "Dot saw I was Tod"; int len = palindrome.length(); StringBuilder dest = new StringBuilder(len); for (int i = (len - 1); i >= 0; i--) { dest.append(palindrome.charAt(i)); } System.out.println(dest.toString()); } } Procurando um Caractere Método Descrição int indexOf(int) int lastIndexOf(int) Retorna o índice da primeira (última) ocorrência do caractere especificado. int indexOf(int,int) int lastIndexOf(int,int) Retorna o índice da primeira (última) ocorrência do caractere especificado procurando para frente (para trás) a partir de um ponto. int indexOf(String) int lastIndexOf(String) Retorna o índice da primeira (última) ocorrência da string especificado int indexOf(String,int) int lastIndexOf(String, int) Retorna o índice da primeira (última) ocorrência da string especificado procurando para frente (para trás) a partir de um ponto. 15 FilenameDemo.java public class FilenameDemo { public static void main(String[] args) { final String FPATH = "/home/mem/index.html"; Filename myHomePage = new Filename(FPATH, '/', '.'); System.out.println("Extension = " + myHomePage.extension()); System.out.println("Filename = " + myHomePage.filename()); System.out.println("Path = " + myHomePage.path()); } } Comparando Strings Método Descrição boolean endsWith(String) boolean startsWith(String) boolean startsWith(String, int) Retorna true se a string termina/inicia com a a substring especificada. O parâmetro inteiro, quando presente indica o offset para o início da busca. int compareTo(String) int compareTo(Object) int compareToIgnoreCase(String) Compara 2 strings e retorna uma inteiro indicando se a string é maior (> 0), igual (= 0), ou menor (< 0) que o argumento. Oeste método ignora a caixa do caractere; “a” e “A” são considerados iguais. boolean equals(Object) boolean equalsIgnoreCase(String) Retorna true se a string é igual ao argumento. boolean regionMatches(int, String, int, int) boolean regionMatches(boolean, int, String, int, int) Testa se a região da string é igual a região do argumento. O argumento boolean define se a caixa deve ser ignorada, true sim false não. RegionMatchesDemo.java public class RegionMatchesDemo { public static void main(String[] args) { String searchMe = "Green Eggs and Ham"; String findMe = "Eggs"; int len = findMe.length(); boolean foundIt = false; int i = 0; while (!searchMe.regionMatches(i, findMe, 0, len)) { i++; foundIt = true; } if (foundIt) { System.out.println(searchMe.substring(i, i+len)); } } } 16 valueOf x toString n n n n O método valueOf é empregado para converter números para String . O métdo toString é empregado para convertes números para String. O método toString é declarado em Object e sobrecarregado para o comportamento desejado Exemplos: ¡ ¡ ToStringDemo.java ValueOfDemo.java Array n n Um array é uma estrutura que armazena vários objetos do mesmo tipo. O tamanho de um array é estabelecido quando este é criado. Criando e Usando Arrays public class ArrayDemo { public static void main(String[] args) { int[] anArray; // declare an array of integers anArray = new int[10];// create an array of integers // assign a value to each array element and print for (int i = 0; i < anArray.length; i++) { anArray[i] = i; System.out.print(anArray[i] + " "); } System.out.println(); } } 17 Array de Objetos public class ArrayOfStringsDemo { public static void main(String[] String[] anArray = { "String "String "String args) { One", Two", Three" }; for (int i = 0; i < anArray.length; i++) { System.out.println(anArray[i].toLowerCase()); } } } Array de Array public class ArrayOfArraysDemo { public static void main(String[] args) { String[][] cartoons = { { "Flintstones", "Fred", "Wilma", "Pebbles", "Dino" }, { "Rubbles", "Barney", "Betty", "Bam Bam" }, { "Jetsons", "George", "Jane", "Elroy", "Judy", "Rosie", "Astro" }, { "Scooby Doo Gang", "Scooby Doo", "Shaggy", "Velma", "Fred", "Daphne" } }; for (int i = 0; i < cartoons.length; i++) { System.out.print(cartoons[i][0] + ": "); for (int j = 1; j < cartoons[i].length; j++) { System.out.print(cartoons[i][j] + " "); } System.out.println(); } } } Copiando arrays n Use o comando arraycopy para copiar arrays. public static void arraycopy(Object source, int srcIndex, Object dest, int destIndex, int length, 18 ArrayCopydemo.java public class ArrayCopyDemo { public static void main(String[] args) { char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' }; char[] copyTo = new char[7]; System.arraycopy(copyFrom, 2, copyTo, 0, 7); System.out.println(new String(copyTo)); } } 19