Tag: Inicialização
Programação avançada – capitulo 3
Objetos
A palavra new permite criar novos objetos
Os delimitadores dos { } permitem define o scope dos objetos
Em java existe o Garbage collector, que detecta todos os objetos que foram criados por new e que já não são referenciados em memória, libertanto desta forma o espaço em memória correspondente (esta dinâmica não existe noutras linguagens como em C, ou o destrutor em C++)
Um classe é constituída por:
membros variáveis (do tipo primitivos ou referências para objetos) Para se usar os membros de um determinado objeto faz-se uso do . (ponto final)
por métodos (podem existir métodos com o mesmo nome na mesma classe, são os métodos overloaded )
por um ou mais construtores (é a forma de garantir a inicialização de todos os objetos de uma classe, e o construtor não pode ser chamado por um seu método)
package e08; class Texto{ String palavras; int numero_paginas; Texto(){ palavras = "vazio"; numero_paginas = 0; } Texto(String p, int n_p){ palavras = p; numero_paginas = n_p; } boolean valida(int n_p){ if(n_p <=0){ return false; } return true; } } public class e08 { public static void main(String args[]) { System.out.println("\n O uso de classes"); Texto t1 = new Texto(); System.out.println("\n construtor por defeito: " + t1.numero_paginas + " - " + t1.palavras); Texto t2 = new Texto("pedro", 100); System.out.println("\n construtor overloaded: " + t2.numero_paginas + " - " + t2.palavras); } }
A palavra chave this:
Permite aceder a uma variável ou a um método do próprio objeto
o this também pode ser usado dentro de um construtor, o this faz uma chamada explicita ao construtor (com ou sem argumentos)
um construtor pode então desta forma ser chamado a partir de outro construtor
package e09; class Texto{ String palavras; int numero_paginas; Texto(){ this("vazio", 100); } Texto(String p, int n_p){ palavras = p; numero_paginas = n_p; } boolean valida(int n_p){ if(n_p <=0){ return false; } return true; } } public class e09 { public static void main(String args[]) { System.out.println("\n O uso da referência especial this"); Texto t1 = new Texto(); System.out.println("\n construtor por defeito: " + t1.numero_paginas + " - " + t1.palavras + " - " + t1.valida(t1.numero_paginas)); } }
São membros static:
Aquelas variáveis ou os membros que não estão ligados a qualquer objeto em particular
Só existe uma versão de um membro variável estático, partilhada por todos os objetos
Antes de se criar um objeto, podemos executar o método static ou aceder a qualquer variável static
Os métodos static, não têm a referência a this
Não se pode aceder directamente a variáveis ou métodos não estáticos (pois eles estão sempre ligados a um objeto em particular, e assim só se pode aceder a membros não estáticos se for invocado a partir de um objeto)
package e10; class Texto { String palavras; static int numero_paginas = -1; Texto() { this("vazio", 100); } Texto(String p, int n_p) { palavras = p; numero_paginas = n_p; } static boolean valida(int n_p) { if (n_p <= 0) { return false; } return true; } } public class e10 { public static void main(String args[]) { System.out.println("\n membros static"); System.out.println("\n aceder ao métodos antes do objeto: " + Texto.valida(100)); Texto t1 = new Texto(); System.out.println("\n aceder ao métodos depois do objeto: " + t1.valida(Texto.numero_paginas)); } }
A inicialização
Os membros variáveis das classes se forem usados sem estarem inicializados vão dar erro
É preferível inicializar essas variáveis ou então fazê-lo no construtor, com valores pode defeito
Se forem membros estáticos, eles são inicializados apenas uma vez, quando a classe for usada pela primeira vez
Nos objetos:
são inicializados os membros variáveis e depois o construtor
package e11; class Texto { String palavras; int numero_paginas = -1; Texto() { palavras = "vazio original"; System.out.println("\n construtor do texto: " + palavras); } Texto(String p, int n_p) { palavras = p; numero_paginas = n_p; System.out.println("\n segundo construtor do texto: " + palavras); } static boolean valida(int n_p) { if (n_p <= 0) { return false; } return true; } } class Livro { Texto t1 = new Texto("no livro", 100); Livro() { System.out.println("\n construtor do Livro: " + t1.palavras); } void mostra(){ System.out.println("\n mostra do Livro"); } static Texto t2 = new Texto("static no livro", 100); //primeiro a ser executado } public class e11 { public static void main(String args[]) { System.out.println("\n inicialização:"); Livro l1 = new Livro(); System.out.println("\n no main:" + l1.t1.palavras); l1.mostra(); } }