As mentioned here
Refresh analyses the source-files to check if any changes were made from outside Eclipse, and if so, compiles files that were changed.
Clean on the other hand removes all compiled classes and forces recompilation of the whole project (or workspace).