Duvida sobre metodo construtor

7 respostas
A

Ola !

Estou estudando Java e cheguei numa duvida que nao consigo compreender.

veja o codigo a seguir:

//Declaração da classe
public class TestaConstrutor {

//Declaração de um array 
int[] inteiros;

// Criação de um metodo construtor;
TestaConstrutor() {
	
	//inicializacao
	  inteiros = new int[4];
	
	//atribuicao
	  inteiros[0] = 10; inteiros[1] = 11;
	  inteiros[2] = 12; inteiros[3] = 13;
}

// Metodo de execução
public static void main(String[] args){
	
	TestaConstrutor tc = new TestaConstrutor();
	tc.inicia();
	}


// Criação de um metodo que irá imprimir o conteudo de cada uma das posições do array.
private void imprimeArray(int valor) {
    System.out.println(valor);
}

// Metodo de chamada de execução
private void inicia(){
	
	// Imprime o conteudo do array
	for (int i=0; i<4; i++){
	  imprimeArray(inteiros[i]);
}

}

}

Sendo o metodo main um metodo statico ele nao consegue executar chamadas a metodos nao estaticos, certo?

criei o metodo imprimeArray() sendo um metodo nao estatico com um parametro do tipo inteiro (int valor)
criei o metodo inicia() que tambem é um metodo não estatico para ser chamado por um objeto da classe do metodo de execução.

A duvida é:
Porque o metodo inicia(), que nao é estatico pode ser utilizado dentro do metodo main e o metodo imprimeArray(int valor) nao pode ser chamado dentro do metodo main, sendo que ele tambem nao é estatico?

porque posso, dentro do metodo main : tc.inicia();
e nao posso : tc.imprimeArray(int valor) ?

Obrigado pela ajuda !

7 Respostas

L

Ue, vc pode chamar os dois, desde que chamados do objeto tc criado:

public class TestaConstrutor {

	int[] inteiros;

	TestaConstrutor() {
		inteiros = new int[4];
		inteiros[0] = 10;
		inteiros[1] = 11;
		inteiros[2] = 12;
		inteiros[3] = 13;
	}

	public static void main(String[] args) {

		TestaConstrutor tc = new TestaConstrutor();
		tc.inicia();
		tc.imprimeArray(1);
	}

	private void imprimeArray(int valor) {
		System.out.println(valor);
	}

	private void inicia() {
		for (int i = 0; i < 4; i++) {
			imprimeArray(inteiros[i]);
		}
	}

}
A

Mas entao, porque utilizar o metodo inicia() para chamar os outros metodos da classe ?

L

Eu não usei o método inicia para chamar imprimeArray a partir do main

A

Nao sei se me expliquei direito !

Eu sei que pode-se passar os dados por valor ou por referencia.
O que esta me confundindo um pouco é o seguinte.

O metodo main é um metodo estatico, certo ? Porem se eu criar uma variavel de instancia dentro do metodo main para chamar o metodo imprimeArray, ele nao funciona, pois o metodo imprimeArray utiliza uma variavel de metodo e o metodo main, sendo estatico nao consegue vê-la.

mas porque o metodo construtor, nao sendo estatico pode ser chamado dentro do metodo main ?

Essa é minha duvida !

E

Cara,

A primeira coisa que você precisa entender é que construtor/destrutor não são métodos.

Entenda construtor como uma sequencia de comando que você pode executar quando um objeto é criado.

L

Ah sim, se a duvida eh por que pode chamar o construtor e não os outros bele.

Então, para vc chamar métodos nao estaticos, vc precisa de uma instancia do objeto que possui esse método. Ai justamente para obter essa instancia do objeto (que é a sua variavel tc dentro do main), vc precisar construir ele, dai o motivo de vc precisar do construtor (tc = new TestaConstrutor, vc esta construindo um objeto).
Quando sua aplicação quando iniciada não existe nenhum objeto, ele vai direto para o método estatico main, se vc nao pudesse chamar construtores a partir de bloco estaticos, como poderia criar objetos para chamar seus metodos?!

E eh como o Evando falou, não pense em construtor como sendo metodos.

:wink:

A

Obrigado pelo auxilio !

Lendo outras bibliografias cheguei a conclusao de que o autor nao foi muito feliz nesse exemplo, nao faz muito sentido.

Criado 16 de fevereiro de 2009
Ultima resposta 8 de mar. de 2009
Respostas 7
Participantes 3