Problems with Native Methods
Native methods seem to offer great promise, because they enable you to gain access to an
existing base of library routines, and they offer the possibility of faster run-time execution.
But native methods also introduce two significant problems:
· Potential security risk Because a native method executes actual machine code,
it can gain access to any part of the host system. That is, native code is not confined
to the Java execution environment. This could allow a virus infection, for example.
For this reason, applets cannot use native methods. Also, the loading of DLLs can
be restricted, and their loading is subject to the approval of the security manager.
· Loss of portability Because the native code is contained in a DLL, it must be
present on the machine that is executing the Java program. Further, because each
native method is CPU- and operating systemdependent, each DLL is inherently
nonportable. Thus, a Java application that uses native methods will be able to run
only on a machine for which a compatible DLL has been installed.
The use of native methods should be restricted, because they render your Java programs
nonportable and pose significant security risks.
Another relatively new addition to Java is the keyword assert. It is used during program
development to create an assertion, which is a condition that should be true during the
execution of the program. For example, you might have a method that should always return
a positive integer value. You might test this by asserting that the return value is greater than
zero using an assert statement. At run time, if the condition actually is true, no other action
takes place. However, if the condition is false, then an AssertionError is thrown. Assertions
are often used during testing to verify that some expected condition is actually met. They are
not usually used for released code.
The assert keyword has two forms. The first is shown here:
Here, condition is an expression that must evaluate to a Boolean result. If the result is true,
then the assertion is true and no other action takes place. If the condition is false, then the
assertion fails and a default AssertionError object is thrown.
The second form of assert is shown here:
assert condition : expr;
In this version, expr is a value that is passed to the AssertionError constructor. This value is
converted to its string format and displayed if an assertion fails. Typically, you will specify
a string for expr, but any non-void expression is allowed as long as it defines a reasonable
Search WWH :