class Exemp01 { public static void main (String args[]) { System.out.println(Primeiro Programa Java); System.out.println(Uma classe que envia dados a tela); System.out.println(Uma classe que envia dados a tela); } } Todo programa Java inicia-se com a palavra class seguida pelo nome da classe (no caso Exemp01). Como conveno, definida pela Sun, nome de classe inicia-se com uma letra maiscula Java case sensitive, ou seja, sensvel a letra maiscula e minscula LINGUAGEM JAVA Um par de chaves { ... } envolve todo o cdigo da classe Classe composta por mtodos (considerados funes ou procedures em outras linguagens) que podem conter outros mtodos ou outras estruturas de programa Toda classe executvel dever possuir o mtodo main (principal). No exemplo, o mtodo main contm 2 instrues para sada em tela. Na exemplo, o mtodo main contm 2 instrues para sada em tela. Na realidade, no uma instruo e sim uma classe especializada em sada de dados. A linha do mtodo principal possui o formato: public static void main(String args[]). Praticamente todas as aplicaes possuem esta linha. O que se pode alterar a varivel args que poder receber outro nome conforme o desejo do programador. LINGUAGEM JAVA public um qualificador do mtodo (no apenas no main). Indica que acessvel externamente a esta classe (outras classes podem utilizar esse mtodo) static um outro qualificador. Indica que o mtodo deve ser compartilhado por todos os objetos que so criados a partir desta classe void o valor de retorno do mtodo. Void significa que no retorna void o valor de retorno do mtodo. Void significa que no retorna nenhum valor. Quando um mtodo retorna um resultado, esse qualificador no ser void. main o nome do mtodo que indica ao compilador o incio do programa. o mtodo principal. (String args[]) o argumento do mtodo principal (main) e por consequncia do programa todo. Ele um vetor de strings formado por todos os argumentos passados ao programa na linha de comando do sistema operacional quando o programa invocado. LINGUAGEM JAVA Procedimentos para compilao e execuo tendo um JDK instalado: Digitar o programa utilizando um editor de texto qualquer e salvar com a extenso .java, por exemplo: Exemp01.java Na linha de comando do DOS, chamar o compilador digitando: javac Exemp01.java javac Exemp01.java Se no ocorrer nenhum erro, o compilador criar um arquivo com extenso .class, por exemplo: Exemp01.class Chamar o interpretador Java digitando, na linha de comando do DOS: java Exemp01 (a extenso .class dever ser omitida) Aps a execuo, as duas mensagens so impressas na tela: Primeiro Programa Java Uma classe que envia dados a tela LINGUAGEM JAVA Exerccios de fixao A empresa criadora da linguagem Java foi a ................. O comando ................ possibilita realizar a execuo de uma aplicao em Java. O comando javac possibilita realizar a .................... de classes escritas em Java. em Java. Aps a realizao do processo de compilao, gerado um arquivo com extenso .......... A instruo em Java utilizada para definir o nome da classe .......... Um dos principais motivos que contriburam para o desenvolvimento da linguagem Java foi ................ Por qu o aspecto da utilizao do Java em multiplataforma muito importante para os programadores? Um mtodo equivale a ................. TIPOS DE DADOS Uma varivel dever ser definida, antes do seu uso, contendo informaes sobre que tipo de dado ela ir armazenar Os tipos de dados, em Java, so portveis entre todas as plataformas de computadores que suportam a linguagem Java Na maioria das linguagens, quando um tipo de dado (por Na maioria das linguagens, quando um tipo de dado (por ex. inteiro) utilizado, pode ser que o nmero seja armazenado em 16 ou 32 bits dependendo da plataforma. Em Java isso no ocorre, um tipo de dado ter sempre a mesma dimenso, permitindo assim, a portabilidade e a despreocupao de plataforma em que o programa ser executado, por parte dos programadores. TIPOS DE DADOS primitivos Tipo Qtd Bits Valores char 16 \u0000 a \uFFFF byte 8 -128 a +127 int 32 -2.147.483.648 a -2.147.483.647 short 16 -32.768 a +32.767 short 16 -32.768 a +32.767 long 64 -9.223.372.036.854.775.808 a +9.223.372.036.854.775.807 float 32 -3.40292347E+38 a +3.40292347E+38 double 64 -1.79769313486231570E+308 a +1.79769313486231570E+308 boolean 8 true ou false DEFINIO DE VARIVEIS Varivel um nome escolhido pelo programador que associado a um valor pertencente a um certo tipo de dados Varivel uma localizao de memria (um endereo) capaz de armazenar um valor de um certo tipo para o qual se d um nome Toda varivel possui um nome, um tipo e um contedo. No podem utilizar as palavras reservadas da linguagem Java para o seu nome As variveis podem ser declaradas no incio, no meio ou no final de As variveis podem ser declaradas no incio, no meio ou no final de um programa; no entanto, sempre antes do seu uso A linguagem Java atribui valores-padro (default) para as variveis. Valor 0 (zero) para as variveis do tipo char, byte, short, int, long, float e double, e false para boolean Mesmo com a linguagem possuindo valores padro, dependendo do ponto do programa em que a varivel utilizada, torna-se obrigatria sua inicializao com algum valor Exemp0201 Exemplo de Definio de Variveis public class Exemp0201 { public static void main (String args[]) { int x=10, y=20; double valor = 250.37; System.out.println(x); System.out.println(y); System.out.println(valor); } } Exemp0201 Exemplo de Definio de Variveis As variveis do mesmo tipo podem ser declaradas na mesma linha separadas por uma vrgula Uma declarao terminada por ; (ponto-e-vrgula) nem sempre !!! Duas barras ( // ), em qualquer local do programa, tudo que estiver escrito depois deste sinal e na mesma linha ser considerado um escrito depois deste sinal e na mesma linha ser considerado um comentrio Para inserir comentrios que envolvam vrias linhas, utiliza-se /* (barra asterisco) para demarcar o incio e */ (asterisco barra) para o final OPERADORES Aritmticos, Lgicos e Relacionais Operadores Aritmticos: Funo Sinal Exemplo Adio + X + Y Subtrao - X - Y Multiplicao * X * Y Multiplicao * X * Y Diviso / X / Y Resto da diviso inteira % X % Y Sinal negativo - - X Sinal positivo + + X Incremento unitrio ++ ++ X ou X ++ Decremento unitrio -- -- X ou X -- OPERADORES Aritmticos, Lgicos e Relacionais Operadores Aritmticos: Exemplo Exemp0202 Em java, para imprimir vrias variveis na tela, uma ao lado da outra, utiliza-se o operador de concatenao mais (+), ao contrrio de outras linguagens que utilizam a vrgula (,) como separador Class Exemp0202 { public static void main (String args[]) { // declaraco e inicializao de variveis // declaraco e inicializao de variveis int x = 10; int y = 3; // vrias operaes com as variveis System.out.println(X = + x); System.out.println(Y = + y); System.out.println(-X = + (- x)); System.out.println(X/Y = + (x/y)); System.out.println(Resto de X por Y = + ( x%y)); System.out.println(Inteiro de X por Y = + (int)( x/y)); System.out.println(X + 1 = + (++ x)); } } OPERADORES Aritmticos, Lgicos e Relacionais Operadores Aritmticos: Exemplo Exemp0202 No exemplo anterior, o mtodo println da classe System provoca a mudana de linha na tela ao imprimir o dado colocado entre parnteses.Caso necessite imprimir diversos valores na mesma linha, alm de utilizar o operador de valores na mesma linha, alm de utilizar o operador de concatenao, poder utilizar o comando println sem o ln. Exemplo: System.out.print(Dados sem quebra de linha); OPERADORES Aritmticos, Lgicos e Relacionais Operadores Relacionais Funo Caractere(s) utilizado(s) Exemplo Igual = = X = = Y Diferente != X != Y Maior que > X > Y Maior ou igual a >= X >= Y Menor que < X < Y Menor ou igual a <= X <= Y OPERADORES Aritmticos, Lgicos e Relacionais Operadores Lgicos Funo Caractere utilizado Exemplo E lgico ou AND && X && Y OU lgico ou OR | | X | | Y Negao ou NOT ! !X PASSAGEM DE PARMETROS Uma aplicao Java pode receber valores a partir da linha de comando do DOS, no momento em que ela executada. Quando o parmetro recebido por um programa, ele pode ser manipulado internamente e usado em um procedimento qualquer. Exemplo: class Exemp0204 {{ public static void main (String args[]) { System.out.println(args[0]); // imprime o 1 argumento System.out.println(args[1]); // imprime o 2 argumento } } Ao executar, o usurio deve colocar o comando no seguinte formato: java Exemp0204 argumento1 argumento2 PASSAGEM DE PARMETROS Comentrios sobre os argumentos: A varivel args um vetor de String (na realidade String no uma simples varivel e sim um objeto que ser estudado mais adiante) O vetor de String possui o primeiro elemento do vetor com ndice 0 (zero). Assim, cada palavra digitada na linha de comando, separada por um espao, ser armazenada em um ndice do vetor args (args[0] armazena o primeiro argumento, args[1] o segundo e assim sucessivamente) Os argumentos passados na linha de comando sempre se referem a variveis Os argumentos passados na linha de comando sempre se referem a variveis do tipo String devido sintaxe utilizada no mtodo principal (main), ou seja, args um vetor de tipos String. Assim, mesmo que sejam passados nmeros como parmetros, eles sero considerados como caracteres. Exemplo: java Exemp0204 20 25 Resultado: 20 25 Exemplo simples, no entanto, ele trata de uma importante caracterstica da linguagem Java: a passagem de parmetros entre mtodos CONVERSO DE TIPOS O exemplo anterior (passagem de parmetros) mostrou que todos os dados recebidos como argumentos em uma aplicao referem-se a valores do tipo String. Essa caracterstica gera um inconveniente no caso de ser necessria a utilizao de valores de outros tipo. utilizao de valores de outros tipo. Em diversos tipos de programa em Java, necessita-se realizar a converso entre os diversos tipos primitivos existentes. A linguagem Java possui uma srie de classes que realizam essa tarefa A tabela a seguir apresenta algumas das principais formas de converso de tipos As principais palavras usadas na converso aparecem em negrito. TABELA DE CONVERSO DE TIPOS Supondo a varivel x Converter em A varivel y recebe o valor convertido int x = 30 float float y = x int x = 30 double double y = x float x = 20.5 int int y = (int) x String x = 20 int int y = Integer.parseInt(x) String x = 20 int int y = Integer.parseInt(x) String x = 40.84 float float y = Float.parseFloat(x) String x = 40.84 double double y = Double.parseDouble(x) String x = Java Vetor de bytes byte b[] = x.getBytes() int x = 30 String String y = String.valueOf(x) float x = 20.45 String String y = String.valueOf(x) double x = 452.43 String String y = String.valueOf(x) byte x[] - (x um vetor de bytes) String Strint y = newString(x) CONVERSO DE TIPOS: Exemplo Criar uma classe que recebe 3 valores da linha de comando do DOS (nota1, nota2 e trabalho) e calcula a mdia entre as notas, utilizando para isso o conversor de tipo String para double. O usurio deve fornecer 3 notas da seguinte maneira: java Exemp0205 9.5 10.0 7.5 class Exemp0205 { public static void main (String args[]) public static void main (String args[]) { double nota1, nota2, trabalho, media; // declarao das variveis nota1 = Double.parseDouble(args[0]); // converso string para double nota2 = Double.parseDouble(args[1]); // converso string para double trabalho = Double.parseDouble(args[2]); // converso string para double media = (nota1+nota2+trabalho) / 3; // clculo da mdia Sustem.out.println(Media = + media); // imprime a mdia } } Entrada de dados via teclado Para entrar com dados via teclado: import java.io.*; class Exemp0206 { public static void main (String args[]) { String s = ; String s = ; float nota1=0, nota2=0, trabalho=0, media=0; DataInputStream dado; try { System.out.println(Entre com a nota1); dado = new DataInputStream(System.in); s=dado.readLine(); nota1=Float.parseFloat(s); System.out.println(Entre com a nota2); dado = new DataInputStream(System.in); s=dado.readLine(); nota2=Float.parseFloat(s); System.out.println(Entre com a nota do trabalho); dado = new DataInputStream(System.in); s=dado.readLine(); trabalho=Float.parseFloat(s); media=(nota1+nota2+trabalho) / 3; System.out.println(Media: + media); System.out.println(Media: + media); } catch (IOException e) { System.out.println(Houve erro na entrada de dados); } catch (NumberFormatException e) { System.out.println(Houve erro na converso, digite apenas caracteres numericos); } } } INTERPRETAO DO EXEMP0206 Import uma diretiva de compilao; indica que um determinado pacote de classes deve ser carregado no momento da compilao. Isto necessrio quando uma classe precisa utilizar recursos j definidos em outras classes. No exemplo, o pacote java.io que contm classes especializadas em entrada e sada de dados est sendo chamado. Classe DataInputStream pertence ao pacote java.io. O pacote pode ser entendido como um grupo de classes do mesmo tipo armazenadas em uma pasta. O asterisco presente em import java.io.* indica que devem ser carregadas todas as classes presentes no pacote java.io. Poderia ser declarado da seguinte forma: import classes presentes no pacote java.io. Poderia ser declarado da seguinte forma: import java.ioDataInputStream, indicando que ser utilizada apenas a classe DataInputStream. A linguagem Java possui um pacote de classe padro java.lang que sempre carregado automaticamente. Para utilizar a classe System (System.out.println), essa diretiva necessria. A utilizao do * no gera overhead (sobrecarga). Asterisco (*) deve ser usado apenas para identificar um grupo de classes e no um grupo de pacotes.Exemplo: java.util.*, java.net.* (indicam, todas as classes do pacote util e do pacote net). No possvel utilizar java.* achando que dois pacotes (util e net) sero incorporados. INTERPRETAO DO EXEMP0206 DataInputStream dado declara um objeto chamado dado a partir da classe DataInputStream. uma classe que possibilita a entrada de dados via teclado. Bloco try (tente) constitui-se num trecho de cdigos delimitado por abre e fecha-chaves. O bloco try sempre atua em conjunto com um ou vrios bloco catch. O bloco try analisado pelo interpretador Java e se algum erro ocorrer, a execuo do programa ser desviada para um dos blocos catch, dependendo do erro gerado na aplicao. No programa exemplo, dois tipos de erros esto previstos: Erro de entrada de dados pelo teclado ( IOException ) e um erro na converso de String para float ( NumberFormatException ). ( NumberFormatException ). O dado digitado pelo usurio recebido por meio de new DataInputStream (System.in) e armazenado no objeto denominado dado. Ocorrendo algum erro durante a digitao, o erro possvel porque manipula troca de dados entre um perifrico (teclado) e a memria, a execuo ser desviada para o bloco catch (IOException e). O contudo do objeto dado, ou seja, o dado digitado pelo usurio, colocado na varivel s atravs do comando de atribuio s = dado.readLine(). O contedo da varivel s convertido em uma varivel numrica do tipo float por meio de uma forma de converso de tipos Float.parseFloat. Ocorrendo algum erro durante a converso, caso o usurio tenha digitado um contedo diferente de nmero, a execuo ser desviada para o bloco catch (NumberFormatException e). EXERCCIO DE FIXAO 1-)Crie um programa que receba trs nomes quaisquer por meio da linha de execuo do programa, e os imprima na tela da seguinte maneira: o primeiro e o ltimo nomes sero impressos na primeira linha um aps o outro, o outro nome (o segundo) ser impresso na segunda linha, conforme o resultado apresentado abaixo: java Ex0206a Joo Ana Pedro Joo Pedro Ana Ana 2-)Faa um programa que receba a quantidade e o valor de trs produtos, no seguinte formato: Quantidade1 Valor1 Quantidade2 Valor2 Quantidade3 Valor3. O programa deve calcular esses valores seguindo a frmula total = Quantidade1 x Valor1 + Quantidade2 x Valor2 + Quantidade3 x Valor3. O valor total deve ser apresentado no final da execuo do programa, conforme o resultado apresentado abaixo: java Ex0206b 10 1.99 2 5.00 6 3.00 O valor total entre os produtos : 47.9 EXERCCIO DE FIXAO 3-)Crie um programa que receba a largura e o comprimento de um lote de terra e mostre a rea total existente, conforme o resultado apresentado abaixo: java Ex0206c 150 10 A rea total de 1500.0 metros quadrados 4-)Crie um programa que receba quatro valores quaisquer e mostre a mdia entre eles, a somatria entre eles e o resto da diviso da somatria por cada um dos valores, conforme o resultado apresentado abaixo: valores, conforme o resultado apresentado abaixo: java Ex0206d 5 7 12 21 A mdia entre os valores : 11.25 A somatria dos valores : 45.0 O resto da diviso entre a somatria e o 1 nmero: 0.0 O resto da diviso entre a somatria e o 2 nmero: 3.0 O resto da diviso entre a somatria e o 3 nmero: 9.0 O resto da diviso entre a somatria e o 4 nmero: 3.0 EXERCCIO DE FIXAO 5-)Uma determinada pessoa que trabalha com a construo de piscinas precisa de um programa que calcule o valor das construes solicitadas pelos clientes, sabendo-se que os clientes sempre fornecem o comprimento, a largura e a profundidade da piscina a ser construda. Leve em considerao que o valor da construo cobrado por metros Leve em considerao que o valor da construo cobrado por metros cbicos de gua que a piscina conter e o preo de 45,00 por m 3 , conforme o resultado apresentado abaixo: java Ex0206e 12 4 2 A piscina solicitada ter: 96.0 metros cbicos O valor da construo ser de: R$ 4320.0 COMANDOS CONDICIONAIS e ESTRUTURA DE CONTROLE em Java Os comandos condicionais possibilitam que a execuo de um programa seja desviada de acordo com certas condies Duas estruturas de desvios: if-else e switch-case possibilitam executar diferentes trechos de um programa de acordo com certas condies If (<condio>) { <instrues para condio verdadeira> <instrues para condio verdadeira> } else { <instrues para condio falsa> } O conjunto if else deve ser utilizado em minsculas e caso haja apenas uma instruo a ser executada, tanto no if como no else, o uso das chaves se faz desnecessrio EXEMPLO DO USO DE IF ELSE O exemplo a seguir verifica se o usurio realmente entrou com um argumento na linha de comando, depois verifica se o argumento digitado um valor numrico e, logo a seguir, verifica se esse valor est compreendido entre 0 e 10. class Exemp0301 { public static void main (String args[]} { if (args.length==1) { try try { float x = Float.parseFloat (args[0]); if (x<=10 && x>=0) System.out.println (Nota = + x + valor valido); else System.out.println (Nota = + x + - valor invalido); } EXEMPLO DO USO DE IF ELSE catch (NumberFormatException e) { System.out.printl (Digite apenas valores numricos); } }} else { System.out.println (Numero de argumentos invalidos); } } } EXEMPLO DO USO DE IF ELSE Ao executar o programa, o usurio dever fornecer um argumento (uma nota), por ex. 5, assim: java Exemp0301 5 Interpretao do programa Exemp0301: O vetor args receber um elemento (args[0]=5) if (args.length==1) verifica se a quantidade de argumento digitado igual a 1, ou seja, se o usurio entrou com apenas um argumento. O length retorna a quantidade de se o usurio entrou com apenas um argumento. O length retorna a quantidade de elementos que args contm. Se quantidade de argumento passado for 1, executa o trecho entre chaves (bloco try catch) A instruo else ser executada caso o usurio entre com uma quantidade de argumentos diferente de 1. O bloco try catch o responsvel por verificar se o usurio digitou um valor numrico como argumento, uma vez que valores indevidos provocaro erros de converso. if (x<=10 && x>=0) verifica se o valor da nota, digitado pelo usurio, est compreendido entre os valores 0 e 10. ESTRUTURA SWITCH-CASE A estrutura switch-case fornece uma forma mais adequada e eficiente de atender a necessidade de ter grande quantidade de desvios condicionais. A estrutura switch-case equivale a um conjunto de instrues if encadeadas. Switch (<expresso>) { case 1: instrues; break; case 2: instrues; break; case 3: instrues; break; default: instrues; default: instrues; } Na primeira linha do switch avaliado o resultado da expresso, que normalmente se refere a uma varivel simples. O resultado dessa expresso comparado nas diretivas case, executando o bloco de instrues quando a expresso coincidir com o valor colocado na frente do case. Se o valor da expresso for 2, ento sero executadas as instrues localizadas entre case 2: e break. O programa percorre todas as diretivas case at que uma delas seja igual expresso inserida no switch. Caso no encontre, sero executadas as instrues localizadas na diretiva default. EXMPLO DO USO DE SWITCH-CASE class Exemp0302 { public static void main (String args[]) { if (args.length==1) { int x; x = Integer.parseInt(args[0]); switch (x) { case 0: System.out.println(zero); break; case 1: System.out.println(um); break; case 1: System.out.println(um); break; case 2: System.out.println(dois); break; case 3: System.out.println(tres); break; . . case 9: System.out.println(zero); break; default: System.out.println(Numero desconhecido); } } else { System.out.println(Numero de argumentos invalidos); } } } EXMPLODO USO DE SWITCH-CASE Para executar o programa Exemp0302, o usurio dever digitar na linha de comando um nmero inteiro, por exemplo: java Exemp0302 3 if (args.length==1): verifica se o usurio entrou com um argumento Switch (x): significa, procure nas instrues case envolvidas pelas chaves se existe a ocorrncia do contedo armazenado na varivel x Observe que toda linha do case necessita da instruo break em seu final. S ser executada a linha do case que satisfazer a condio estabelecida pelo switch. Caso nenhuma condio seja satisfeita, isto , se o usurio entrou com um nmero diferente de 0 a 9, ento a instruo default ser executada. Veja o resultado da execuo com diferentes argumentos: 1-) java Exemp0302 2 dois 2-) java Exemp0302 7 sete 3-) java Exemp0302 13 Numero desconhecido EXCEES EM JAVA: ESTRUTURA TRY-CATCH As excees referem-se aos erros que podem ser gerados durante a execuo de um programa. Esses erros podem e devem ser tratados dentro do programa. A linguagem Java possibilita o controle de erros atravs da estrutura try-catch Sintaxe da estrutura try-catch try { <conjunto de instrues> } catch (Nome da exceo) { <tratamento de erro 1> }} catch (Nome da exceo) { <tratamento de erro 2> } catch (Nome da exceo) { <tratamento de erro n> } Interpretao: Tente executar o conjunto de instrues colocadas entre as chaves aps a palavra try; se houver algum erro, execute seu tratamento no catch. Aps o tratamento do erro, a execuo do programa continua a partir do final do ltimo catch Exemplo de programa com try-catch Utilizao de 3 excees em Java. O Programa recebe 2 nmeros inteiros na linha de comando e realiza as quatro operaes bsicas entre eles class Exemp0303 { Public static void main (String args[]) { try {{ int num1 = Integer.parseInt (ars[0]); int num2 = Integer.parseInt (args[1]); System.out.println (Soma = + (num1 + num2)); System.out.println (Subtracao = + (num1 - num2)); System.out.println (Multiplicacao = + (num1 * num2)); System.out.println (Divisao = + (num1 / num2)); } Exemplo de programa com try-catch catch (ArithmeticException e) { System.out.println (Erro de divisao por zero!); } catch (ArrayIndexOutOfBoundsException e) System.out.println (Numero de argumentos invalidos!); } catch (NumberFormatException e) catch (NumberFormatException e) { System.out.println (Digite apenas numeros inteiros!); } } } Exemplo de programa com try-catch Interpretao das excees: ArithmeticException ocorre quando um erro matemtico (aritmtico) acontece. No exemplo, o erro matemtico pode ocorrer na diviso de um nmero por zero. ArrayIndexOutOfBoundsException ocorre quando o usurio deixar de informar o argumento, pelo menos dois nesse exemplo. No exemplo, se o usurio esquecer de informar o segundo nmero (args[1]), ele ficar nulo. Quando um ndice no possui um valor, a linguagem Java considera que ele no existe e, portanto, no pode ser usado, gerando um erro. Esse erro ocorre no existe e, portanto, no pode ser usado, gerando um erro. Esse erro ocorre toda vez que um ndice inexistente for utilizado no programa.. Esse erro poder ser evitado de outra forma: verificando a quantidade de argumentos fornecidos pelo usurio if(args.length==2). NumberFormatException ocorre na converso de formatos numricos. No exemplo, poder ocorrer se o usurio no fornecer um nmero inteiro vlido. Se ocorrer um dos trs erros apontados durante o processamento das instrues presentes no try, automaticamente a execuo do programa ser direcionada para o catch para o tratamento da devida exceo.