java non e' compilato, e' interpretato e il formato dei bytecode e' pubblico, per cui scrivere un decompilatore non e' un'impresa impossibile. jad e' secondo me il miglior prodotto di decompilazione che trovi in giro.
esistono anche degli "offuscatori" che rendono piu' arduo il lavoro a chi vuole decompilare il tuo codice (prova a cercare retroguard su google) ma non sono soluzioni "definitive"