Baixe o app para aproveitar ainda mais
Prévia do material em texto
Java Introdução à LinguagemIntrodução à Linguagem Fabio Cozman Escola Politécnica, USP fgcozman@usp.br Histórico • Início com projeto da Sun para criar software para utilitários (1990) • Linguagem Oak, projetada por Gosling • Linguagem Oak, projetada por Gosling (1994) • Linguagem Java é criada para atuar na World Wide Web (1995) • Versões: 1.0.2, 1.1.x, 1.2 (Java2), 1.3, 1.4... Java é Simples, orientada a objetos, distribuída, interpretada, segura, neutra a arquiteturas, portável, de alta performance, dá suporte a múltiplas linhas de processamento, múltiplas linhas de processamento, dinâmica (conforme propaganda da Sun, no Java Whitepaper, www.javasoft.com) Explicando as Palavras Neutra a arquiteturas, portável Interpretada De alta performance SeguraSegura Simples Orientada a objetos Robusta Neutra a Arquiteturas • Source (.java) →Compilador (javac) • Bytecode (.class)• Bytecode (.class) →Interpretador (java) Java é interpretada, mas de um jeito especial Java é interpretada: • Código fonte é compilado (transformado em bytecodes) e então interpretado pela JVM • Em linhas gerais:• Em linhas gerais: – Linguagens compiladas: código fonte é transformado em código de máquina e armazenado para execução – Linguagens interpretadas: cada instrução é transformada em código de máquina e executada imediatamente e individualmente Java é Realmente Portável • Tipos são padronizados: byte tem 8 bits, short tem 16 bits, int tem 32 bits, long tem 64 bitsbits, long tem 64 bits • Operações matemáticas são padronizadas float, double tem representação IEEE754 NaN funciona (!) • Caracteres são padronizados char é caracter Unicode com 16 bits Java é segura • Nenhum acesso direto à memória (ponteiros) • Controle sobre operações de sistema• Controle sobre operações de sistema • Verificação de bytecodes (conceito de sandbox) Java é Simples • Não há controle de memória pelo programador • Não há: pointer, union, enum, typedef• Não há: pointer, union, enum, typedef • Não há prototypes • Não há pre-processador • Não há sobrecarga de operadores, herança múltipla, templates (para C++) Java é Simples e Familiar public class Echo { public static void main (String[] args) { for (int i = 0; i < args.length; i++)for (int i = 0; i < args.length; i++) System.out.println(args[i]); } } Java é Robusta • Sistema de tipos é rígido if (a = 1) { • Verificação de tipos em tempo de execução LinkedList a; b = (HashTable)a; Java é Realmente Robusta • Verificação de vetores em tempo de execução • Verificação de null-pointer em tempo de • Verificação de null-pointer em tempo de execução • Manipulação de exceções é parte da linguagem • Inicialização automática para qualquer variável Em Resumo, Java... • Simples, Robusta, Orientada a Objetos • Portável • Segura• Segura • e tem uma variedade de libraries: interfaces gráficas (AWT, Swing) suporte para linhas de processamento, rede, imagens, sons vetores, stacks, hashtables, etc Ferramentas para Java • JSDK (Sun): – appletviewer, jar, java, javac, javadoc, jdb javah, javakey, javap, native2asciijavah, javakey, javap, native2ascii • Livre: – NetBeans (Sun) – Eclipse • Comerciais: Jbuilder, VisualAge, etc Informações • Documentação e download em java.sun.com • Concentre-se em Java Standard Edition • Concentre-se em Java Standard Edition (SE), versão JDK 6 (não use beta!) • Tutorial (em Learning): http://java.sun.com/docs/books/tutorial/index.html Introdução à Linguagem /* Classe Echo para teste. */ public class Echo { // Esse e' o metodo principal. public static void main (String[] args) { for (int i = 0; i < args.length; i++) System.out.println(args[i]); System.exit(0); } } Fluxo de Controle • if, else • while • do, while• do, while • switch • for • break • continue Tipos de Dados Primitivos • boolean • char • byte, short, int, long• byte, short, int, long • float, double • Strings (!): operador + para concatenação Operadores Arranjos (Arrays) • Unidimensionais: int[2], Button[10], Object[122] • Multidimensionais: int[3][44][3] • Multidimensionais: int[3][44][3] • Criados com new: int[] a = new int[2]; • Não precisam ser removidos (“coleta de lixo”) Orientação a Objetos • Programas são organizados em torno de classes e objetos public class Circle { public double x,y,r;public double x,y,r; public double area() { return( Math.PI * r * r ); } } Declaração e Criação de Objetos • Declare: Circle c; • Crie:• Crie: c = new Circle(); • Declare, crie e inicialize: Circle c = new Circle(1,2,3); Métodos e Construtores • Chamando um método: c.area(); • Construtor simples: • Construtor simples: public Circle () { } • Outro construtor (sobrecarga) public Circle(double x, double y, double r) Variáveis de Classe • Variável associada à classe (não a objetos) public class Circle { static int num_circles;static int num_circles; ... a = Circle.num_circles; ... } • Exemplo: Math.PI Métodos de Classe • Método associado à classe • Exemplos importantes: Math.sqrt, Math.max, Math.min, Math.cos, etcMath.max, Math.min, Math.cos, etc • Método declarado como static: public static void main(String args[]) public static double sqrt(double v) Hierarquias e Heranças • Classes podem ser estendidas • Objetos herdam variáveis e métodos • Superclasse é referida por super• Superclasse é referida por super • Métodos são superpostos, variáveis não Coleta de lixo • Java não tem recursos na linguagem para liberar memória • Memória é liberada automaticamente • Memória é liberada automaticamente através de um processo denominado “coleta de lixo” (garbage collection) • Quando coletados, objetos podem ser finalizados pelo método finalize() Além disso, • Packages: grupos de classes (package) • Import: inclusão de classes • Importante: através das regras de uso de • Importante: através das regras de uso de packages e imports, Java mantem uma estrutura de nomes que impede colisões Acesso a Objetos • Possíveis situações: public (package)(package) protected private • Dica: construa packages pequenos para garantir encapsulamento de dados Copiando Objetos • Para copiar referências: Object a, b; a = b; • Um exemplo: public void swap(Object a, Object b) {public void swap(Object a, Object b) { Object temp = a; a = b; b = temp; } Pacotes • Packages: grupos de classes (package) • Inclusão de classes e pacotes (import)• Inclusão de classes e pacotes (import) • Através do uso de pacotes, Java mantém uma estrutura de nomes que evita colisões. Acesso a Objetos • Possíveis situações: – public todas as classes – (package) só no pacote– (package) só no pacote – protected só no pacote e subclasses – private só na classe • Dica: construa pacotes pequenos para garantir encapsulamento de dados. Java e OO: Resumo • Variáveis: primitivas e de referência; Strings; locais; final. • Objetos: this; super; new; finalize; coleta de lixo • Classes: public; extends; final • Arrays: new; coleta de lixo • Métodos: this; super; construtores; sobrecarga; superposição; public, private, protected; static; final Classes Abstratas • Objetivo: implementar alguma funcionalidade, mas deixar funcionalidade para sub-classespara sub-classes • Classes abstratas não geram objetos Interfaces • Uma “classe abstrata” que só tem métodos abstratos e constantes (static final) • Define a “interface” entre classes (!)• Define a “interface” entre classes (!) • Uma das mais poderosas ferramentas para especificação de software, e um substituto para herança múltipla Manipulação de Exceções • Novos termos: try - uma região de código catch - uma condição de exceçãocatch - uma condição de exceção finally - uma região de código • Além disso, um método pode throw/throws exceções Exceções são Objetos • Classes de exceções podem ser definidas e estendidas • java.lang Throwable• java.lang Throwable java.lang.Error java.lang.Exception• Em geral, nunca use catch para tratar um objeto Error Exceções devem ser Tratadas • Tratamento: - Uso de try e catch - Uso de throws- Uso de throws • Java exige tratamento de toda exceção que não estenda Error ou Exception.RuntimeException Blocos try-finally • É possível usar try e finally sem tratar exceções • Objetivo: garantir finalização de • Objetivo: garantir finalização de procedimentos (fechar arquivos, conexões, etc), mesmo com break, continue ou return Pacotes Java • Java 1.0: – lang (automático!) – io, applet, awt (image, peer), net, util– io, applet, awt (image, peer), net, util • Java > 1.0: – beans, math, security, text, swing, sql, ........... String • String s = “exemplo” + “!!!”; • Métodos: – s.length(), s.concat(“ab”), – s.length(), s.concat(“ab”), s.substring(4) // 4 ao fim, s.substring(4,6), s.charAt(4), s.toCharArray(), s.toUpperCase(), s.toLowerCase(), s.startsWith(“ab”), s.endsWith(“ab”), s.compareTo(“ab”) // <0 se <, =0 se =, >0 se >, s.compareToIgnoreCase(“ab”), s.indexOf('a') Ainda sobre Strings • Método toString() aplicado a todo objeto: String s = o.toString(); • Classe StringBuffer:• Classe StringBuffer: – capacity, length, charAt, append, insert, reverse • Classe StringTokenizer (muito útil!) • Escapes: – \b, \t, \n, \”, \xxx... Classes “Empacotadoras” • Boolean Byte, Short, Integer, Long, Float, Double, Character • Métodos: X.parseX(String s)• Métodos: X.parseX(String s) • Character.isLetter, Character.toUpperCase. • Integer.toBinaryString(int x), Integer.toOctalString(int x), Integer.MAX_VALUE, Integer.MIN_VALUE. Math, System • Math.cos/sin/tan/acos/asin/atan/exp/log/pow/ ceil/floor/round/toDegrees. • Note: java.math contém BigInteger, BigDecimal.BigDecimal. • System: exit, currentTimeMillis, arraycopy • System: – PrintStream out, err – InputStream in java.io • Pacote para Entrada/Saída de dados (arquivos, teclado, monitor) • Classe File: permite manipular arquivos e • Classe File: permite manipular arquivos e diretórios (tamanhos, datas, permissões). • InputStream e OutputStream: ler e escrever sequências de bytes. • Reader e Writer: ler e escrever sequências de caracteres. Ler do teclado • Variável System.in: import java.io.*; BufferedReader br = BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String n; try { n = br.readLine(); } catch(IOException e) { } Ler de arquivo • Classe BufferedReader: import java.io.*; try { BufferedReader br = new BufferedReader(new FileReader(“hey.txt”));new BufferedReader(new FileReader(“hey.txt”)); String line = br.readLine(); while (line != null) { System.out.println(line); line = br.readLine(); } br.close(); } catch (IOException e) { } Escrever em arquivo • Classe PrintWriter: import java.io.*; try {try { File f = new File(“dir”, “hey.txt”); PrintWriter pw = new PrintWriter(new FileWriter(f)); pw.println(“HEY! File with ” + f.length()); pw.close(); } catch (IOException e) { } java.net • import java.net.*; import java.io.*; public class Download { public static void main(String args[]) { String linha; if (args.length>0) { try { URL u = new URL(args[0]);URL u = new URL(args[0]); DataInputStream html = new DataInputStream(u.openStream()); while ((linha = html.readLine()) != null) System.out.println(linha); html.close(); } catch (Exception e) { System.err.println(e); } } }
Compartilhar