-
Bug
-
Resolution: Fixed
-
P3
-
1.1.4
-
1.2alpha
-
sparc
-
solaris_2.5
-
Not verified
Name: szC45993 Date: 08/13/97
The Java Virtual Machine, chapter 5 Constant Pool Resolution,
section 5.1.1 Current Class or Interface Not Loaded by a Class Loader, claims:
"If none of the preceding errors were detected, constant pool resolution of the class or interface reference must have completed successfully. However, if an error was detected, one of the following must be true.
- If some exception is thrown in steps 1-4, the class being resolved must have been marked as unusable or must have been discarded.
..."
The test below shows that it is possible to use a class (for example,
to set its static field) initialization of which has completed abruptly.
Note that the bug has been fixed in jdk1.2 and is filed against
jdk1.1.4 just for reference from JCK1.1.4 exclude test list.
See log and test sources (extracted from JCK test ClassInterf01801) below:
----------------------------------------------------------------------------
> /export/ld14/java/dest/jdk1.1.4/solaris/bin/java -fullversion
java full version "JDK-sparkler_B"
> /export/ld14/java/dest/jdk1.1.4/solaris/bin/javac clss.java Intrmdt.java
> /export/ld14/java/dest/jdk1.1.4/solaris/bin/java Intrmdt
java.lang.ExceptionInInitializerError
Bad: (5.1.1:) If some exception is thrown when class is loaded then the class being resolved must have been marked as unusable or must have been discarded.
novo7% echo $status
2
----------------------------------------------------------------------------
SOURCES:
--------------------- Intrmdt.java
public class Intrmdt{
public static void main(String argv[]) {
try{
new clss();
}catch (java.lang.ExceptionInInitializerError e) {
System.out.println(e);
try{
clss.i = 2;
System.out.println("Bad: (5.1.1:) If some exception is thrown when class is loaded then the class being resolved must have been marked as unusable or must have been discarded.");
}catch (Throwable ee) {
System.out.println(ee);
System.out.println("Okay!");
System.exit(0);
}
}
System.exit(2);
}
}
--------------------- clss.java
public class clss{
static int i = 1;
static int j = 1;
static {
i /= (j - 1); // <<<<<<<<<<<<<< ArithmeticException: / by zero
}
}
---------------------
======================================================================