Retirado do Tutorial do Java SE:
"
Verificando a variável CLASSPATH (todas as plataformas)
A variável CLASSPATH é uma maneira de informar aos aplicativos, incluindo as ferramentas do JDK, onde procurar por classes de usuário. (As classes que fazem parte do JRE, da plataforma JDK e das extensões devem ser definidas por outros meios, como o caminho da classe de auto inicialização ou o diretório de extensões).
A maneira preferida de especificar o caminho da classe é usando a opção de linha de comando -cp . Isso permite que seja definido o CLASSPATH individualmente para cada aplicativo sem afetar outros aplicativos. A configuração CLASSPATH pode ser complicada e deve ser executada com cuidado.
O valor padrão do caminho da classe é ".", significando que apenas o diretório atual é pesquisado. Especificar a variável CLASSPATH ou a opção de linha de comando -cp substitui esse valor.
Para verificar se CLASSPATHestá definido no Microsoft Windows NT / 2000 / XP, execute o seguinte:
C:> echo% CLASSPATH%
No Solaris ou Linux, execute o seguinte:
% echo $ CLASSPATH
Se CLASSPATHnão estiver definido, você obterá um erro de variável CLASSPATH: Undefined (Solaris ou Linux) ou simplesmente % CLASSPATH% (Microsoft Windows NT / 2000 / XP).
Para modificar o CLASSPATH, use o mesmo procedimento usado para a variável PATH.
Os curingas de caminho de classe permitem incluir um diretório inteiro de arquivos .jar no caminho de classe sem nomeá-los explicitamente individualmente. Para obter mais informações, incluindo uma explicação dos curingas do caminho de classe e uma descrição detalhada sobre como limpar a variável de ambiente CLASSPATH, consulte a nota técnica Configurando o Caminho de Classe .
"
Resumindo: quando você executa "java Programa", certifique-se que Programa.class existe e está na mesma pasta/diretório desse arquivo. Pois o comando java executa o bytecode Programa.class .