About my first reply, I apologize, perhaps I shud have rephrased it
more clearly. My intention was to say that one "could" emulate features
of C# in Java but u "cannot do full justice" to those emulated
features. In sense that you cannot use them in Java with the same
flexibility as u can in C#.
This makes .NET *less* expressive than Java; it's as if all Java methods
were declared "throws Throwable".
My intention here is not to compare or decide which is a superior
platform. I want to highlight the difference between .NET and Java in
the context of source code translation from the former to the latter. I
want to say that if u need to translate from C# to Java, u need special
treatment to exceptions. Certain checked exceptions of Java correspond
to unchecked exceptions of .NET, so u need special care when u
translate from C# to Java and ensure that the Java code uses proper
try...catch...blocks to handle checked exceptions. The same with
non-static nested classes.
And no doubt C++ has many features. But where C# and Java compile to
intermediate code, C++ code is popularly( here im not considering
managed extentions to C++) compiled to native code. Also C# and Java
resemble a lot in terms of features than C++ . So I can keep C++ out of
the scope of this discussion.