Programação Orientada a Objetos com Java Aula 2 professor: Fábio Kimura e-mail: fkimura@yahoo.com
Agenda •  Padrão de Codificação Java •  Variáveis em Java •  Tipos Primitivos •  Tipos de Referência •  Expressões e Operadores •  Exercícios •  Trabalho valendo nota
Importância do Padrão de Codificação Por que usar um padrão de codificação? class input { class output {}public static void main(String call [ ]){;input. integer(call,input.class. getName (),0);}; static void integer(String  []Number, String end ,int Null) {; char  Void=58; for (String Virtual:Number)Virtual+= Null++; System.  out. println(end+Void+Null);}}
Importância do Padrão de Codificação Por que usar um padrão de codificação? 80% do custo total (lifetime cost) de um software vai para  manutenção. Raramente um software é mantido sempre pelo autor original.  Aumentam a legibilidade de um software, permitindo aos programadores entender códigos pré-escritos mais fácil e rapidamente.  Por que usar o Padrão de Codificação Java? Definido pela Sun em 1996 e publicado em “The Java Language Specification”. Utilizado desde então pela maioria das grandes empresas.
Importância de “Code Conventions” Exemplos da especificação “Java Code Conventions” •  Nomes de classes devem ser substantivos, com cada nome começando com maiúscula e o resto em minúsculas Exemplos: MinhaClasse, Conta, ContaEspecial •  Atributos e variáveis devem começar com minúsculas, com cada palavra interna iniciando com maiúscula. Exemplos: meuAtributo, minhaVariavel, cliente •  Métodos devem ser verbos, com cada palavra interna começando com maiúscula. Exemplos: abrirConta, alterarNome, testar
Tarefa para casa Baixe ou leia a especificação “Java Code Conventions” do link abaixo: http://java.sun.com/docs/codeconv/ Leia (pelo menos) os capítulos 1-6, 8, 9 e 11.
Comentários de código O Compilador do JavaDoc, transforma os comentário do JAVADOC em Páginas HTML. Comentários de código
Comentário simples (uma linha) private int id; // identificador da Camisa Comentário para múltiplas linas /* Este comentário será finalizado apenas quando encontrar o caracter correspondente, podendo se estender por quantas linhas forem necessárias */ Comentário para documentação (javadoc) /** Classe que representa uma Camisa @author Fábio Kimura @since 02/08/2008 */ Mais informações sobre javadoc: http://java.sun.com/j2se/javadoc/writingdoccomments/index.html Comentários em Java
Exemplo de classe Java /** *  * @author Fabio Kimura * Classe de teste para exemplificar o uso de Javadoc * */ public class Camisa { /** identificador da camisa */ public int id = 0;  /** informações sobre a Camisa */ public String descricao = “vazia”;  /**  * código da cor da camisa. * Os códigos são: V=Vermelha, A=Azul, B=Branca, N=Não definida */ public char codigoCor = ‘N’; /** preço em reais */ public double preco = 0.0;  /** quantidade de camisas no estoque */ public int quantidadeEmEstoque = 0;  ...
Exemplo de classe Java (continuação) /** *  Mostra os dados da Camisa */  public void mostrarDados() { System.out.println(“Identificador: “ + id); System.out.println(“Descrição:” + descricao); System.out.println(“Código da cor: “ + codigoCor); System.out.println(“Preço: “ + preco); System.out.println(“Quantidade em estoque: “ + quantidadeEmEstoque); } }
JavaBeans são componentes reutilizáveis de software. Para uma classe ser considerada JavaBean deve seguir diversas convenções, como possuir um construtor vazio e implementar a interface Serializable. Algumas dessas convenções são aproveitadas em classes comuns (POJO) para encapsulamento, por exemplo (getters & setters). Mais informações sobre JavaBeans: http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html Padrão JavaBean
Encapsulamento Definição:  “Disponibilizar uma interface pública para manipular os estados e executar as operações de um objeto.” Criando classes Java Aplicando Encapsulamento
Encapsulamento Vemos que todos os atributos estão marcados como  public  e não há métodos definidos para acessar os atributos e estados.  public class Conta {   public int numero; public double saldo; public double juros; public java.util.Date vencimento; }   Conta contaBanco = new Conta(); contaBanco.numero = 1; contaBanco.saldo = 100; contaBanco.juros = 0.089;   Criando classes Java
Encapsulamento Neste módulo veremos  private e public Criando classes Java A orientação a objetos possui um conjunto de modificadores de acesso a membros de classe que permite um controle apurado do acesso aos seus membros.
Encapsulamento Aplicando o encapsulamento, temos: para cada atributo que pode ser consultado criamos um método  getNomeAtributo()  (tecnicamente chamando de  accessor method);   para cada atributo que pode ser alterado, criamos um método  setNomeAtributo()  (tecnicamente chamando de  mutator method );  para os métodos que executam operações ou funções dos objetos, damos um nome que corresponde aquela função ou operação, facilitando seu entendimento. (tecnicamente chamando de  worker method );  Criando classes Java
Encapsulamento public class Conta {   .. private int numero; .. //accessor methods public int getNumero() { return juros; }   public void setNumero(int num) { numero = num; }   .. } Conta contaBanco = new Conta(); ... contaBanco.setNumero(1); ... os atributos estão marcados como  private  e todos o métodos como  public , esta é a forma de fornecer o encapsulamento em Java.  Criando classes Java
Variáveis em Java Declarando variáveis em Java: •  Sintaxe (atributo ou variável de instância): [ modificadores ]  tipo   identificador  [=  valor ]; Exemplo: private double preço = 0.0; •  Sintaxe (variáveis locais): tipo   identificador  [=  valor ]; Exemplo: int idade = 30; •   Declarando e inicializando diversas variáveis em uma única linha de código: tipo   identificador  [=  valor ] [ , identificador [= valor]]; Exemplos: double preço = 0.0, preçoTotal = 0.0; int a, b=1, c=2, d;
Variáveis em Java Dentro de um bloco, podemos declarar e utilizar variáveis locais, e utilizar variáveis de instância. public class Teste { private int atributo; public static void main(String[] args) { // declaração int idade;  // atribuição: idade = 32; atributo = 20; System.out.println(idade); // declaração com atribuição: Pessoa pedro = new Pessoa(); ... } }
Variáveis Variáveis em Java podem ser de 2 tipos:  Variável de Tipo Primitivo. Variável de Referência.
Tipos Primitivos O que são tipos primitivos? São tipos sem classe alguma.
Java Tipos primitivos não são referências para objetos. Tipos primitivos armazenam dados simples em memória: •  Números inteiros:  byte, short, int, long ;  •  Números ponto flutuante:  float, double ;  •  Caractere:  char ;  •  Booleano (Verdadeiro ou Falso):  boolean ; Primitive tech support
Java * padrão para execução de cálculos pela JVM Mais informações em: http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html true ou false Dependente de JVM boolean - 64 bits IEEE 754 double* - 32 bits IEEE 754 float -2 63  até 2 63  - 1 64 bits long -2 31  até 2 31  - 1  32 bits int* 0 até 2 16  - 1 16 bits char -2 15  até 2 15  - 1 16 bits short -2 7  até 2 7  - 1 8 bits byte Range de Valores Precisão Tipo
Tipos Primitivos - Promotion O conteúdo de uma variável pode ser transferido para outra de um tipo diferente, desde que esse tipo tenha uma “capacidade” maior: short s = 10; int i = s; Isto é chamado de “Promoção” ou “Promotion”. E quando o tipo tem uma capacidade menor? s = i;     Isso funciona?
Tipos Primitivos - Casting Se uma variável tiver capacidade maior que a outra, o conteúdo dela só poderá ser transferido se você “forçar” a transferência, pois “vazamentos” podem ocorrer. Isto é chamado de “casting” ou “moldagem”. long l = 10; int l = (int) l; O “casting” é necessário para informar ao compilador: “Eu sei que vazamentos podem ocorrer, mas acredite, eu sei o que estou fazendo!”.
Tipos Primitivos - Casting Quando é feito o “casting”, se o conteúdo que uma variável estiver recebendo for maior do que o tipo dela, a JVM irá “truncar” os bits: int i = 128; b = (byte) i; System. out .println(“b=“+b); Saída do programa: b=-128 O que aconteceu?
Tipos Primitivos - Casting Cálculo em Java são feitos com  int  e  double.  Como assim? byte a = 1; byte b = 2; byte c = a + b;  System. out .println(“c=“+c); Saída do programa? Erro de compilação na linha 3! Por que? O resultado de a + b é um int e não um byte, portanto um “cast” é necessário. 3. byte b = (byte) a + b; Agora funciona? Por que?   Erro de compilação na linha 3! Ainda! 3. byte b = (byte) (a + b); Agora sim!
Tipos Primitivos - Casting Os cálculos envolvendo ponto flutuante são um pouco mais simples: float f = 1; float g = 3; float h = f/g;  System. out .println(“h=“+h); Saída do programa? h=0.33333334 float f = 1; double d = 3; float h = f + d;  System. out .println(“h=“+h); Saída do programa? Erro na linha 3: f + d resulta em double.
Tipos Primitivos - Literais Números são literais e também possuem tipo:  Sem ponto -> int  Com ponto -> double int i = 128;  128 é um int. byte a = 20;  20 é um int, mas o compilador sabe que 20 “cabe” em um byte. byte b = 128;  Erro de compilação! 128 não “cabe” em um byte sem “casting”. byte c = (byte) 128;  Ok! double d = 1.99;   1.99 é um double. float f = 1.99;  Erro! 1.99 é um double e não “cabe” em um float sem “casting”. I´ll have a double java.
Tipos Primitivos - Literais float g = 1.99F;  Ok! float h = 1.99f;  Ok! double d1 = 1.99d;  Redundante mas Ok! double d2 = 1.99D;  Redundante mas Ok! long l1 = 10L;  Redundante mas Ok. Todo int cabe em um long. long l2 = 10l;  Redundante mas Ok! char c = ‘A’; char unicodeChar=‘\u0065’; true  e  false  não são palavras reservadas, mas sim literais do tipo  boolean :  boolean isCrazy = false; boolean isJavaCool = true; boolean isWrong = 0; // ERRO DE COMPILAÇÃO!!!!!
Tipos Primitivos – Literais - extras int six = 06; // igual a 6 em decimal int eight = 010; // igual a 8 em decimal int um = 0X0001; int dez = 0x000A; // igual a 10 em decimal int quinze = 0x000f; // igual a 15 em decimal int z = 0xDeadCafe; // mais uma exceção case-insensitive long l = 0x000FL;
Exercícios Sem usar um compilador, qual a saída da linha 3? short s = 2; s = s + 3; System.out.println(s); Sem usar um compilador, qual a saída da linha 3? int a = 1; int b = a / 3; System.out.println(b); Sem usar um compilador, qual a saída da linha 3? long a = 2; int b = a - 1; System.out.println(b);
Tipos primitivos – Casting e Promotion Conversão dos tipos primitivos: Casting = Mudança de tipo para um tipo de menor precisão Promotion = Mudança de tipo para um tipo de maior precisão
Promoção Promoção automática: Quando se associa um tipo menor a um tipo maior; Quando se associa um tipo inteiro a um tipo de ponto flutuante; Exemplos: long big = 6; float float = big;
Tipos primitivos Tipos primitivos como atributos de objeto: public class Camisa { public int id; public String descricao; public char codigoCor; public double preco;  public int quantidadeEmEstoque; public void mostrarDados() {  } } + mostrarDados(): void + id: int + descricao: String + codigoCor:char + preço: double +quantidadeEmEstoque: int Camisa
Tipos de referência São variáveis que armazenam referências a  objetos . Facilitam a navegação e troca de mensagens entre os objetos de um sistema. Usamos os tipos de referência para podermos manipular facilmente os objetos em memória. Camisa minhaCamisa = new Camisa(); Operador  new  -> cria um novo objeto a partir de uma determinada classe.
Tipos de referência Tipos de referência como atributos de objeto: public class Conjunto { public int id; public double preco;  public Camisa camisa; public Terno terno; } Tipos Primitivos Tipos de Referência + id: int + preço: double + camisa: Camisa + terno: Terno Conjunto
Strings String são objetos ! public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** The offset is the first index of the storage that is used. */ private final int offset; /** The count is the number of characters in the String. */ private final int count;
Strings String possui literais ! String nome = “Fábio Kimura”; String greetings = “Hello World”; String possui operadores! String nome = “Fábio”; nome = nome + ‘ ‘; nome+= “Kimura”; System.out.println(“Olá, “ + nome);
Strings String é um objeto! String nula = null; String vazia = new String(); String greetings = new String(“Hello World”); System.out.println(greetings.substring(0,5)); System.out.println(“String é especial!”.substring(0,6));
Strings “ Fábio Kimura” “ Hello World” public static void main(String[] args { String nome = “Fábio Kimura”; System.out.println(“Hello World”); System.out.println(“Olá, ” + nome); } Java possui um pool de Strings para economia de memória “ Olá, ” Por isso se diz que em Java  Strings são imutáveis .
Strings “ Fábio Kimura” “ Hello World” public static void main(String[] args { String nome = “Fábio Kimura”; nome.toUpperCase(); System.out.println(nome); } Strings são imutáveis: “ Olá, ”
Vimos que a classe String, que pertence às classes padrão do Java, possui dois métodos, substring() e toUpperCase(). Será que a classe String possui mais métodos? Como vamos saber o que fazem? http://java.sun.com/javase/6/docs/api/ Aqui vemos o javadoc da API do Java SE 6. Procure a classe String e veja que métodos mais ela possui. Crie classes para testar alguns outros métodos. Você pode gerar o javadoc do seu projeto, com o comando  javadoc API JSE
Ocasionalmente precisamos que um tipo primitivo seja um objeto Para facilitar, todo tipo primitivo em Java possui sua contraparte Objeto.  Essas classes são chamadas de  Wrappers . Byte  Short  Character Integer Long Float Double Boolean Void Wrappers são imutáveis assim como a classe String. Wrappers
Variável x Atributo de Classe Variável: tipo declarado dentro de um bloco (dentro de um método por exemplo). Uma variável só existe dentro do bloco, ou seja, seu  escopo  se limita ao bloco. Atributo de classe: tipo declarado dentro da  classe . Um atributo pertencente a um objeto existe enquanto aquele objeto existir. public class Teste { int atributo = 0; public void testar() { atributo = 2; int variavel = 32; System.out.println(variavel); } // aqui a variável idade não existe mais }
Notação ponto (.) Utilizamos o operador ponto (.) para acessar atributos, métodos e outros membros de um objeto. Camisa minhaCamisa = new Camisa(); minhaCamisa.id=1; minhaCamisa.preco=49.99; minhaCamisa.mostrarDados(); minhaCamisa  -> referência para um objeto do tipo Camisa. minhaCamisa.preco  -> atributo  double preco  do objeto minhaCamisa. minhaCamisa.mostrarDados();  -> Invocação do método  mostrarDados()  do objeto minhaCamisa.
Valores padrão Variáveis devem sempre ser inicializadas antes do seu uso: public static void main(String[] args { int inteiro;  System.out.println(inteiro); // Erro de compilação! } public static void main(String[] args { int inteiro;  inteiro = 2; System.out.println(inteiro); // Ok! }
Valores padrão Atributos são inicializados automaticamente: public class Camisa { int id; public void mostrarInformacao() {  System.out.println(id); }
Endereçamento na JVM conjunto Memória “Heap” Conjunto conjunto; new Conjunto(); new Camisa(); conjunto.terno = new Terno(); conjunto.camisa = conjunto = conjunto.camisa = null; pilha
Dado que as linhas abaixo lêem dois inteiros digitados na linha de comando: Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); int b = scanner.nextInt(); Escreva um programa  Soma.java  que leia 3 inteiros da linha de comando e a seguir imprima o resultado da soma desses números.  Escreva outro programa  DivisaoInteiro.java  que leia 2 inteiros da linha de comando e a seguir imprima o resultado da divisão do primeiro pelo segundo. Escreva outro programa  DivisaoDouble.java  que leia 2 doubles da linha de comando e a seguir imprima o resultado da divisão do primeiro pelo segundo. Calcule a divisão de um número por zero, utilizando  DivisãoInteiro.java  e  DivisãoDouble.java . Analise os resultados. Você deve entregar: 3 códigos fonte (Soma, DivisaoInteiro e DivisaoDouble), e pelo menos um parágrafo descrevendo os resultados do exercício 4. Identação, clareza e aderência ao Padrão de Codificação Java serão avaliadas. Exercícios em casa (entregar até 16/08/2008)

Aula2

  • 1.
    Programação Orientada aObjetos com Java Aula 2 professor: Fábio Kimura e-mail: fkimura@yahoo.com
  • 2.
    Agenda • Padrão de Codificação Java • Variáveis em Java • Tipos Primitivos • Tipos de Referência • Expressões e Operadores • Exercícios • Trabalho valendo nota
  • 3.
    Importância do Padrãode Codificação Por que usar um padrão de codificação? class input { class output {}public static void main(String call [ ]){;input. integer(call,input.class. getName (),0);}; static void integer(String []Number, String end ,int Null) {; char Void=58; for (String Virtual:Number)Virtual+= Null++; System. out. println(end+Void+Null);}}
  • 4.
    Importância do Padrãode Codificação Por que usar um padrão de codificação? 80% do custo total (lifetime cost) de um software vai para manutenção. Raramente um software é mantido sempre pelo autor original. Aumentam a legibilidade de um software, permitindo aos programadores entender códigos pré-escritos mais fácil e rapidamente. Por que usar o Padrão de Codificação Java? Definido pela Sun em 1996 e publicado em “The Java Language Specification”. Utilizado desde então pela maioria das grandes empresas.
  • 5.
    Importância de “CodeConventions” Exemplos da especificação “Java Code Conventions” • Nomes de classes devem ser substantivos, com cada nome começando com maiúscula e o resto em minúsculas Exemplos: MinhaClasse, Conta, ContaEspecial • Atributos e variáveis devem começar com minúsculas, com cada palavra interna iniciando com maiúscula. Exemplos: meuAtributo, minhaVariavel, cliente • Métodos devem ser verbos, com cada palavra interna começando com maiúscula. Exemplos: abrirConta, alterarNome, testar
  • 6.
    Tarefa para casaBaixe ou leia a especificação “Java Code Conventions” do link abaixo: http://java.sun.com/docs/codeconv/ Leia (pelo menos) os capítulos 1-6, 8, 9 e 11.
  • 7.
    Comentários de códigoO Compilador do JavaDoc, transforma os comentário do JAVADOC em Páginas HTML. Comentários de código
  • 8.
    Comentário simples (umalinha) private int id; // identificador da Camisa Comentário para múltiplas linas /* Este comentário será finalizado apenas quando encontrar o caracter correspondente, podendo se estender por quantas linhas forem necessárias */ Comentário para documentação (javadoc) /** Classe que representa uma Camisa @author Fábio Kimura @since 02/08/2008 */ Mais informações sobre javadoc: http://java.sun.com/j2se/javadoc/writingdoccomments/index.html Comentários em Java
  • 9.
    Exemplo de classeJava /** * * @author Fabio Kimura * Classe de teste para exemplificar o uso de Javadoc * */ public class Camisa { /** identificador da camisa */ public int id = 0; /** informações sobre a Camisa */ public String descricao = “vazia”; /** * código da cor da camisa. * Os códigos são: V=Vermelha, A=Azul, B=Branca, N=Não definida */ public char codigoCor = ‘N’; /** preço em reais */ public double preco = 0.0; /** quantidade de camisas no estoque */ public int quantidadeEmEstoque = 0; ...
  • 10.
    Exemplo de classeJava (continuação) /** * Mostra os dados da Camisa */ public void mostrarDados() { System.out.println(“Identificador: “ + id); System.out.println(“Descrição:” + descricao); System.out.println(“Código da cor: “ + codigoCor); System.out.println(“Preço: “ + preco); System.out.println(“Quantidade em estoque: “ + quantidadeEmEstoque); } }
  • 11.
    JavaBeans são componentesreutilizáveis de software. Para uma classe ser considerada JavaBean deve seguir diversas convenções, como possuir um construtor vazio e implementar a interface Serializable. Algumas dessas convenções são aproveitadas em classes comuns (POJO) para encapsulamento, por exemplo (getters & setters). Mais informações sobre JavaBeans: http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html Padrão JavaBean
  • 12.
    Encapsulamento Definição: “Disponibilizar uma interface pública para manipular os estados e executar as operações de um objeto.” Criando classes Java Aplicando Encapsulamento
  • 13.
    Encapsulamento Vemos quetodos os atributos estão marcados como public e não há métodos definidos para acessar os atributos e estados. public class Conta {   public int numero; public double saldo; public double juros; public java.util.Date vencimento; } Conta contaBanco = new Conta(); contaBanco.numero = 1; contaBanco.saldo = 100; contaBanco.juros = 0.089; Criando classes Java
  • 14.
    Encapsulamento Neste móduloveremos private e public Criando classes Java A orientação a objetos possui um conjunto de modificadores de acesso a membros de classe que permite um controle apurado do acesso aos seus membros.
  • 15.
    Encapsulamento Aplicando oencapsulamento, temos: para cada atributo que pode ser consultado criamos um método getNomeAtributo() (tecnicamente chamando de accessor method);   para cada atributo que pode ser alterado, criamos um método setNomeAtributo() (tecnicamente chamando de mutator method );  para os métodos que executam operações ou funções dos objetos, damos um nome que corresponde aquela função ou operação, facilitando seu entendimento. (tecnicamente chamando de worker method );  Criando classes Java
  • 16.
    Encapsulamento public classConta {   .. private int numero; .. //accessor methods public int getNumero() { return juros; }   public void setNumero(int num) { numero = num; } .. } Conta contaBanco = new Conta(); ... contaBanco.setNumero(1); ... os atributos estão marcados como private e todos o métodos como public , esta é a forma de fornecer o encapsulamento em Java. Criando classes Java
  • 17.
    Variáveis em JavaDeclarando variáveis em Java: • Sintaxe (atributo ou variável de instância): [ modificadores ] tipo identificador [= valor ]; Exemplo: private double preço = 0.0; • Sintaxe (variáveis locais): tipo identificador [= valor ]; Exemplo: int idade = 30; • Declarando e inicializando diversas variáveis em uma única linha de código: tipo identificador [= valor ] [ , identificador [= valor]]; Exemplos: double preço = 0.0, preçoTotal = 0.0; int a, b=1, c=2, d;
  • 18.
    Variáveis em JavaDentro de um bloco, podemos declarar e utilizar variáveis locais, e utilizar variáveis de instância. public class Teste { private int atributo; public static void main(String[] args) { // declaração int idade; // atribuição: idade = 32; atributo = 20; System.out.println(idade); // declaração com atribuição: Pessoa pedro = new Pessoa(); ... } }
  • 19.
    Variáveis Variáveis emJava podem ser de 2 tipos: Variável de Tipo Primitivo. Variável de Referência.
  • 20.
    Tipos Primitivos Oque são tipos primitivos? São tipos sem classe alguma.
  • 21.
    Java Tipos primitivosnão são referências para objetos. Tipos primitivos armazenam dados simples em memória: • Números inteiros: byte, short, int, long ; • Números ponto flutuante: float, double ; • Caractere: char ; • Booleano (Verdadeiro ou Falso): boolean ; Primitive tech support
  • 22.
    Java * padrãopara execução de cálculos pela JVM Mais informações em: http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html true ou false Dependente de JVM boolean - 64 bits IEEE 754 double* - 32 bits IEEE 754 float -2 63 até 2 63 - 1 64 bits long -2 31 até 2 31 - 1 32 bits int* 0 até 2 16 - 1 16 bits char -2 15 até 2 15 - 1 16 bits short -2 7 até 2 7 - 1 8 bits byte Range de Valores Precisão Tipo
  • 23.
    Tipos Primitivos -Promotion O conteúdo de uma variável pode ser transferido para outra de um tipo diferente, desde que esse tipo tenha uma “capacidade” maior: short s = 10; int i = s; Isto é chamado de “Promoção” ou “Promotion”. E quando o tipo tem uma capacidade menor? s = i; Isso funciona?
  • 24.
    Tipos Primitivos -Casting Se uma variável tiver capacidade maior que a outra, o conteúdo dela só poderá ser transferido se você “forçar” a transferência, pois “vazamentos” podem ocorrer. Isto é chamado de “casting” ou “moldagem”. long l = 10; int l = (int) l; O “casting” é necessário para informar ao compilador: “Eu sei que vazamentos podem ocorrer, mas acredite, eu sei o que estou fazendo!”.
  • 25.
    Tipos Primitivos -Casting Quando é feito o “casting”, se o conteúdo que uma variável estiver recebendo for maior do que o tipo dela, a JVM irá “truncar” os bits: int i = 128; b = (byte) i; System. out .println(“b=“+b); Saída do programa: b=-128 O que aconteceu?
  • 26.
    Tipos Primitivos -Casting Cálculo em Java são feitos com int e double. Como assim? byte a = 1; byte b = 2; byte c = a + b; System. out .println(“c=“+c); Saída do programa? Erro de compilação na linha 3! Por que? O resultado de a + b é um int e não um byte, portanto um “cast” é necessário. 3. byte b = (byte) a + b; Agora funciona? Por que? Erro de compilação na linha 3! Ainda! 3. byte b = (byte) (a + b); Agora sim!
  • 27.
    Tipos Primitivos -Casting Os cálculos envolvendo ponto flutuante são um pouco mais simples: float f = 1; float g = 3; float h = f/g; System. out .println(“h=“+h); Saída do programa? h=0.33333334 float f = 1; double d = 3; float h = f + d; System. out .println(“h=“+h); Saída do programa? Erro na linha 3: f + d resulta em double.
  • 28.
    Tipos Primitivos -Literais Números são literais e também possuem tipo: Sem ponto -> int Com ponto -> double int i = 128; 128 é um int. byte a = 20; 20 é um int, mas o compilador sabe que 20 “cabe” em um byte. byte b = 128; Erro de compilação! 128 não “cabe” em um byte sem “casting”. byte c = (byte) 128; Ok! double d = 1.99; 1.99 é um double. float f = 1.99; Erro! 1.99 é um double e não “cabe” em um float sem “casting”. I´ll have a double java.
  • 29.
    Tipos Primitivos -Literais float g = 1.99F; Ok! float h = 1.99f; Ok! double d1 = 1.99d; Redundante mas Ok! double d2 = 1.99D; Redundante mas Ok! long l1 = 10L; Redundante mas Ok. Todo int cabe em um long. long l2 = 10l; Redundante mas Ok! char c = ‘A’; char unicodeChar=‘\u0065’; true e false não são palavras reservadas, mas sim literais do tipo boolean : boolean isCrazy = false; boolean isJavaCool = true; boolean isWrong = 0; // ERRO DE COMPILAÇÃO!!!!!
  • 30.
    Tipos Primitivos –Literais - extras int six = 06; // igual a 6 em decimal int eight = 010; // igual a 8 em decimal int um = 0X0001; int dez = 0x000A; // igual a 10 em decimal int quinze = 0x000f; // igual a 15 em decimal int z = 0xDeadCafe; // mais uma exceção case-insensitive long l = 0x000FL;
  • 31.
    Exercícios Sem usarum compilador, qual a saída da linha 3? short s = 2; s = s + 3; System.out.println(s); Sem usar um compilador, qual a saída da linha 3? int a = 1; int b = a / 3; System.out.println(b); Sem usar um compilador, qual a saída da linha 3? long a = 2; int b = a - 1; System.out.println(b);
  • 32.
    Tipos primitivos –Casting e Promotion Conversão dos tipos primitivos: Casting = Mudança de tipo para um tipo de menor precisão Promotion = Mudança de tipo para um tipo de maior precisão
  • 33.
    Promoção Promoção automática:Quando se associa um tipo menor a um tipo maior; Quando se associa um tipo inteiro a um tipo de ponto flutuante; Exemplos: long big = 6; float float = big;
  • 34.
    Tipos primitivos Tiposprimitivos como atributos de objeto: public class Camisa { public int id; public String descricao; public char codigoCor; public double preco; public int quantidadeEmEstoque; public void mostrarDados() { } } + mostrarDados(): void + id: int + descricao: String + codigoCor:char + preço: double +quantidadeEmEstoque: int Camisa
  • 35.
    Tipos de referênciaSão variáveis que armazenam referências a objetos . Facilitam a navegação e troca de mensagens entre os objetos de um sistema. Usamos os tipos de referência para podermos manipular facilmente os objetos em memória. Camisa minhaCamisa = new Camisa(); Operador new -> cria um novo objeto a partir de uma determinada classe.
  • 36.
    Tipos de referênciaTipos de referência como atributos de objeto: public class Conjunto { public int id; public double preco; public Camisa camisa; public Terno terno; } Tipos Primitivos Tipos de Referência + id: int + preço: double + camisa: Camisa + terno: Terno Conjunto
  • 37.
    Strings String sãoobjetos ! public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** The offset is the first index of the storage that is used. */ private final int offset; /** The count is the number of characters in the String. */ private final int count;
  • 38.
    Strings String possuiliterais ! String nome = “Fábio Kimura”; String greetings = “Hello World”; String possui operadores! String nome = “Fábio”; nome = nome + ‘ ‘; nome+= “Kimura”; System.out.println(“Olá, “ + nome);
  • 39.
    Strings String éum objeto! String nula = null; String vazia = new String(); String greetings = new String(“Hello World”); System.out.println(greetings.substring(0,5)); System.out.println(“String é especial!”.substring(0,6));
  • 40.
    Strings “ FábioKimura” “ Hello World” public static void main(String[] args { String nome = “Fábio Kimura”; System.out.println(“Hello World”); System.out.println(“Olá, ” + nome); } Java possui um pool de Strings para economia de memória “ Olá, ” Por isso se diz que em Java Strings são imutáveis .
  • 41.
    Strings “ FábioKimura” “ Hello World” public static void main(String[] args { String nome = “Fábio Kimura”; nome.toUpperCase(); System.out.println(nome); } Strings são imutáveis: “ Olá, ”
  • 42.
    Vimos que aclasse String, que pertence às classes padrão do Java, possui dois métodos, substring() e toUpperCase(). Será que a classe String possui mais métodos? Como vamos saber o que fazem? http://java.sun.com/javase/6/docs/api/ Aqui vemos o javadoc da API do Java SE 6. Procure a classe String e veja que métodos mais ela possui. Crie classes para testar alguns outros métodos. Você pode gerar o javadoc do seu projeto, com o comando javadoc API JSE
  • 43.
    Ocasionalmente precisamos queum tipo primitivo seja um objeto Para facilitar, todo tipo primitivo em Java possui sua contraparte Objeto. Essas classes são chamadas de Wrappers . Byte Short Character Integer Long Float Double Boolean Void Wrappers são imutáveis assim como a classe String. Wrappers
  • 44.
    Variável x Atributode Classe Variável: tipo declarado dentro de um bloco (dentro de um método por exemplo). Uma variável só existe dentro do bloco, ou seja, seu escopo se limita ao bloco. Atributo de classe: tipo declarado dentro da classe . Um atributo pertencente a um objeto existe enquanto aquele objeto existir. public class Teste { int atributo = 0; public void testar() { atributo = 2; int variavel = 32; System.out.println(variavel); } // aqui a variável idade não existe mais }
  • 45.
    Notação ponto (.)Utilizamos o operador ponto (.) para acessar atributos, métodos e outros membros de um objeto. Camisa minhaCamisa = new Camisa(); minhaCamisa.id=1; minhaCamisa.preco=49.99; minhaCamisa.mostrarDados(); minhaCamisa -> referência para um objeto do tipo Camisa. minhaCamisa.preco -> atributo double preco do objeto minhaCamisa. minhaCamisa.mostrarDados(); -> Invocação do método mostrarDados() do objeto minhaCamisa.
  • 46.
    Valores padrão Variáveisdevem sempre ser inicializadas antes do seu uso: public static void main(String[] args { int inteiro; System.out.println(inteiro); // Erro de compilação! } public static void main(String[] args { int inteiro; inteiro = 2; System.out.println(inteiro); // Ok! }
  • 47.
    Valores padrão Atributossão inicializados automaticamente: public class Camisa { int id; public void mostrarInformacao() { System.out.println(id); }
  • 48.
    Endereçamento na JVMconjunto Memória “Heap” Conjunto conjunto; new Conjunto(); new Camisa(); conjunto.terno = new Terno(); conjunto.camisa = conjunto = conjunto.camisa = null; pilha
  • 49.
    Dado que aslinhas abaixo lêem dois inteiros digitados na linha de comando: Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); int b = scanner.nextInt(); Escreva um programa Soma.java que leia 3 inteiros da linha de comando e a seguir imprima o resultado da soma desses números. Escreva outro programa DivisaoInteiro.java que leia 2 inteiros da linha de comando e a seguir imprima o resultado da divisão do primeiro pelo segundo. Escreva outro programa DivisaoDouble.java que leia 2 doubles da linha de comando e a seguir imprima o resultado da divisão do primeiro pelo segundo. Calcule a divisão de um número por zero, utilizando DivisãoInteiro.java e DivisãoDouble.java . Analise os resultados. Você deve entregar: 3 códigos fonte (Soma, DivisaoInteiro e DivisaoDouble), e pelo menos um parágrafo descrevendo os resultados do exercício 4. Identação, clareza e aderência ao Padrão de Codificação Java serão avaliadas. Exercícios em casa (entregar até 16/08/2008)