Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ROTEIRO
Introduo Fases de um programa Java Strings Entrada e Sada Arrays Classes
Packages Interfaces
JAVA
Java um ambiente de execuo completo, no apenas a linguagem de programao. Programas Java so compilados para bytecode, ou seja, um cdigo assembly independente de arquitetura; O bytecode interpretado na Java Virtual Machine (JVM); Compilao JIT (Just in Time)
A medida que a JVM detecta que um trecho de cdigo ser executado diversas vezes, este convertido, e passa a executar na CPU real.
Edio
Editor
Disco
Compilao
bytecode Compilador
package br.ufsc.gsigma; class Program { public static void ma { System.out.printl } } 1110010100101010101010100 1001010010101001010101001 0101101101010111001010010 1010101010100100101001010 1001010101001010110110101 0111001010010101010101010 0100101001010100101010100 1010110110101011110010100 1010101010101001001010010 1010010101010010101101101 0101111001010010101010101 0100100101001010100101010 1001010111010101111001010 0101010101010100100101001 0101001010101001010110110 1010110010100101010010101 0100101011101010111100101 0010101010101010010010100
Bibliotecas
Carregamento
1110010100101010101010100 1001010010101001010101001 0101101101010111001010010 1010101010100100101001010 1001010101001010110110101 0111001010010101010101010 0100101001010100101010100 1010110110101011110010100 1010101010101001001010010 1010010101010010101101101 0101111001010010101010101 0100100101001010100101010 1001010111010101111001010 0101010101010100100101001 0101001010101001010110110 1010110010100101010010101 0100101011101010111100101 0010101010101010010010100
...
Memria Bibliotecas
Disco
Interpretao
...
Memria
UM EXEMPLO SIMPLES
public class Exemplo { public static void main(String[] args) { System.out.println("Al, mundo");
}
}
UM EXEMPLO SIMPLES
public class Exemplo { { public static void main(String[] args) System.out.println("Al, mundo");
Tudo em Java deve ficar dentro de uma classe, no existem variveis ou funes globais class: Indica a declarao de uma classe.
}
}
UM EXEMPLO SIMPLES
public class Exemplo { public static void main(String[] args) { System.out.println("Al, mundo");
public static void main(String[] args)
10
UM EXEMPLO SIMPLES
public class Exemplo { public static void main(String[] args) { System.out.println("Al, mundo");
}
}
Chamada de mtodo Chamadas de mtodos so feitas seguindo a forma: <objeto>.<mtodo>(<parmetros>) Neste caso, o objeto System.out, o mtodo println, e o parmetro a string "Al, mundo"
11
COMENTRIOS
De linha (//)
System.out.println("Al, mundo"); //Que funo legal...
*/
public void metodoX(int abc) { ... }
12
TIPOS DE DADOS
Inteiros
byte 1 byte, 128 a 127 short 2 bytes, 32.768 a 32.767 int 4 bytes, 2.147.483.648 a 2.147.483.647 long 8 bytes, 9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
Ponto Flutuante
float 4 bytes, ~ 3.40282347E+38 double 8 bytes, ~ 1.79769313486231570E+308
Caracter
Booleano
VARIVEIS
Todas as variveis precisam ter um tipo associado Variveis so declaradas indicando primeiramente o tipo, e em seguida o nome Pode-se opcionalmente inicializar uma varivel durante sua declarao Usar uma varivel antes de atribuir um valor a ela um erro de programao (Null Pointer Exception)
int diasDeFolga = 30; boolean completo;
completo = false;
14
STRINGS
Strings so seqncias de caracteres Java no possui um tipo primitivo especfico para representar strings, em vez disso elas so encapsuladas pela classe String At mesmo strings literais (delimitadas por aspas), so instncias da classe String Strings podem ser criadas a partir de literais, ou pela concatenao de strings com outras variveis
String str = "Al"; int x = 30; String str2 = str + " " + x; //str2 == "Al 30"
15
COMPARANDO STRINGS
Caso se queira comparar strings sem levar em conta a diferena entre maisculas e minsculas, pode-se usar o mtodo equalsIgnoreCase:
if ( str. equalsIgnoreCase("Al") ) ...
16
CONVERSO DE STRINGS
Para converter tipos simples para string existe o mtodo valueOf(), da classe String:
17
int length()
Comprimento da string
Compara com outra string, e retorna 0 se forem iguais, -1 e esta for menor que a outra, ou 1 em caso contrrio
18
ENTRADA E SADA
A
System.in System.out
Os
print(...)
Imprime o contedo de uma varivel ou expresso Imprime o contedo de uma varivel ou expresso, e uma quebra de linha
println(...)
19
ENTRADA E SADA
A partir da verso 5.0 (1.5), Java prov a classe java.util.Scanner para leitura de dados de System.in
import java.util.Scanner; public class InputTest { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); System.out.print("Qual seu nome? "); String nome = entrada.nextLine(); System.out.print("Quantos anos voc tem? "); int idade = entrada.nextInt(); System.out.println("Ol, " + nome + ". Sua idade : " + idade); }
20
ARRAYS
Arrays so estruturas de dados que armazenam uma seqncia de tamanho fixo de valores de um mesmo tipo.
int[] numeros; //array de int String[] nomes; //array de String
Assim como qualquer varivel, arrays precisam ser inicializados antes de serem usados, e isso feito:
21
Aps a inicializao, valores podem ser atribudos a ndices do array ou pode-se ler o valor atribudo a um ndice ndices comeam em 0 O tamanho de um array sempre pode ser obtido pelo atributo (de apenas leitura) length
nomes[0] = "Arthur"; nomes[1] = "Ford"; int tamanho = nomes.length; String ultimo = nomes[nomes.length-1];
22
23
ARRAYS MULTIDIMENSIONAIS
Java no possui uma construo explcita para arrays multidimensionais. Porm, permitido criar arrays de arrays, o que equivalente Alm disso, h uma sintaxe especial para inicializar estes arrays
int[][] tabuleiro = new int[3][3];
ENUMERAES
Uma enumerao um tipo cujos valores possveis pertencem a um conjunto limitado, pr-definido
enum Naipe { Espadas, Ouros, Copas, Paus } Naipe n = Naipe.Espadas;
25
ENUMERAES
Uma enumerao um tipo cujos valores possveis pertencem a um conjunto limitado, pr-definido
enum Naipe { Espadas, Ouros, Copas, Paus } Naipe n = Naipe.Espadas;
Tipos
Sempre que se for usar um dos possveis valores de uma enumerados podem ser usados em switches enumerao, deve-se qualific-lo com o nome da switch (n) enumerao.
{
ENUMERAES
Em switches, entretando, o compilador sabe, pelo tipo da Uma enumerao um tipo cujos valores possveis varivel n, a qual enum este Espadas pertence. Ento pertencem a um conjunto limitado, pr-definido no necessrio indicar o tipo.
enum Naipe { Espadas, Ouros, Copas, Paus }
Alis, estranhamente, proibido qualificar um valor de enumerao Naipe em um n switch . O compilador gera um erro = Naipe.Espadas; nestes casos
27
CLASSES EM JAVA
A
unidade bsica da Linguagem Java a Classe; Java so compostos de objetos que interagem entre si trocando mensagens (invocando mtodos).
Programas
28
EXEMPLO
public class Motor { //Atributos private int marcha = 0; private int rotao = 0; //Construtores public Motor(int marcha) { this.marcha = marcha; } public Motor() { } //Mtodos public void sobeMarcha() { marcha++; } public void desceMarcha() { marcha--; } public int getMarcha() { return marcha; } //Outros mtodos... }
29
CLASSES
30
ATRIBUTOS
Atributos so variveis que expressam o estado de um objeto; Como qualquer varivel, podem ser de tipos simples (int, float, boolean, etc.), um tipo referncia (classe ou interface), ou ainda um array. Ex:
private int x; private boolean[] b; private Motor motor1; private Acelervel[] ac;
ATRIBUTOS (CONT)
recomendvel que atributos sejam declarados como private, garantindo assim o encapsulamento dos dados;
32
MTODOS
Mtodos so aes que objetos podem executar; Podem possuir parmetros, que assim como atributos podem ser de qualquer tipo simples, tipo referncia, ou array; Mtodos podem executar operaes que retornam ou no resultados. No primeiro caso seu tipo de retorno deve ser indicado, no segundo ele deve ser declarado como void.
public void fazCoisa(int param) { ... } public int calculaValor(int p1, float p2) { ... }
Mtodos podem ter o mesmo nome, desde que tenham nmero e/ou tipo de parmetros diferentes entre si.
33
MTODOS (CONT.)
Dentro de mtodos pode-se usar a palavra chave this para fazer referncia ao objeto sobre o qual o mtodo foi chamado Mtodos que retornam algum valor devem faz-lo utilizando a palavra-chave return seguida do valor a ser retornado. Mtodos void podem tambm utilizar return; para encerrar sua execuo a qualquer momento; Mtodos em geral so declarados como public, para que sejam acessveis externamente. Mas mtodos que so apenas utilizados internamente devem ser declarados como private.
34
EXEMPLO
public class Motor { private int marcha = 1; public void sobeMarcha() { marcha++; } public void mudaMarcha(int marcha) { if (rotaoAdequada()) this.marcha = marcha; } public int getMarcha() { return marcha; } private boolean rotaoAdequada() { // }
35
CONSTRUTORES
Um construtor um tipo especial de mtodo; Um construtor no tem tipo de retorno (nem mesmo void) e pode possuir quantos parmetros forem necessrios; Um objeto pode possuir vrios construtores.
public class Motor { private int marcha = 0; private int rotao = 0; public Motor(int marcha) { this.marcha = marcha; } public Motor() { } }
36
CONSTRUTORES (CONT.)
Se nenhum for declarado, um construtor padro, vazio, criado implicitamente; Dentro dos construtores pode ser feita a inicializao de atributos e qualquer outra operao necessria para o objeto; O ideal que depois de construdo, o objeto esteja pronto para operar; Objetos so criados usando a palavra chave new, seguida do nome da classe e dos parmetros do construtor.
public class Carro { private Motor motor; public Carro() { motor = new Motor(); } }
37
MTODOS ESTTICOS
Mtodos estticos so mtodos que no operam em objetos double x = Math.pow(3.5, 2); int[] array = ...; Arrays.sort(array); String x = String.valueOf(2341);
Mtodos estticos no podem acessar atributos de objeto, pois estes so relativos a uma instncia da classe, que no existe neste contexto
38
MTODO MAIN
O mtodo main um mtodo esttico especial, usado como ponto de partida de um programa Java; Deve ser declarado como:
public static void main(String[] args) { //comandos... }
O array de strings a lista de argumentos de linha de comando; Pode-se declarar mtodos main em qualquer classe, sendo isto muito usado para testar classes individualmente
39
HERANA
Para declarar uma classe derivada de outra utiliza-se a palavra chave extends: Uma subclasse enxerga tudo o que no foi declarado como private na superclasse
public class Carro { private int velocidade; public int getVelocidade() { return velocidade; } } public class Formula1 extends Carro { public int calculoQualquer() { return getVelocidade() * 20; } }
40
HERANA
Para declarar uma classe derivada de outra utiliza-se a palavra chave extends: Uma subclasse enxerga tudo o que no foi declarado Caso se tentasse na acessar diretamente o como private superclasse
atributo velocidade, ocorreria um erro public class Carro de compilao
{
private int velocidade; public int getVelocidade() { return velocidade; } } public class Formula1 extends Carro { public int calculoQualquer() { return getVelocidade() * 20; } }
41
HERANA (CONT.)
Esta caracterstica chamada de polimorfismo: diferentes objetos podem ter comportamentos diferentes em relao a um mesmo mtodo. Por exemplo, a classe Carro pode calcular seu deslocamento de uma certa forma. A classe Formula1 precisa levar mais dados em considerao, como a presso aerodinmica em seus aeroflios. Ento ela reimplementa o mtodo para o clculo do deslocamento; Pode-se usar a palavra chave super para chamar mtodos e construtores da superclasse.
42
EXEMPLO SUPER
public class Carro { ... public Carro(Motor m) { ... } public int deslocamento() { return motor.getAcerao() * 20; } } public class Formula1 extends Carro { ... public Formula1(Motor m, float inclAeroflio) { super(m); ... } public int deslocamento() { return motor.getAcerao() * inclAeroflio; } }
43
PROTECTED
A
palavra-chave protected um meio termo entre public e private, para a declarao de membros
Eles so, em geral, vistos como se fossem private Mas para subclasses eles so como public
Exeto
em casos muito especiais, deve-se evitar o uso de protected, pois ele quebra o encapsulamento da superclasse
44
VINCULAO DINMICA
A criao de hierarquias de classes permite que se trate, de forma abstrata, objetos de classes especializadas como se fossem de classes mais gerais Pode-se fazer:
Carro[] carros = new Carro[2]; carros[0] = new Carro(); carros[1] = new Formula1(); for (Carro c : carros) { int desloc = c.deslocamento(); System.out.println( desloc ); }
Quando um mtodo chamado, no importa o tipo declarado da varivel, a mquina virtual invoca o mtodo com base do tipo real dela
45
VINCULAO DINMICA
A criao de hierarquias de classes permite que se trate, de forma abstrata, objetos Oambientedeexecuosabequeneste de classes especializadas como se fossem de classes mais gerais Pode-se fazer:
Carro[]
ponto, se o Carro em questo for um Formula1, ele deve chamar a verso do mtodo definida nesta classe, e no a verso carros = geral, new Carro[2]; mais definida na classe Carro
carros[0] = new Carro(); carros[1] = new Formula1(); for (Carro c : carros) { int desloc = c.deslocamento(); System.out.println( desloc ); }
Quando um mtodo chamado, no importa o tipo declarado da varivel, a mquina virtual invoca o mtodo com base do tipo real dela
46
COERO DE OBJETOS
Caso se queira chamar esse mtodo a partir de uma varivel do tipo Carro, preciso informar ao compilador explicitamente que aquela varivel guarda um Formula1 mesmo, e no um carro qualquer
Carro[] carros = ...; //erro de compilao String[] p = carros[0].getPatrocinadores(); //Compilador aceita Formula1 f = (Formula1) carros[0]; String[] p = f.getPatrocinadores(); 47
COERO DE OBJETOS
Caso se queira chamar esse mtodo a partir de uma varivel do tipo Carro, preciso informar ao compilador explicitamente que aquela varivel guarda um Formula1 mesmo, e no um carro qualquer
Carro[] carros = ...; //erro de compilao String[] p = carros[0].getPatrocinadores(); //Compilador aceita Formula1 f = (Formula1) carros[0];
Typecast, ou coero
String[] p = f.getPatrocinadores(); 48
COERO DE OBJETOS
Caso se queira chamar esse mtodo a partir de uma varivel do tipo Carro, preciso informar ao compilador explicitamente que aquela varivel guarda um Formula1 mesmo, e no um carro qualquer
Erro em tempo de execuo caso carros[0] no seja um Formula1 ClassCastException
//erro de compilao Carro[] carros = ...;
String[] p = carros[0].getPatrocinadores();
//Compilador aceita Formula1 f = (Formula1) carros[0];
String[] p = f.getPatrocinadores();
49
CHECAGEM DE TIPOS
Para se certificar que um objeto mesmo de um dado tipo, e assim evitar erros, pode-se checar em tempo de execuo o real tipo de um objeto. Pode-se checar explicitamente se a classe de um objeto uma dada classe, ou usar o operador instanceof.
if ( carros[0].getClass() == Formula1.class ) { Formula1 f = (Formula1)carros[0]; }
50
CHECAGEM DE TIPOS
Para se certificar que um objeto mesmo de um dado tipo, e assim evitar erros, pode-se checar em tempo de execuo o real tipo de um objeto. Pode-se checar explicitamente se a classe de um objeto uma dada classe, ou usar o operador instanceof.
if ( carros[0].getClass() == Formula1.class ) { Formula1 f = (Formula1)carros[0]; }
Checa se o objeto desta if ( carros[0] classe em especfico instanceof Formula1 ) { Formula1 f = (Formula1)carros[0]; }
51
CHECAGEM DE TIPOS
Para se certificar que um objeto mesmo de um dado tipo, e assim evitar erros, pode-se checar em tempo de execuo o real tipo de um objeto. Pode-se checar explicitamente se a classe de um objeto uma dada classe, ou usar o operador instanceof.
if ( carros[0].getClass() == Formula1.class ) { Checa se o objeto f desta Formula1 = (Formula1)carros[0]; classe, ou de uma classe } descendente if ( carros[0] instanceof Formula1 ) { Formula1 f = (Formula1)carros[0]; }
52
PACKAGES
53
PACKAGES
Declaraes de import permitem usar classes sem a qualificao da package. package instrumentos; public class Teclado { void tocar(); } package teste; import instrumentos.Teclado; ... Teclado t; t.tocar();
Pode-se importar todas as classes de uma package ou apenas uma classe especfica;
54
PACKAGES
Arquivos
Recomenda-se que nomes de package sejam em minsculas, e sigam o nome do domnio de internet do desenvolvedor.
55
As no declaradas como pblicas so visveis apenas por outras classes e interfaces declaradas na mesma package; As pblicas tem visibilidade externa total;
Arquivo deve ter o mesmo nome da classe/interface; Apenas uma classe/interface pblica por arquivo.
56
INTERFACES
class Avio implements Voador { public void voar(int tempo){...} public void abastecer(){...} }
class DiscoVoador implements Voador { public void voar(int tempo){...} public void piscar(){...} }
57
INTERFACES
Todas as classes que implementam a interface Voador precisam prover um mtodo voar class
{
class Avio implements Voador { public void voar(int tempo){...} public void abastecer(){...} }
58
INTERFACES
Clientes
class Testador { public void testar(Voador v) { for (int i=0; i<5; i++) v.voar(10 * i); } }
Ave a = new Ave(); Avio v = new Avio(); DiscoVoador d = new DiscoVoador(); ... Testador t = new Testador(); ... t.testar(a); t.testar(v); t.testar(d);
59
INTERFACES
Clientes
class Testador { public void testar(Voador v) { for (int i=0; i<5; i++) v.voar(10 * i); } }
O mtodo testar quer algum objeto que implemente o comportamento de um Voador, no importa qual
Ave a = new Ave(); Avio v = new Avio(); DiscoVoador d = new DiscoVoador(); ... Testador t = new Testador(); ... t.testar(a); t.testar(v); t.testar(d);
60
INTERFACES
Uma
class Ave implements Voador, Animal { public void voar(int tempo){...} public void comer(){...} public void dormir(){...} }
61
INTERFACES
Interfaces
virtual
Ambiente
de Desenvolvimento
Eclipse - http://www.eclipse.org/
Eclipse SDK 3.6 (ou superior)
Netbeans - http://www.netbeans.org/