306 Part I: The Java Language
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 system–dependent, 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.
Using assert
Another relatively new addition to Java is the keywordassert. It is used during program
development to create anassertion,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 anassertstatement. At run time, if the condition actually is true, no other action
takes place. However, if the condition is false, then anAssertionErroris thrown. Assertions
are often used during testing to verify that some expected condition is actually met. They are
not usually used for released code.
Theassertkeyword has two forms. The first is shown here:
assertcondition;
Here,conditionis 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 defaultAssertionErrorobject is thrown.
The second form ofassertis shown here:
assertcondition:expr;
In this version,expris a value that is passed to theAssertionErrorconstructor. This value is
converted to its string format and displayed if an assertion fails. Typically, you will specify
a string forexpr,but any non-voidexpression is allowed as long as it defines a reasonable
string conversion.