but nowdays you are allowed to set options to make distributable running code in such firm that it can't be reverse-engg ( Normal Ways )
like if you are using IDEs like Netbeans, Eclipse ... when you export your code as JAR, option is being displayed... similar settings can be achieved via some command line switches...