Esse é um assunto meio sinistrinho, eu gostaria que quando eu fizer um programa e gerar meu CLASS e depois meu JAR, não tenha nenhum furo e ninguém veja o código.
Por exemplo, baixei o programa do Imposto de Renda em Java, que está em um JAR, até aí tudo bem, mas simplesmente abri o JAR peguei o CLASS e depois visualizei todo os trabalhos realizados para o sistema.
Tem como proteger isso, tipo senha ou mesmo uma criptografia.
Aqui no forum tem muita discussão sobre isso, dê uma pesquisada.
Basicamente, sem ficar doido você deve usar um obfuscator pra dificultar, mas não impossibilitar.
Pra ficar meio xarope da cabeça você pode fazer um classloader especial que entenda classes criptografadas (que em memória estão descriptografadas, então alguém com muita vontade ainda consegue ler).
Bom, você precisa de um batalhão de russos para descompilar o que estes russos fizeram - um compilador Java para código nativo. Uma vez compilando sua aplicação (e usando as opções corretas de compilação, é lógico!) não tem jeito de voltar para o programa original. Tá certo que seu programa executável fica gigante, e você tem de mandar um instalador com o runtime especial que seu programa compilado vai ter de usar para rodar, mas isso não dá para evitar.
(Falo de russos, porque se você quiser fazer algo muito difícil, tal como escrever um device driver para Windows, é só encomendar para algum deles lá na Sibéria. Não estou brincando, na nossa firma a gente fez isso mesmo.)