1 - Classe vai ter os atributos do objeto que ela modela. Que podem ser os tipos primitivos ou pode ser outra classe.
public class Carro {
private int codigo;
private String nome;
private String modelo;
private Montadora montadora;
}
public class Montadora {
private int codigo;
private String nome;
}
outro detalhe, a gente divide um arquivo java para cada classe, mas nada impede que voce coloque tudo dentro de um arquivo so.
2 - A classe responsável por iniciar o programa pode receber atributos, e pode ter classes também e metodos. voce pode ter um programa inteiro numa unica classe. Mas ninguem em sã conciencia faria isso, pq é coisa de doido. Dependendo da aplicacao, voce nem precisa da classe principal. Se for uma aplicacao que roda em container web, servlet, jsp, jsf, voce nem precisa do main, quem inicia ela é o proprio servidor.
Pense na classe como a descricao de uma coisa do mundo real, um biscoito, uma cadeira, um fogao, entao nela voce vai colocar as caracteristicas dessa coisa. Quando voce instancia uma classe voce tem uma representação dessa coisa.
Biscoito biscoito = new Biscoito;
biscoito.setSabor("chocolate");
biscoito.setRecheado(true);
Ai agora o que eu vou fazer com esse biscoito eu vou vender.
Entao agora eu preciso de uma classe Venda, a venda vai ter itens, eu preciso de uma classe ItemDaVenda, se a venda precisar idenficar quem esta comprando, precisa do Cliente. Entao com tudo modelado voce pode fazer uma classe com o main, que vai rodar ate no proprio console perguntando o que voce quer fazer.
Instancia uma venda, pergunta se quer selecionar cliente, ai voce instancia o cliente e adiciona ele na venda.
venda.setCliente(cliente);
em seguida vai perguntar qual item voce quer, voce diz que é o biscoito de chocolate. e cria o item
ItemDaVenda item = new ItemDaVenda();
item.setProduto(biscoito);
item.setQuantidade(10);
item.setValor(biscoito.getPreco());
venda.adicionarItem(item);
venda.calculaTotal();
venda.emitir();
e assim vai.