All callback definitions must derive from this interface. Any
derived interfaces must define a
callback method.
You are responsible for deregistering your callback (if necessary)
in its
Object#finalize method. If native code attempts to call
a callback which has been GC'd, you will likely crash the VM. If
there is no method to deregister the callback (e.g.
atexit
in the C library), you must ensure that you always keep a live reference
to the callback object.
A callback should generally never throw an exception, since it doesn't
necessarily have an encompassing Java environment to catch it.