Static em metodos

ae pessoal queria saber se é obrigatorio o uso do static qdo declaro um metodo… fiquei meio confuso agora, pq ja metodos que o uso do static… por exemplo:

public class Multi
{
	public static void main(String args[]){
		int array[][] ={{1,2,3},{4,5,6}};
		System.out.println("valor array ");
		outputArray(array); // exibe array1 por linha
		
	}
	//inicio do metodo
		public static  void outputArray(int array2[][]){
			//faz um lop nas linhas
			for(int row=0;row < array2.length;row++){
				//faz um loop nas colunas
				for(int column =0; column < array2[row].length; column++)
					System.out.printf(" %d", array2[row][column]);
				System.out.println();
			}
		}
	
}

se eu tirar o static do metodo da erro pq? qual a função mesmo de eu usar static…

Isso ajuda:

http://www.guj.com.br/java.tutorial.artigo.121.1.guj

Da erro porque o método main é estático e de um contexto estático não se pode invocar métodos não estáticos.

Métodos estáticos são métodos de classe:

classe.metodoStatic();

Métodos dinamicos são métodos de objetos:

objeto.metodo();

Bem… pelo pouco que conheco… você estaria indo contra o conceito de orientação a objetos… nesse caso você poderia criar um outro objeto que tivesse tal método… sendo assim vc instancia o objeto e assim utiliza os seus métodos… pelo menos seria assim a minha implementação… com o modificar de acesso static permite que vc chame o método sem precisar instanciar um objeto dele… como no “public static void main…” ele não enxerga o método ao qual está chamando … espero ter tirado sua dúvida!!

entao teria q definir meu metodo fora do public static void main…

para que ele possa ser definido como nao estatico?

+/- isso… na verdade vc teria q ter outra classe que tivesse o método ao qual vc quer chamar… entende… aí vc iria instanciar o objeto dentro da sua classe Multi… sem precisar colocar o método como static, exemplo:

public class Multi
{
public static void main(String args[]){
//Intancia um objeto da classe Output
Output obj = new Output();

	int array[][] ={{1,2,3},{4,5,6}};
	System.out.println("valor array ");
	//Chama o método que pertence ao objeto obj
	obj.outputArray(array); // exibe array1 por linha
	
} 	

}

// outra classe a qual você irá instanciar o objeto

public class Output{

public void outputArray(int array2[][]){
	//faz um lop nas linhas
	for(int row=0;row < array2.length;row++){
		//faz um loop nas colunas
		for(int column =0; column < array2[row].length; column++)
			System.out.printf(" %d", array2[row][column]);
			System.out.println();
		}
	}

}