A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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,

Apresentações semelhantes


Apresentação em tema: "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,"— Transcrição da apresentação:

1 Certificação Marco Antonio

2 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.

3 Atribuição A forma mais elementar de se atribuir um valor a uma variável é: int x = 0;

4 Atribuições byte x = 19; // ok byte y = x; // ok byte z = x + y; // deveria aceitar, mas necessita de uma conversão explícita.

5 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.

6 Atribuição de primitivos byte a = 19; byte a = (byte)19; byte b = 128; // Não é possível sem uma conversão explícita byte c = (byte)128; // Ok

7 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?

8 Atribuição de objetos class 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. }

9 Questão Qual das linhas anteriores estão incorretas e não permitiriam que o programa fosse compilado ? a) 1, 3 b) 2, 3 c) 5 d) 6 e) o código será compilado

10 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!!

11 Classes public 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; }

12 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.

13 Classes public 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; }

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

15 Classes public 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; }

16 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.

17 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);

18 Operador instanceof Operador binário (dois operandos) que é utilizado para saber se um objeto é instância de uma classe.

19 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"); }

20 Classe public 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"); }

21 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.

22 Classes public 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"); }

23 Resultado a é membro de Acao v é membro de Acao

24 Arrays Um array de primitivos (1,2,3,4) é, antes de qualquer coisa, um objeto.

25 Arrays public 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.

26 Resultado Qual o resultado do instanceof?

27 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 }

28 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á?

29 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; }

30 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:

31 Classes public 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; }

32 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.

33 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.

34 Operadores Unários: -- ++ Binários: + - / * % int x = 10 + 10; int y = 10 / 0; // Uma exceção será lançada ! java.lang.ArithmeticException

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

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

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

38 Resultado E agora, o que acontece?

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

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

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

42 E agora? Resultado: –Salario: NaN (atenha-se a saber o que resulta e não o porquê)

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

44 Pré-fixado int x = 10; System.out.println("x é "+(++x));

45 Pós-fixado int x = 9; System.out.println("x vale: "+x--); System.out.println("o valor final de x é "+x);


Carregar ppt "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,"

Apresentações semelhantes


Anúncios Google