O problema é que você não citou o parâmetro -name . Faça isso:
find . -name '*.java'
Explicação
Sem as aspas, o shell interpreta *.java como um padrão glob e o expande para qualquer nome de arquivo que corresponda ao glob antes de passá-lo para find . Dessa forma, se você tivesse, digamos, foo.java no diretório atual, a linha de comando real de find seria:
find . -name foo.java
que obviamente listaria o arquivo apenas no diretório atual (a menos que você tenha alguns arquivos com nomes semelhantes mais abaixo na árvore).
As citações impedem a expansão glob e passam a linha de comando para find as-is.
*.java arquivos no diretório atual), você teria um de dois comportamentos dependendo de como seu shell é configurado para lidar com globs que não combinam (isto é governado pela opção nullglob no Bash, por exemplo):
- Se um glob que não corresponder não for expandido pelo shell,
find(acidentalmente, lembre-se) exibirá o comportamento correto. - Se um glob que não corresponder for expandido em uma string vazia pelo shell,
findirá reclamar que está faltando um argumento para-name.