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