You can't get the source code as is, because all comments are removed, and generic information is also gone. Most of it is still available. You can make it harder by using obfuscators but all those do is make it hard to read the decompiled code, not impossible.
Decompiling an executable, is *always* an option -- regardless of the program. The JVM needs to open and read class files, so hence, the class files can be opened by a decompiler. This is also true for other languages. Something has to be able to read and run the program, hence, another thing should be able to read and decompile it.
There is no way to stop decompilation. The only thing that can be done is to make it harder. In the case of Java, there are ofuscators that does weird things to the class files, so that they will still run, but will look weird when they are decompiled. But even then, a good programmer can easily get the jist of the decompiled code.