I'm pretty sure it's Java bytecode that is distributed in compiled JARs, not Java source code, however it might be possible to distribute Java source code in .JAR file since it's just an archive file format.
The reason a Java executable is distributed as an archive is because for whatever reason the compiler compiles Java code on a per-class basis, so the output of Java compilation for a normal Java program is thousands of little binaries (.class files) instead of a single binary, so to pack all those .class files they have made .JAR archives.
That said, Java bytecode is very easy to disassemble because it has high-level opcodes that tend to match 1:1 with Java keywords. .NET code is the same.
C#, and pretty much every other programming language on the planet, compile on the assembly level, so you get single library or executable at the end and don't need archives.