Baixe o app para aproveitar ainda mais
Prévia do material em texto
JAVA Programação Java Prof. M. Sc. Edgar Gurgel Primeiro Aplicativo JAVA // Código fonte: AloMundo.java /* Este é um exemplo de programa JAVA, que imprime uma mensagem. */ public class AloMundo { public static void main (String args[]) { System.out.println ("Alô Mundo, vocês estão aprendendo JAVA!"); } } POO II 2 Executando o Aplicativo JAVA Comentários l Usando duas barras adjacentes, //, em qualquer ponto de uma linha: O compilador Java ignora as barras e o restante da linha na qual elas aparecem. Ex: // Um pequeno comentário l uma barra seguida de um asterisco, /* : O compilador Java ignora tanto os caracteres /* e todos os caracteres que os seguem até que seja encontrado um asterisco imediatamente seguido de uma barra, */. Ex: /* Um comentário que se estende por várias linhas */ POO II 3 Executando o Aplicativo JAVA Entendendo o programa l Todo programa em java começa com a palavra class seguido pelo nome da classe (no nosso caso AloMundo) public class AloMundo { public static void main (String args[]) { System.out.println ("Alô Mundo, vocês estão aprendendo JAVA!"); } } OBS: o corpo de uma classe é delimitado pelos símbolos { e }, e corresponde à descrição dos atributos e métodos da classe. POO II 4 Executando o Aplicativo JAVA Entendendo o programa l A linha public static void main (String args[]) aparece em todas as classes executáveis. Praticamente todas as aplicações possuem esta linha. A única coisa que pode ser alterada é na linha é a variável args que pode receber outro nome de acordo com o desejo do programador. modificadores tipo do valor de retorno nome do método parâmetros public static void main (String args[]) POO II 5 Executando o Aplicativo JAVA Entendendo o programa l public: é um qualificador de método, que indica que ele é acessível externamente a esta classe. Isto é útil quando uma classe necessita utilizar alguma funcionalidade de outra classe, característica muito comum na linguagem JAVA. l static: É um outro qualificador ele indica que o método deve ser compartilhado por todos os objetos que são criados a partir desta classe. l void: É o valor de retorno do método. Quando não retorna nenhum valor ele retorna void, uma espécie de valor vazio que tem que ser especificado. POO II 6 Executando o Aplicativo JAVA Entendendo o programa l main: É o nome do método que indica ao compilador o início do programa. É o método principal. l (Strings args[]): É o argumento do método principal (main). É um vetor de strings formados por todos os argumentos passados ao programa na linha de comando do sistema operacional quando o programa é invocado. POO II 7 Executando o Aplicativo JAVA public class Caracteres { public static void main (String args[]) { String nome=“Joao"; String sobreNome=“Silva"; System.out.print(nome); System.out.print(" "); System.out.println(sobreNome); } } POO II 8 Declarando Variáveis l Um identificador Java é um nome que pode consistir de letras e dígitos e dos caracteres _ e $, devendo-se iniciar sempre com uma letra. l Uma variável é um espaço da memória do computador que contém um valor. O nome de uma variável é um identificador que faz referência àquela variável. l O tipo de dado de uma variável determina o tamanho do espaço de memória e a forma como os bits armazenados naquele espaço são interpretados. l Em Java, o tipo de uma variável deve ser sempre declarado, de forma que o compilador java aloca o espaço de memória correto para cada tipo de variável do programa. l Quando se conta ao compilador o tipo e nome de uma variável, diz-se que se está declarando a variável. POO II 9 Declarando Variáveis public class PrimeiroPrograma{ public static void main(String argv[]){ int var1; int var2; int var3; ... } } POO II 10 Declarando Variáveis public class PrimeiroPrograma{ public static void main(String argv[]){ int var1, var2, var3; ... } } POO II 11 Declarando Variáveis l O armazenamento de um valor no espaço de memória alocado para uma variável é feito através de uma atribuição a uma variável. l Para se fazer uma atribuição a uma variável, usa-se o sinal de igual (=). l É possível inicializar uma variável no mesmo comando em que ela é declarada: public class PrimeiroPrograma{ public static void main(String argv[]){ int var1 = 10; int var2 = 20; int var3 = 30; ... } } POO II 12 Declarando Variáveis l Também é possível combinar diversas declarações com inicializações em um comando conciso: public class PrimeiroPrograma{ public static void main(String argv[]){ int var1 = 10, var2 = 20, var3 = 30; ... } } POO II 13 Declarando Variáveis l As declarações de variáveis não precisam ocorrer antes de todos os outros comandos (como é regra em algumas outras linguagens). Muitos preferem declará-las próximo ao local do programa aonde elas são primeiramente usadas, como no seguinte exemplo: public class PrimeiroPrograma{ public static void main(String argv[]){ int resultado, script = 6; resultado = script; int atuacao = 9; resultado = resultado + atuacao; int direcao = 8; resultado = resultado + direcao; System.out.print("A pontuação do filme é "); System.out.println(resultado); } } POO II 14 Tipos de Dados Tipo Bytes Armazena byte 1 inteiro short 2 inteiro int 4 inteiro long 8 inteiro Tipo Bytes Armazena float 4 número em ponto flutuante double 8 número em ponto flutuante O tipo de data char é usado ordinariamente para o armazenamento de caracteres. Entretanto, como os códigos de caracteres podem ser vistos como inteiros, char também é tido como um dos tipos de dados para inteiros, assim como byte, short, int e long. O tipo de dados char ocupa 2 bytes de memória. POO II 15 Expressões Aritméticas l Os operadores aritméticos (binários) básicos são +, -, *, e / usados respectivamente para as operações de adição, subtração, multiplicação e divisão: 6 + 3 // Adiciona os valores, resultando em 9 6 - 3 // Subtrai um valor do outro, resultando em 3 6 * 3 // Multiplica os valores, resultando em 18 6 / 3 // Divide um valor pelo outro, resultando em 2 POO II 16 Expressões Aritméticas l Quando um numerador inteiro não é divisível por um denominador inteiro, o operador de divisão arredonda para baixo o resultado produzindo um outro inteiro. 5 / 3 // Divide um valor pelo outro, resultando em 1 -5 / 3 // Divide um valor pelo outro, resultando em -1 ❚ O operador módulo, %, fornece o resto da divisão inteira de dois valores inteiros. 5 % 3 // Resulta no resto da divisão de 5 por 3 que é 2 -5 % 3// Resulta no resto da divisão de 5 por 3 que é -2 POO II 17 Expressões Aritméticas l Ao se dividir dois valores em ponto flutuante, o resultado também é em ponto flutuante. 5.0 / 3.0// Divide um valor pelo outro, resultando em 1.66667 l Expressões aritméticas podem conter um operador ou mais.6 + 3 + 2 // Resulta em 11 6 - 3 - 2 // Resulta em 1 6 * 3 * 2 // Resulta em 36 6 / 3 / 2 // Resulta em 1 POO II 18 Expressões Aritméticas l As regras de precedência seguidas pelos operadores aritméticos são aquelas da matemática: 6 + 3 * 2 // Resulta em 12, e não em 18 l Quando uma expressão contém operadores de igual precedência, tal como multiplicação e divisão, o compilador Java tratará a expressão, como nos exemplos: 6 / 3 * 2 // Equivalente a (6 / 3) * 2 = 4 6 * 3 / 2 // Equivalente a (6 * 3) / 2 = 9 POO II 19 Expressões Aritméticas l É sempre possível fazer uso de parênteses em torno de sub-expressões para forçar com que uma expressão seja interpretada como se queira. 6 + 3 * 2 // Resulta em 12, e não em 18 (6 + 3) * 2 // Resulta em 18, e não em 12 POO II 20 Expressões Aritméticas l Alguns operadores, tais como o operador de negação, -, e o operador mais unário, +, possuem apenas um operando, que deve ser posicionado imediatamente à direita do operador. Tais operadores são operadores unários. l A precedência do operador de negação, -, é maior do que a dos operadores de adição, +, subtração, -, multiplicação, *, e divisão, /. - 6 * 3 / 2 // Equivalente a ((-6) * 3) / 2 = -9 POO II 21 Conversão de Tipos Supondo a Variável x Converter em A variável y recebe o valor convertido int x = 10 float Float y = (float) x int x = 10 double Double y = (double) x float x = 10.5 int Int y = (int) x String x = “10” int Int y = Integer.parseInt(x) String x = “20.54” float Float y = Float.parseFloat(x) String x = “20.54” double Double y = Double.parseDouble(x) String x = “java” Vetor de bytes Byte b[] = x.getBytes() int x = 10 String String y = String.valueOf(x) float x = 10.35 String String y = String.valueOf(x) double x = 254.54 String String y = String.valueOf(x) Byte x[] – (x é um vetor de bytes) String String y = String.valueOf(x) POO II 22 Exemplos /* Essa classe demonstra a utilização de variáveis em uma classe em Java. São declaradas variáveis do tipo int e double. O exemplo também demonstra como imprimir o conteúdo das variáveis na tela */ public class Tipos { public static void main ( String args [] ) { int x=10, y =20; //declaração de variáveis do tipo inteiro double dolar = 2.62; /* As linhas seguintes enviam o conteúdo das variáveis para a tela */ System.out.println(x); System.out.println(y); System.out.println(dolar); } } POO II 23 Exemplos public class Operacoes { public static void main (String args[]) { //declaração e inicialização de variáveis int x = 10; int y = 3; //várias operações com as variáveis System.out.println("X = "+ x); System.out.println("Y = "+ y); System.out.println("X/Y = "+x/y); //resulta 3 System.out.println("Resto de X por Y = "+x%y); //resulta 1 System.out.println("Inteiro de X por Y = "+(float)x/y); //resulta 3.3333333 System.out.println("X + 1 = "+ ++x); //resulta 11 } } POO II 24 Definindo Métodos Simples Objetivo: Aprender como definir métodos simples além do método main. No processo, aprende-se a trabalhar com argumentos, parâmetros e valores a serem retornados. POO II 25 Exemplos • A fim de computar a pontuação de vários filmes, é necessário definir um método que faça isto, chamado pontuarFilme. Uma vez definido o método, é possível invocá-lo como no seguinte exemplo: public class Filme{ public static void main(String argv[]){ int script = 6, atuacao = 9, direcao = 8; System.out.print("A pontuação do filme é "); System.out.println(pontuarFilme(script,atuacao,direcao)); } public static int pontuarFilme(int s, int a, int d){ return s + a + d; } } Resultado: A pontuação do filme é 23 POO II 26 Exemplos l No exemplo, o método pontuarFilme tem três argumentos: 6, 9, e 8. l Em Java, os argumentos de métodos são separados por vírgulas. l Os argumentos do exemplo são todos expressões constantes, mas argumentos também podem ser expressões variáveis ou expressões contendo operadores. POO II 27 Exemplos pontuarFilme POO II 28 Exemplos l Note também que se deve especificar tipos de dados para os parâmetros e valores retornados quando se define um método em Java: l Se especifica o tipo de dado de cada parâmetro em um método no local onde se introduz o parâmetro; l Se especifica o tipo de dado do valor retornado por um método no local onde se dá nome ao método. POO II 29 Exemplos l Finalmente, usa-se palavras chave para indicar que tipo de método se está definindo: l A palavra chave static indica que o método pontuarFilme é um método de classe. Se omitir a palavra-chave static, será definido um método de instância. l A palavra chave public indica que qualquer outro método definido em qualquer classe pode chamar o método pontuarFilme. Se ao invés fossem usadas as palavras chave protected ou private, indicaria que o acesso ao método pontuarFilme é restrito. POO II 30 Exemplos l Por convenção, muitos programadores Java iniciam o nome de cada método por uma letra minúscula. l O tipo de dado de cada um dos parâmetros deve ser especificado individualmente, porque tipos de dados em declarações de parâmetros, diferentemente de tipos de dados em declarações de variáveis, não se propagam através das vírgulas. Assim, o exemplo seguinte está incorreto: Errado public static int movieRating(int s, a, d){ ... } pontuarFilme POO II 31 Exemplos l O compilador Java não requer que os programas em Java sejam ordenados tal que uma definição de método apareça sempre antes que uma chamada aquele método seja feita. Assim, pontuarFilme não precisa ser definido antes do método main, aonde é feita uma chamada a pontuarFilme. Neste sentido, Java é mais fácil de se trabalhar do que C e C++. l Não se pode nunca deixar de especificar o tipo de dado do valor de retorno de um método. Neste sentido, Java é diferente das linguagens C e C++, que permitem que se omita o tipo de retorno de uma função se este tipo for int. POO II 32 Exemplos l Alguns métodos não retornam valores. Eles podem ser executados apenas para exibir um valor, por exemplo. Neste caso, usa-se a palavra chave void como se void fosse um tipo de dado para valores de retorno. Quando Java encontra a palavra chave void sendo usada como um tipo de dado de valor de retorno, Java sabe que nada deverá ser retornado. l Por exemplo, na seguinte variação do programa anterior, a tarefa de mostrar a pontuação do filme é executada no método mostrarPontuacaoFilme, de forma que não há nenhum valor a ser retornado. De acordo com isto, aparece a palavra-chave void ao invés d e u m n o m e d e t i p o d e d a d o s n a d e f i n i ç ã o d e mostrarPontuacaoFilme e mostrarPontuacaoFilme não contém nenhum comando return. POO II 33 Exemplos public class Filme{ public static void main( String argv[]){ int script = 6, atuacao = 9, direcao = 8; mostrarPontuacaoFilme(script, atuacao, direcao); } public static void mostrarPontuacaoFilme(int s, int a, int d){ System.out.print("A pontuação do filme é "); System.out.println(s+ a + d); } } POO II 34 Exemplos l Não é necessário definir um método chamado a partir do método main na mesma classe em que o método main é definido. Por exemplo, pode-se definir pontuarFilme dentro da classe Filme, no arquivo Filme.java: // Classe Filme definida em Filme.java public class Filme{ public static int pontuarFilme(int s, int a, int d){ return s + a + d; } } POO II 35 Exemplos l Então, pode-se definir o método main() dentro da classe Principal no arquivo Principal.java: // Classe Principal definida em Principal.java public class Principal { public static void main (String argv[]){ int script = 6, atuacao = 9, direcao = 8; System.out.print("A pontuação do filme é "); System.out.println(Filme.pontuarFilme(script,atuacao,direcao)); } } POO II 36 Exemplos l Conforme mostrado no exemplo anterior, se define pontuarFilme em uma classe que é diferente daquela na qual pontuarfilme é chamada, deve-se prefaciar o nome do método, pontuarFilme, pelo nome da classe na qual o mesmo é definido (pois trata-se de um método de classe: static), e entre os dois nomes deve-se colocar um ponto. l A razão da aparição do nome da classe e do operador ponto é que Java permite que se defina métodos com o nome de pontuarFilme em mais de uma classe. Assim, é necessário sempre se especificar qual é o particular pontuarFilme que se tem em mente. POO II 37 Exemplos l Poderia-se, por exemplo, definir não somente a classe Filme, mas também a classe JamesBondFilme, na qual o método pontuarFilme reflete, digamos, a crença de que 10 deveria ser o valor usado ao invés do valor do parâmetro script, s, quando se desse a pontuação para filmes do James Bond: public class JamesBondFilme{ public static int pontuarFilme(int s, int a, int d){ return 10 + a + d; } POO II 38 Exemplos l Uma vez definidas e compiladas ambas as classes Filme e JamesBondFilme, pode-se usar ambas: public class Principal{ public static void main(String argv[]){ int script = 6, atuacao = 9, direcao = 8; System.out.print("A pontuação de um filme é "); System.out.println(Filme.pontuarFilme(script,atuacao, direcao)); System.out.print("A pontuação do filme do James Bond é "); System.out.println(JamesBondFilme.pontuarFilme(script, atuacao, direcao)); } } POO II 39 Exemplos l Sempre que há mais de uma definição para um método, o nome do método é dito ser sobrecarregado (overload). l Java também permite que se defina múltiplos métodos com o mesmo nome em uma mesma classe, se cada versão do método tiver um arranjo diferente de tipos de dados de parâmetros. l P o d e r i a - s e , p o r e x e m p l o , d e f i n i r u m m é t o d o mostrarPontuacaoFilme que trabalhe com parâmetros inteiros e um outro mostrarPontuacaoFilme que trabalhe com parâmetros em ponto flutuante. Então, ambos os métodos podem fazer parte de um mesmo programa: POO II 40 Exemplos public class Principal{ public static void main (String argv[]){ int intScript = 6, intActing = 9, intDirecting = 8; double doubleScript = 6.0, doubleActing = 9.0, doubleDirecting = 8.0; mostrarPontuacaoFilme(intScript, intActing, intDirecting); mostrarPontuacaoFilme (doubleScript, doubleActing, doubleDirecting); } // Definindo primeiro mostrarPontuacaoFilme com inteiros: public static void mostrarPontuacaoFilme(int s, int a, int d){ System.out.print("A pontuação inteira do filme é "); System.out.println(s + a + d); return; } // Em seguida, definindo mostrarPontuacaoFilme com números em ponto-flutuante public static void mostrarPontuacaoFilme (double s, double a, double d){ System.out.print("A pontuação em ponto flutuante do filme é "); System.out.println(s + a + d); return; } } POO II 41 Exemplos l Por permitir a sobrecarga de métodos, Java é dita ser uma linguagem polimórfica. l O operador +, que normalmente significa adicionar, tem um significado inteiramente diferente quando um de seus operandos é uma string. Em tais situações, o operador + converte o outro operando em uma string, se aquele operando não for uma string, e concatena as duas strings, produzindo uma terceira string. l Como o operador + possui dois significados diferentes, + é dito ser um operador sobrecarregado. POO II 42 Exemplos l Frequentemente encontra-se o operador + como operador de concatenação sendo usado conjuntamente com métodos de impressão (print, println). Tal uso do operador + permite uma compactação maior dos comandos. l Por exemplo, ao invés de escrever: System.out.print("A pontuação do filme é "); System.out.println(s + a + d); POO II 43 Exemplos l Poderia-se igualmente combinar as duas linhas de comando em apenas uma, por meio do uso do operador de concatenação: System.out.print("A pontuação do filme é " + (s + a + d)); l Note que o parênteses em torno das variáveis somadas é essencial. De outro modo, Java assumiria que se quer concatenar a primeira string com o valor de s, transformado em uma string, depois a e depois d. Desta forma, Java faria uma concatenação, mas não faria nenhuma adição. POO II 44 Exercícios da Lista 1 Exercícios POO II 45 Funções Matemáticas • Estas funções em Java são provenientes de métodos da classe Math do pacote default java.lang definidos como static. • Sintaxe : Math.<nome do método>(<lista de argumentos>); - Possui duas constantes PI e E. • Método max(<valor1>,<valor2>): Calcula o maior entre <valor1> e <valor2> retornando o maior tipo encontrado. Ex Math.max(10,3.5); -> 10.0 • Método min(<valor1>,<valor2>): Calcula o menor entre <valor1> e <valor2> retornando o menor tipo encontrado. Ex Math.min(10,3.5); -> 3.5 • Método sqrt(<valor1 double>): Calcula a raiz quadrada de <valor1> retornando um double. Ex Math.sqrt(900); -> 30.0 • Método pow(<base>,<pot>): Calcula a potência de <base> por <pot> retornando um double. Ex Math.pow(25,0.5); -> 5.0 • Método round(<valor double>): Calcula o arredondamento do valor retornando um long. Ex. Math.round(30.5); -> 31 • Método random(): Retorna um valor double aleatório entre [0.0 e 1.0[ Ex. Para sortear um nº entre 0 e 99 -> (int) (Math.random() * 100) POO II 46 Funções String Em Java, String é uma classe que possui métodos para manipulação e que pode ser utilizada como uma variável. • Sintaxe: (Declaração) String s = “Linguagem Java”; (Utilização) s.<método>(argumento/s) “Os literais String deverão estar entre aspas”. • Método length(): Retorna um inteiro equivalente ao tamanho da string. Ex. int tamanho = s.length(); (tamanho = 14) • Método charAt(<índice>): Retorna um char correspondendo a posição relativa [0...(n-1)] do caracter na string. Ex. char c = s.charAt(5); (c = ‘a’) • Métodos toUpperCase() e toLowerCase(): Estes métodos convertem os caracteres de uma string para maiúsculo e minúsculo respectivamente retornando um string. Ex. String x = s.toUpperCase() ( x = “LINGUAGEM JAVA” ) – String x = s.toLowerCase() ( x = “linguagem java” ) • Método substring(<índice1>,[<índice2>]): Retorna um String com os caracteres a partir de <índice1> até ]<índice2>[. Se <índice2> não for especificado, será até o final da string. Ex. String x = s.substring(0,9); (x = “Linguagem”) • Método trim(): Remove todos os espaços antes e depoisda string retornando uma String. String x = “ Espaços “; x = x.trim(); ( x = “Espaços” ) • Método replace(<char1>,<char2>): Substitui todas as ocorrências de <char1> por <char2> na string retornando um String. Se nenhuma ocorrência de <char1> for encontrada, a string original é retornada. Ex. String x = s.replace(‘a’,’ ‘); (x = “Lingu gem J v “) • Método valueOf(<nomevar>): Converte vários tipos de dados em String. Ex. String x = String.valueOf(45.74); (x = “45.74”) POO II 47 Exercícios da Lista 2 Exercícios POO II 48
Compartilhar