Java and J# use the same general syntax but there are non-Java conventions in J# to support the .NET environment. For example, to use .NET "properties" with a standard
JavaBean class, it is necessary to prefix getter and setter methods with the
Javadoc-like annotation: /** @beanproperty */ ...and change the corresponding private variable name to be different from the suffix of the getXxx/setXxx names. J# does not compile Java-language source code to Java bytecode (.class files), and does not support
Java applet development or the ability to host applets directly in a
web browser, although it does provide a wrapper called Microsoft J# Browser Controls for hosting them as
ActiveX objects. Finally,
Java Native Interface (JNI) and
raw native interface (RNI) are substituted with
P/Invoke; J# does not support
remote method invocation (RMI).
InfoWorld said: "J#'s interface to the .NET framework is solid, but not as seamless as
C#. In particular, J# code cannot define new .NET attributes, events, value types, or delegates. J# can make use of these language constructs if they are defined in an assembly written in another language, but its inability to define new ones limits J#'s reach and interoperability compared to other .NET languages." Contrariwise, Microsoft documentation for Visual Studio 2005 details the definition of .NET delegates, events, and value types directly in J#. Like C# and unlike Java, J# is able to use the
C preprocessor directives. ==History of J#==