Erro com Static

Ola galera, sou novo por aqui e novo em programação java. Programo já há um tempo considerável em C, C++, Python, PHP. Já vi algumas coisas a muito tempo em java mas nunca aprofundei. Resolvi investir em java agora justamente por causa do Android.

Bom, minha dúvida é a seguinte: Estou muito “viciado” nas outras linguagens (principalmente C e C++, que são as que eu mais domino) e não consigo de jeito nenhum criar objetos dentro do main.


import java.util.Scanner;

/* Classe para representar uma Oficina Mecânica */
public class Mecanica {

	/* Essa é a classe abstrata da Mecanica para fazer
	   coisas comum entre outras classes */
	public abstract class AbMecanica {
		Scanner input;
		public AbMecanica(Scanner input) {
			this.input = input;
		}
	}

	/* Classe para representar um tipo de serviço oferecido pela Oficina  */
	public class TipoServico extends AbMecanica {
		int cod;
		String descricao;
		float valor;

		public void criaTipoServico() {
			try {
				this.cod = input.nextInt();
				this.descricao = input.next(" ");
				this.valor = input.nextFloat();

			} catch(IllegalStateException e) {
				System.out.println("Arquivo não está aberto.");
			} 
		}

		/* Método construtor do tipo de serviço */
		public TipoServico(Scanner input) {
			super(input);
		}

	}


	/* Funcao principal da classe Mecanica */
	public static void main(String[] args) {
		TipoServico servicos;
		servicos = new TipoServico(null);
	}
}


Esse foi um exemplozinho básico que criei para mostrar o meu erro. Já tentei de tudo. Eu entendi que não se pode criar objetos não estáticos dentro de métodos estáticos(como o main). Mas daí, se eu levo isso para outra função não estática, na hora de chama-la acusa o mesmo problema! como resolver isso? Eu tenho ctz que isso é uma coisa banal pra vocês mas pra mim tá um saco resolver isso, rsrs.

Já tentei separar isso em uma classe e colocar o main em outra, tbm sem sucesso.

Abs.

Salve cara blz,
Seguinte o erro ai acontece pq vc criou a classe abstrata(AbMecanica), e TipoServico dentro da classe mecanica,
E esta tentando acessar elas pelo main que é estatico, o erro acontece pq vc esta tentando acessar elas sem criar um objeto na classe Mecanica, como essas classes são internas elas funcionam como atributos de instancia da Classe Mecanica,

Você pode criar um atributo TipoServico na classe mecanica e criar o objeto apartir do construtor ex:

public class Mecanica { 
private TipoServico tipoServico;

//Construtor
public Mecanica(){
tipoServico = new TipoServico(null);
}

Abraço

Obrigado Carlos, bom, ainda estou acostumando com os paradigmas e bons costumes de Java. Dentro da classe Mecanica, no método main() eu posso instanciar a própria classe Mecanica e isso resolve meu problema como vc falou. Mas isso me parece muito estranho. Isso é certo/comum de fazer?
uaihauia eu ainda não acostumei com a função main sendo um método de uma classe. Isso é muito estranho hahah.

Então cara geralmente as classes internas da forma que você fez são usadas para funções especificas das classes, por exemplo, uma função de um botão, um atributo mas especifico(uma estrutura a moda de C e C++ rs), para outras funções é mais viavel criar uma outra classe que não seja interna.