When is an inner class accessible?
陈雨亭
chenyt at cs.sjtu.edu.cn
Mon Oct 19 00:44:45 UTC 2015
Hi, could anyone explain this? I recently created one class, while I found
that it fails to access some inner classes. My class M1437121261 attempts
to access sun.java2d.pisces.PiscesRenderingEngine$2, an inner class for
initializing "private static enum NormMode {OFF, ON_NO_AA, ON_WITH_AA}".
Hotspot reports an error "java.lang.IllegalAccessError" for this, while
IBM's J9
does not report any error message. I guess J9 is wrong, while I did not find
any material to explain why/when an inner class should or should not be
accessed. Can anyone tell me where I can find the reference or specification
for this?
My class:
Classfile
M1437121261.class
...
public class M1437121261 extends ...
minor version: 0
major version: 46
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
...
{
public M1437121261();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #19
4: return
public static void main(java.lang.String[]) throws
sun.java2d.pisces.PiscesRenderingEngine$2;
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=1, args_size=1
0: getstatic #17 // Field
java/lang/System.out:Ljava/io/PrintStream;
3: ldc #12 // String Executed!
5: invokevirtual #27 // Method
java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
Exceptions:
throws sun.java2d.pisces.PiscesRenderingEngine$2
}
Classfile
/sun/java2d/pisces/PiscesRenderingEngine$2.class
...
Compiled from "PiscesRenderingEngine.java"
class sun.java2d.pisces.PiscesRenderingEngine$2
minor version: 0
major version: 51
flags: ACC_SUPER, ACC_SYNTHETIC
Constant pool:
...
{
static final int[]
$SwitchMap$sun$java2d$pisces$PiscesRenderingEngine$NormMode;
descriptor: [I
flags: ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC
static {};
descriptor: ()V
flags: ACC_STATIC
Code:
stack=3, locals=1, args_size=0
0: invokestatic #1 // Method
sun/java2d/pisces/PiscesRenderingEngine$NormMode.values:()[Lsun/java2d/pisces/PiscesRenderingEngine$NormMode;
3: arraylength
4: newarray int
6: putstatic #2 // Field
$SwitchMap$sun$java2d$pisces$PiscesRenderingEngine$NormMode:[I
9: getstatic #2 // Field
$SwitchMap$sun$java2d$pisces$PiscesRenderingEngine$NormMode:[I
12: getstatic #3 // Field
sun/java2d/pisces/PiscesRenderingEngine$NormMode.ON_NO_AA:Lsun/java2d/pisces/PiscesRenderingEngine$NormMode;
15: invokevirtual #4 // Method
sun/java2d/pisces/PiscesRenderingEngine$NormMode.ordinal:()I
18: iconst_1
19: iastore
20: goto 24
23: astore_0
24: getstatic #2 // Field
$SwitchMap$sun$java2d$pisces$PiscesRenderingEngine$NormMode:[I
27: getstatic #6 // Field
sun/java2d/pisces/PiscesRenderingEngine$NormMode.ON_WITH_AA:Lsun/java2d/pisces/PiscesRenderingEngine$NormMode;
30: invokevirtual #4 // Method
sun/java2d/pisces/PiscesRenderingEngine$NormMode.ordinal:()I
33: iconst_2
34: iastore
35: goto 39
38: astore_0
39: getstatic #2 // Field
$SwitchMap$sun$java2d$pisces$PiscesRenderingEngine$NormMode:[I
42: getstatic #7 // Field
sun/java2d/pisces/PiscesRenderingEngine$NormMode.OFF:Lsun/java2d/pisces/PiscesRenderingEngine$NormMode;
45: invokevirtual #4 // Method
sun/java2d/pisces/PiscesRenderingEngine$NormMode.ordinal:()I
48: iconst_3
49: iastore
50: goto 54
53: astore_0
54: return
Exception table:
from to target type
9 20 23 Class java/lang/NoSuchFieldError
24 35 38 Class java/lang/NoSuchFieldError
39 50 53 Class java/lang/NoSuchFieldError
LineNumberTable:
line 384: 0
LocalVariableTable:
Start Length Slot Name Signature
24 0 0 ex Ljava/lang/NoSuchFieldError;
39 0 0 ex Ljava/lang/NoSuchFieldError;
54 0 0 ex Ljava/lang/NoSuchFieldError;
StackMapTable: number_of_entries = 6
frame_type = 87 /* same_locals_1_stack_item */
stack = [ class java/lang/NoSuchFieldError ]
frame_type = 0 /* same */
frame_type = 77 /* same_locals_1_stack_item */
stack = [ class java/lang/NoSuchFieldError ]
frame_type = 0 /* same */
frame_type = 77 /* same_locals_1_stack_item */
stack = [ class java/lang/NoSuchFieldError ]
frame_type = 0 /* same */
}
SourceFile: "PiscesRenderingEngine.java"
EnclosingMethod: #24.#0 //
sun.java2d.pisces.PiscesRenderingEngine
InnerClasses:
static #8 of #24; //class
sun/java2d/pisces/PiscesRenderingEngine$2 of class
sun/java2d/pisces/PiscesRenderingEngine
More information about the hotspot-runtime-dev
mailing list