certificação marco antonio. introdução a compreensão desse capítulo é muito importante pois...

45
Certificação Marco Antonio

Upload: luiza-fagundes

Post on 07-Apr-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

CertificaçãoMarco Antonio

Page 2: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Introdução• A compreensão desse capítulo é muito importante

pois trata de um assunto essencial em qualquer linguagem de programação, as diversas formas de se atribuir e manipular valores de uma variável.

• Além de ser um dos elementos fundamentais de uma linguagem de programação, as variáveis tem um papel importante na geração de programas e suas peculiaridades serão abordadas nesse capítulo.

Page 3: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Atribuição• A forma mais elementar de se atribuir um

valor a uma variável é:

int x = 0;

Page 4: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Atribuições• byte x = 19; // ok

byte y = x; // okbyte z = x + y; // deveria aceitar, mas necessita de uma conversão explícita.

Page 5: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Objetos• Button b = new Button(); • O que b armazena? • Um objeto do tipo Button? • b armazena um conjunto de bits usados para

acessar (referenciar) o objeto na memória. • Portanto, podemos dizer a rigor que b não é um

objeto do tipo Button e sim uma forma (através de uma sequência de bits) usada para acessar esse objeto na memória.

Page 6: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Atribuição de primitivos• byte a = 19; byte a = (byte)19;

byte b = 128; // Não é possível sem uma conversão explícitabyte c = (byte)128; // Ok

Page 7: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Atribuições• O valor 128 não pode ser atribuído à

variável b por ultrapassar a capacidade em bits do tipo byte - uma conversão se faz necessária.

• Mas devemos ressaltar um acontecimento muito interessante nesse caso. Qual o valor da variável c da atribuição anterior?

Page 8: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Atribuição de objetosclass Carro {     public double preco = 0;  }    class Audi extends Carro { }    1. public class Teste {  2. public static void main(String[] args) {  3. Carro a = new Carro();  4. Audi b = new Audi();  5. Carro c = new Audi();  6. Audi d = new Carro();        7. }  8. }  

Page 9: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Questão• Qual das linhas anteriores estão incorretas e

não permitiriam que o programa fosse compilado ?a) 1, 3b) 2, 3c) 5d) 6e) o código será compilado

Page 10: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Passagem de valores primitivos• Existe muita discussão quando o assunto é

a forma como a Java passa um variável (primitiva ou referência) para um método.

• Quando uma variável é passada para um método, SEMPRE será passado um cópia dos seus bits!!

Page 11: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Classespublic class Teste {  public static void main(String[] args) {  byte x = 10;  System.out.println("X antes: "+x);  altera(x);  System.out.println("X depois: "+x);  }  public static void altera(byte a) {  a = 2;  }  }  

Page 12: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Passando referências• Uma variável de referência nada mais é que

um repositório de bits que representam um forma de se acessar um objeto na memória.

• A variável é uma coisa o objeto que está na memória é outra.

Page 13: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Classespublic class Teste {  public static void main(String[] args) {  Carro c = new Carro();  c.preco = 13990.00;  System.out.println("preço antes: "+c.preco);  anula(c);  System.out.println("preço depois: "+c.preco);  }  public static void anula(Carro p) {  p = null;  }  }  

Page 14: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Resultado• preço antes: 13990.0• preço depois: 13990.0 • A cópia da referência do objeto não se

altera.

Page 15: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Classespublic class Teste {  public static void main(String[] args) {  Carro c = new Carro();  c.preco = 13990.00;  System.out.println("preço antes: "+c.preco);  aumento(c);  System.out.println("preço depois: "+c.preco);  }  public static void aumento(Carro p) {  p.preco = p.preco * 2;  }     }  

Page 16: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Resultado• preço antes: 13990.0 • Preço depois: ?• O valor alterado, mesmo na cópia da

referência, altera o valor do objeto principal.

Page 17: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Operador Condicional • O operador condicional é um operador

ternário, ou seja, três operandos e deve ser usado quando se necessita realizar uma condição em uma única linha.

• Veja o código abaixo:int tamanho = 19;String texto = (tamanho>=10)?"Maior ou igual a 10":"Menor que 10";System.out.println(texto);

Page 18: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Operador instanceof• Operador binário (dois operandos) que é

utilizado para saber se um objeto é instância de uma classe.

Page 19: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Código• String nome = "kuesley";

if (nome instanceof String) {System.out.println("nome é do tipo String");} else {System.out.println("nome não é do tipo String");}

Page 20: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Classepublic class Veiculo { }    public class Audi extends Veiculo { }    public class Teste {   public static void main(String[] args) {  Audi a = new Audi();  Veiculo v = new Veiculo();  if (a instanceof Audi) System.out.println("a é do tipo Audi");  if (v instanceof Veiculo) System.out.println("v é do tipo Veiculo");  if (v instanceof Audi) System.out.println("v é do tipo Audi");  if (a instanceof Veiculo) System.out.println("a é do tipo Veículo");        }  }  

Page 21: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

• a é do tipo Audi // a que é instância da classe Audi é membro de Audi

• v é do tipo Veiculo // v que é instância da classe Veiculo é membro de Veiculo

• a é do tipo Veiculo // a que é uma instância da classe Audi é membro de veículo, pois a classe Audi é uma sub-classe de Veiculo.

Page 22: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Classespublic interface Acao { }  public class Veiculo implements Acao { }  public class Audi extends Veiculo { }  public class Moto { }    public class Teste {   public static void main(String[] args) {  Audi a = new Audi();  Veiculo v = new Veiculo();  Moto m = new Moto();  if (a instanceof Acao) System.out.println("a é membro de Acao");  if (v instanceof Acao) System.out.println("v é membro de Acao");  if (m instanceof Acao) System.out.println("m é membro de Acao");  }  }  

Page 23: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Resultado• a é membro de Acao• v é membro de Acao

Page 24: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Arrays• Um array de primitivos (1,2,3,4) é, antes de

qualquer coisa, um objeto.

Page 25: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Arrayspublic class Teste {  public static void main(String[] args) {  boolean c = (new int[] { 1,2,3 } instanceof Object);  System.out.println(c);  }  } 

• Aqui temos um array anônimo, conforme visto anteriormente.

Page 26: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Resultado• Qual o resultado do instanceof?

Page 27: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Classes class Veiculo { }  class Audi extends Veiculo { }    public class Teste {  public static void main(String[] args) {  Audi a = new Audi();  Veiculo v = new Veiculo();  boolean b1 = (a instanceof Audi);   // ok - b1  é true  boolean b2 = (a instanceof Veiculo);   // ok - b2  é true  boolean b3 = (v instanceof Audi);   // ok - b3 é false  boolean b4 = (a instanceof String);   // erro de compilação  }  } 

Page 28: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Sombreamento de variáveis• Uma área interessante da Java é a forma

como trata os sobreamentos de variáveis.• Pense em uma classe com um membro

inteiro chamado tamanho, imagine ainda que você crie um método e internamente você também crie um variável local chamada tamanho, o que acontecerá?

Page 29: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Classes public class Teste {  static int tamanho = 0;  public static void main(String[] args) {  tamanho = 9;  System.out.println("Antes: "+tamanho);  crescer(2);  System.out.println("Depois: "+tamanho);  }  public static void crescer(int tamanho) {  tamanho = tamanho + 1;  }  }  

Page 30: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Resultado• A variável tamanho dentro do escopo do

método que está sendo usada, não é a mesma declarada como membro da classe.

• Agora se alterarmos um pouco o código como segue teremos um resultado diferente:

Page 31: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Classespublic class Teste {  int tamanho = 0;  public static void main(String[] args) {  Teste t = new Teste();  t.tamanho = 9;  System.out.println("Antes: "+t.tamanho);  t.crescer(2);  System.out.println("Depois: "+t.tamanho);  }  public void crescer(int tamanho) {  this.tamanho = tamanho + 1;  }  }  

Page 32: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Observação• Você não pode colocar a palavra this no

método crescer, porque uma variável static nunca poderá ser referenciado por um contexto não-estático, e a palavra this quer dizer que é de um objeto.

Page 33: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Operadores matemáticos• Uma observação que é importante ser

ressaltada é que toda operação envolvendo números inteiros resultarão em um tipo int, mesmo sendo byte * short, ou byte / int.

• Como você sabe, não é possível realizar divisão por zero para números inteiros, mas em número de pontos flutuantes isso é possível podendo retornar um 0 positivo ou um 0 negativo.

Page 34: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Operadores • Unários: -- ++

Binários: + - / * %

int x = 10 + 10; int y = 10 / 0; // Uma exceção será lançada ! java.lang.ArithmeticException

Page 35: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Divisão por zeropublic class Teste {  public static void main(String[] args) {  double sal = 140 / 0;  System.out.println("Salario: "+sal);  }  }  

Page 36: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Atenção• Qual o resultado?• Anote a exceção.

Page 37: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Classepublic class Teste {  public static void main(String[] args) {  double d = 140;double sal = d / 0;  System.out.println("Salario: "+sal);  }  }  

Page 38: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Resultado• E agora, o que acontece?

Page 39: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Classepublic class Teste {  public static void main(String[] args) {  double sal = -140.0 / 0;  System.out.println("Salario: "+sal);  }  }  

Page 40: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Qual o resultado?• Viu as diferenças entre as classes?

Page 41: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Classepublic class Teste {  public static void main(String[] args) {  double sal = -0.0 / 0;  System.out.println("Salario: "+sal);  }  }  

Page 42: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

E agora?• Resultado:

– Salario: NaN (atenha-se a saber o que resulta e não o porquê)

Page 43: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Incremento e decremento• Atenção aos operadores unários.

Page 44: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Pré-fixado• int x = 10;

System.out.println("x é "+(++x));

Page 45: Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,

Pós-fixado• int x = 9;

System.out.println("x vale: "+x--);System.out.println("o valor final de x é "+x);