Características de Java Familiar e Simples Sintaxe parecida com C/C++; Porém mais limpa: sem ponteiros, estruturas, etc; Orientada a Objetos (OO) Prática de programação já consolidada no mercado; OO permite reutilização de diversos trechos de códigos; Recursos OO de Java são essencialmente os mesmos de C++; Portável (Multiplataforma) Programa Java pode rodar em qualquer plataforma (HW e SO) sem precisar adaptar o código; Ex: Windows, Linux, Mac OS, etc; 1 Características do Java Interpretada (Uso de máquinas virtuais) Interpretador roda bytecodes em qualquer máquina em que foi portado; Comunicação em Rede Extensa biblioteca para lidar com protocolos TCP/IP (HTTP, FTP, etc); Acesso a objetos pela Internet é similar ao acesso de arquivos locais; Suporte Nativo a Threads Threads: estratégia que permite que mais de um evento aconteça simultaneamente em um programa; Ex: Conexão de cada usuário é tratada por uma thread; Atraente para o desenvolvimento de servidores; 2 1
Características do Java Acesso remoto a BD Classes prontas para o acesso a BD Segura Vários mecanismos para controlar a segurança (criptografia dos dados); Desenvolvida para rodar em ambientes distribuídos (rede); Poucos bugs encontrados e todos muitos técnicos; Robusta Mecanismo eficiente para tratamento de erros e coleta de lixo; Minimiza bugs, aumenta produtividade; 3 2
O que é (a tecnologia) Java? Java não é apenas uma Linguagem de Programação; É uma tecnologia que contempla: 1 Linguagem de Programação OO + 1 Plataforma de Programação; Conjunto de APIs (bibliotecas) e ambiente de desenvolvimento para aplicações; Ambiente de execução (JVM) presente em: browsers, mainframes, SOs, TVs, celulares, tablets, eletrodomésticos, etc. 5 Plataforma Java Plataforma: ambiente de SW ou HW no qual um programa roda Ex: Microsoft Windows, Unix, Macintosh; Plataforma Java: plataforma apenas de SW que roda sobre plataformas de HW e tem dois componentes: JVM (Java Virtual Machine) Java API 6 3
Criação de Programas Java Código-fonte Compilador Bytecodes de saída Máquina Virtual Java } Três tipos básicos de programas em Java: 1. Aplicaçõesconvencionais: executadas no Desktop; 2. Applets: executados no browser (cliente); 3. Servets: executados no lado servidor Web 7 Compilação para bytecode Compilador traduz código Java para bytecodes (arquivo.class) Bytecode:é um código de máquina queroda em qualquer máquina, basta quehaja uma Máquina Virtual Java (JVM) 8 4
Máquina Virtual Java (JVM) Write once, Run Anywhere No geral, um programa compilado em uma plataforma não roda em outra Ex: Programa em C++ compilado no Windows não roda no Unix; Necessário gerar uma versão do programa para cada plataforma; Bytecodes + Máquina Virtual (JVM): Cada JVM converte os bytecodes para a plataforma específica Mesmo programa roda igualmenteem várias plataformas; Bytecode Java JVM para Windows Windows JVM para Linux Linux 9 Máquina virtual Java Write once, Run Anywhere 10 5
Primeiro Contato com Java 11 Alo Mundo em Java /** Aplicação Alo Mundo */ public class AloMundo{ } public static void main(string []args){ System.out.println("Alo mundo"); } 12 6
Alo Mundo em Java Comentário de bloco Definição do método main() /** Aplicação Alo Mundo */ public class AloMundo{ } public static void main(string []args){ System.out.println("Alo mundo"); } Definição da classe AloMundo Chamada do método println() que imprime uma string na tela 13 Instalação do JDK Para compilar e rodar programas Java, é necessário antes instalar o Kit de Desenvolvimento Java (JDK) 1. Baixar e instalar o JDK 8: http://www.oracle.com/technetwork/java/javase/downloads/jdk8- downloads- 2133151.html 2. Ou baixar o eclipse que vem com o JDK junto. 14 7
Instalação do JDK 2. Configurar as variáveis de ambiente: JAVA_HOME: onde está o JDK; PATH: onde está o compilador, interpretador de Java; CLASSPATH: onde estão as bibliotecas de Java; Windows: Caminho de instalação: C:\Arquivos de Programas\Java\jdk.1.6.0_27 Painel de Controle- >Sistema- >Avançado- >Variáveis de ambiente: JAVA_HOME = C:\Arquivos de Programas\Java\jdk.1.6.0_27 PATH = C:\Arquivos de Programas\Java\jdk.1.6.0_27\bin CLASSPATH = C:\Arquivos de Programas\Java\jdk.1.6.0_27\lib 15 Instalação do JDK Verificar a instalação Prompt de Comando: javac ; Duas possibilidades: 1. javac não é reconhecido como programa... : Problema na instalação 2. Tela com instruções de help de Java: Instalação OK!!! 16 8
Escrever o programa 1. Escrever código do programa em um editor de texto; Ex: Bloco de Notas, Notepad++, Vim, etc. 2. Salvar arquivo com a extensão.java Nome arquivo = nome da classe (AloMundo.java) 17 Compilar e Executar usando JDK 1. Compilar o programa (javac) Comando: javac AloMundo.java 2. Executar programa (java): Comando: java AloMundo 18 9
Ambientes de Desenvolvimento (IDEs) Outra alternativa para escrever, compilar e rodar programas Java; Possuem uma versão integrada de : Editor de Texto; Compilador e Interpretador Java; Editor Gráfico; Debugger; Facilita a construção e manipulação de programas Rápida visualização de todos os arquivos do projeto; Ferramentas de gerenciamento de trabalho coletivo, etc 19 Eclipse No curso, usaremos a IDE Eclipse: Contém as seguintes ferramentas Editor de texto: com destaque de sintaxe Compilador e interpretador Java (e de outras linguagens); Editor gráfico: criação e edição da interface gráfica; Debugger: auxilia na correção de bugs; 20 10
Criando o Projeto no Eclipse... 1. Criar um Projeto Java File New Project 2. Escolher Java Project Clicar em Next 21 Criando o Projeto no Eclipse... 3. Nomear o Projeto... 4. Finalizar 22 11
Criando a Aplicação 3. Escrever o nome da classe 1. Clicar com botão direito... New Class 4. Finalizar 23 Salvando... Salvar 24 12
Alo Mundo em Java Case sensitive public - > modificador de acesso class - > nos lembra que tudo em Java é classe Nome da classe = nome do arquivo (case- sensitive) CamelCase para nome da classe {} mesmo delimitador do C/C++ System.out.println - > invocação de método do objeto Comentários /** Aplicação Alo Mundo */ public class AloMundo{ } public static void main(string []args){ System.out.println("Alo mundo"); } 25 Tipos em Java Java é uma linguagem fortemente tipada; É necessário definir o tipo da variável antes de usá- la; Qual o tipo de dadoque ela vai armazenar; Ex: Quantidade de peças em estoque: variável inteira; int quantestoque; Ex: Saldo da conta bancária: variável de ponto- flutuante; float saldo; 26 13
Tipos de Dados Na maioria das linguagens, os tipos de dados não são portáveis Tamanhos diferentes dependendo da plataforma; Ex: int: 16 ou 32 bits dependendo da plataforma (C/C++); Em Java, os tipos de dados são portáveis Tamanho fixo independente de plataforma; Ex: int: 32 bits em todas as plataformas; 27 Tipos em Java Podem ser: Tipos primitivos (embutidos) Incorporados na própria linguagem Representados por palavras chaves Ex: int, float, char, boolean, etc; Tipos derivados Criado pelo programador ou provido pela biblioteca de Java; Ex: Classes (estudaremos mais adiante no curso) 28 14
Tipos Primitivos de Java } Têm tamanho fixo e valores default; Tipo Qde. de bits Valor default Faixa de Valores boolean 8 false true ou false char 16 \u0000 \u0000 a \uffff byte 8 0-128 a 127 short 16 0-32.768 a 32.767 int 32 0-2.147.483.648a +2.147.483.647 long 64 0-9.223.372.036.854.775.808 a +9.223.372.036.854.775.807 float 32 0.0-3.40292347E+38 a +3.40292347E+38 double 64 0.0-1.79769313486231570E+308 a - 1.79769313486231570E+308 29 Declaração de variáveis em Java Variáveis em Java devem ser declaradas antes de serem usadas Caso contrário, teremos um erro de compilação; Formato: <tipo> <nomedavariavel>; Exs: int num1; double dolar; char inicialnome; boolean foicomprado; 30 15
Declaração de variáveis em Java Variáveis em Java devem ser declaradas antes de serem usadas Caso contrário, teremos um erro de compilação; Conjunto de valores que a ela pode assumir Formato: Exs: <tipo> <nomedavariavel>; int num1; double dolar; char inicialnome; boolean foicomprado; Permite que o programa acesse o seu valor na memória. 31 Declaração de variáveis Variáveis do mesmo tipo podem ser declaradas na mesma linha e separadas por vírgula; int x, y; double dolar, media; char; Também podem ser inicializadas: int x = 10, y = 20; double dolar = 1.61; char c = a ; 32 16
Declarações de variáveis Nomes das variáveis são identificadores; Formados por: letras, dígitos, _ e $ ; Não podem começar com dígitos; Não podem ser palavras reservadas de Java (ex: for, if) Ex: botao7, $valor, _real, m_campo, Teste Ex: 7button, t.d@ce, tiago maritan, while Case Sensitive: Distinção entre maiúsculas e minúsculas: ex: MinhaVare minhavar são diferentes; 33 Declarações de variáveis Convenção de nome - > camelcase Forçar tipos: long, double, float Forma: octal, decimal, hexa, binário, _ char: A Sequencias de escape, como no C Formato Unicode: \u0008 (por exemplo) boolean: true ou false Não há conversão entre boolean e inteiro Sempre inicializar antes de usar! Podem ser declaradas em qualquer parte do código 34 17
Palavras reservadas do Java 7 SE abstract continue for new switch assert default goto* package synchronized boolean do if private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile const* float native super while * não usadas; 35 Declaração de Constantes Em Java, usa- se a palavra reservada final para denotar constantes. Ex: final double PI= 3.14; final int MM_PER_CM = 10; Uma vez inicializada, a constante não pode mais ser alterada; A tentativa de alteração implica em um erro de compilação; 36 18
Operadores em Java Todos os operadores possuem: Resultado Aridade Precedência Associatividade 37 Operadores em Java Ø Resultado Valor resultante da aplicação do operador sobre seus operandos Ex: aplicação do operador + na expressão 2 + 3 resulta em 5; Ø Aridade Número de operandos sobre os quais o operador atua ü Operadores unários requerem um operando ü Operadores binários requerem dois operandos ü Operador ternário requer três operandos Ex: operador + tem aridade 2 (i.e., um operador binário) 38 19
Operadores em Java Ø Precedência Ex: Qual o resultado de 2+3*4? Por quê? Operador * tem maior precedência que + Convenção sobre a ordemem que as operações são executadas Operador com maior precedência é aplicado antes Ø Associatividade Qual é o resultado de 8/2/2? Por quê? Operador / tem associatividade à esquerda; À esquerda: operador mais a esquerda é aplicado 1º À direita: operador mais a direita é aplicado 1º 39 Operadores em Java Uso de Parênteses Alteram a ordem de aplicação de operadores numa expressão Tornam as expressões complexas mais legíveis Exemplos: int a = 2+(3*4); int b = ((8/2)/2); int c = (2 + 2) * (3-9) / 3; 40 20
Operadores em Java Podem ser de 4 tipos: Atribuição; Aritméticos; Relacionais; Lógicos; 41 Operador de Atribuição Operador = Copia o valor de uma variável (expressão ou constante) do lado direito para a variável do lado esquerdo; x = 13; // copia a constante 13 para x y = x; // copia o valor de x para y 42 21
Operadores Aritméticos em Java Operador Significado Exemplo + mais unário +x - menos unário (inversão de sinal) -x + adição x + y - subtração x y * multiplicação x * y / divisão x / y % resto da divisão inteira x % y ++ incremento unitário ++x ou x++ -- decremento unitário --x ou x-- 43 Operadores Aritméticos Ø Operador divisão (/) Serve para ambas as divisões: inteira e ponto flutuante; Tipos dos operandos é que definem o tipo de divisão; Ou seja: Inteiro / Inteiro => Inteiro Ponto flutuante / Ponto flutuante => Ponto flutuante Ponto flutuante / Inteiro => Ponto flutuante 44 22
Operadores Aritméticos Operadores de Incremento (++) e Decremento (- - ) Adicionam ou subtraem 1 ao valor da variável; int n = 12, t = 2; n++; // mudou n para 13 t--; // mudou t para 1 Podem ser: Pré- fixos: ++x ou --x; Pós- fixos:x++ ou x--; Qual é a diferença? 45 Operadores Aritméticos Operadores de Incremento e Decremento A diferença é quando são usados em expressões: Pré- fixo: faz a adição primeiro; Tem maior precedência que os outros operadores aritméticos; Pós- fixo: faz a adição depois; Tem a menor precedência de todos os operadores; int m = 7; int n = 7; int a = 2 * ++n; // a = 16 e m é 8 int b = 2 * n++; // b = 14 e n é 8 46 23
Operadores Relacionais Produzem Operador sempre valores Significado booleanos Exemplo (1 ou 0) Resultado == Igual a x == y true se x é igual a y; false caso contrário!= Diferente de x!= y true se x é diferente de y; false caso contrário < Menor do que x < y true se x é menor do que y; false caso contrário <= Menor ou igual a x <= y true se x é menor ou igual do que y; false caso cont. > Maior do que x > y true se x é menor do que y; false caso contrário >= Maior ou igual a x >= y true se x é maior ou igual do que y; false caso cont. 47 Operadores Lógicos Produzem sempre valores booleanos (1 ou 0) Curto circuito! Operador Significado Exemplo! Operador Negação (ou not)!x && Operador E lógico (ou and) x && y Operador Ou lógico (ou or) x y 48 24
Operadores de Atribuição com Operação Operador Exemplo Significado += x += 2 x = x + 2 -= x -= 1 x = x 1 *= x *= 1 x = x * 1 /= x /= 3 x = x / 2 %= x %= 5 x = x % 5 49 Precedência e Associatividade dos Operadores em Java GRUPO DE OPERADORES PRECED. ASSOC.!, +, - (unários) Mais alta Esquerda ++, -- (pré-fixados) Esquerda *, /, % Esquerda +, - (binários) Esquerda >, >=, <, <= Esquerda ==,!= Esquerda && Esquerda Esquerda =, +=, -=, *=, /=, %= (atribuição) Direita ++, -- (pós-fixados) Mais baixa Esquerda 50 25
Operadores Operador ternário Bitwise & (and), (or), ^ (xor), ~ (not) >>, << 26
Classe Math ( biblioteca) Math.pow(x, 2); Math.sqrt(4); Msth.sin, cos, tan, exp (consultar parametros) Math.PI, Math.E Ta bom 27
Conversões entre tipos Muitas vezes é necessário converter um tipo numérico para outro. Ex: converter um n o intpara float; Conversões válidas em Java: char byte short int long float double Conversão sem perda de informação Conversão com possível perda de informação 55 Conversões entre tipos Exemplo: byte b = 127; short s = b; // s é 127 int n = 123456789; float f = n; // f é 1.23456792E8 // houve perda de precisão 56 28
Conversão entre tipos Quando 2 valores de tipos diferentes são combinados, eles são convertidos em tipo comum antes da operação. Ex: int n = 10; float f = 12.3; float x = n + f; // n é convertido p/ float Regras: 1. Se um operando for double => ambos viram double; 2. Caso contrário, se um for float => ambos viram float; 3. Caso contrário, se um for long => ambos viram long; 4. Caso contrário => todos viram int; 57 Coerção (casting) entre tipos Também é possível fazer conversões forçadas entre tipos Casting: Envolve, em geral, perda de informação; Ex: converter um n o doublepara int; Coloca o tipo que se deseja converter entre parênteses double x = 9.997; int nx = (int) x; // nx é 9. // (int) conversão (casting) de double para int int t = 100; byte b; b = (byte) t; // casting de int para byte 58 29
Entrada e Saída em Java Java possui uma extensa biblioteca para manipular E/S Entrada: teclado (console ou GUI), mouse, arquivos, rede, etc; Saída: console, GUI, arquivo, rede, etc; Manipular GUI, arquivos, rede, exige um conjunto de ferramentas e técnicas; Então, por enquanto, vamos trabalhar E/S apenas com: Console (Scanner e System.out); Caixa de Diálogo (JOptionPane); 59 Saída do Usuário - System.out System.out possui alguns métodos para exibir dados no console: println() exibe os dados e depois muda de linha (\n); print() exibe os dados e continua na mesma linha; printf() exibe os dados formatados (similar ao printfde C); String nome = Lincoln"; System.out.println("Ola " + nome); // muda de linha System.out.print("Seja"); // continua na mesma linha System.out.println("bem vindo"); // muda de linha double x = 10000/3D; // 8 caracteres e 2 casas de precisão System.out.printf(" %8.2f", x); // 3333.33 60 30
Entrada do usuário Classe Scanner Classe Scanner (introduzida no Java 5.0) Lê a entrada do teclado e converte- a para tipos primitivos; Separa a entrada do usuário (String) em tokens; Tokens: seqüências de caracteres separados por delimitadores Ex: espaço, tabulação, mudança de linha; 61 Entrada do usuário Classe Scanner Classe Scanner (introduzida no Java 5.0) Lê a entrada do teclado e converte- a para tipos primitivos; Primeiro, é preciso criar um Scanner sobre o canal System.in Scanner entrada = new Scanner(System.in); Então, utiliza- se os métodos da classe Scanner para ler a entrada: next() lê uma palavra (como String); nextint() lê um int; nextline() lê uma linha; nextbyte(), nextshort(), nextdouble()... Maiores detalhes em: http://download.oracle.com/javase/1,5.0/docs/api/java/util/scanner.html 62 31
Entrada do Usuário Classe Scanner Exemplo: import java.util.*; /* diretiva para usar classe de * outro pacote */ public class TestaEntrada{ public static void main(string args[]){ String nome; int idade; Scanner entr = new Scanner(System.in); System.out.print("Qual o seu nome: "); nome = entr.next(); // obtem 1ª entrada System.out.print("Qual é a sua idade: "); idade = entr.nextint(); // obtem 2ª entrada } } System.out.println("Olá " + nome + " próximo ano você terá " + (idade+1) ); 63 Entrada e Saída Caixa de Diálogo Classe JOptionPane Forma gráfica simples para E/S de dados; Necessário importar: javax.swing.joptionpane; Métodos mais usados: showmessagedialog() exibe caixa de diálogo de saída de dados; showinputdialog() exibe caixa de diálogo para entrada de dados; showinputdialog(): sempre retorna entrada como String Deve- se converter se entrada for um tipo primitivo Ex: Integer.parseInt(String x): converte x para inteiro; Double.parseDouble(String x): converte x para double; 64 32
Entrada e Saída Caixa de Diálogo Exemplo: import javax.swing.joptionpane;... String aux = ""; float nota1 = 0.0, nota2 = 0.0, media = 0.0; aux = JOptionPane.showInputDialog(null, "Digite a nota1"); nota1 = Float.parseFloat(aux); // converte str para float aux = JOptionPane.showInputDialog(null, "Digite a nota2"); nota2 = Float.parseFloat(aux); // converte str para float media = (nota1 + nota2)/2; JOptionPane.showMessageDialog(null, "Média = " + media); 65 Comentários Linhas adicionadas para facilitar o entendimento do programa; São totalmente ignorados pelo compilador Em Java, podem ser de 3 tipos: Comentário de Linha: Uma única linha ( // ) Comentário de bloco: Múltiplas linhas (/* */) Comentário de documentação: Múltiplas linhas (/** */) Gera documentação automaticamente por meio do javadoc 66 33
Comentários /** Exemplo02: Essa classe demonstra o uso de variáveis em Java. São declaradas variáveis int e double... */ public class Exemplo02{ public static void main(string args[]){ int x = 10; // declaração variavel int double dolar = 2.62; /* As linhas seguintes enviam o conteudo das variaveis para a tela */ System.out.println(x); System.out.prinln(dolar); } } 67 34