Package, complementando a resposta do Roger, representa a estrutura hierárquica a qual a sua classe está alocada. Pacotes são agrupamentos que podem conter classes e outros pacotes
Caso existam duas classes com mesmo nome em diretórios diferentes, e ambas as classes sejam utilizadas em um classe, será necessário qualificar o uso da classe, declarando cada uma com todo o nome do pacote na sua frente. Esse é o conhecido Fully Qualified Name de uma classe; veja um exemplo abaixo:
br.com.caelum.contas.Banco meuBanco = new br.com.caelum.contas.Banco();
Por isso duas classes com o mesmo nome em pacotes diferentes não conflitam.
Quando a classe não possui a declaração package, significa que o arquivo bytecode, gerado na compilação da classe, será gerado no diretório do pacote padrão(diretório no qual o comando javac é executado).
IMPORTANTE: Somente pode existir uma única declaração do package por classe. Devendo esta ser o primeiro item a ser declarado, antes mesmo de qualquer import ou da própria declaração da classe.