рдПрдирдо рднрд╛рдЧ I рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдорд╛рди

рднрд╛рдЧ рдПрдХ, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ | рднрд╛рдЧ рджреЛ, рдкреНрд░реИрдХреНрдЯрд┐рдХрд▓


рдЗрд╡рдЧреЗрдиреА рдореИрдВрдбреНрд░рд┐рдХреЛрд╡ рдЙрд░реНрдл рдЧреЛрдбрд┐рди рдХреЗ рдПрдХ рдЯреНрд╡реАрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд:


рдЗрд╕рдореЗрдВ, рд╡рд╣ рд╕реЛрдЪрддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ enum рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдХрд┐рддрдиреЗ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдФрд░ рдХрд╛рд▓реЗ рдЬрд╛рджреВ рдХреЙрдиреНрд╕реНрдЯреИрдВрдЯрдбрд╛рдпрдирд╛рдорд┐рдХ ( рдЬреЗрдИрдкреА 309 ) рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж, рдкреНрд░рд╢реНрди рдХрд╛ рд▓реЗрдЦрдХ 8191 рдирдВрдмрд░ рдкрд░ рдЖрддрд╛ рд╣реИред

рджреЛ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рд╣рдо рдПрдХ рдЧрдгрдирд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╕реАрдорд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЙрдирдХреЗ рдХрд░реАрдм рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЬреЗрдИрдкреА 309 рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдкреИрдорд╛рдЗрд╢


рдПрдХ рд╕рдореАрдХреНрд╖рд╛ рдЕрдзреНрдпрд╛рдп рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рдЕрд╕рдВрддреБрд╖реНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдирд┐рдореНрди рдЧрдгрдирд╛ рдХреНрдпрд╛ рд╣реИ:

 public enum FizzBuzz { Fizz, Buzz, FizzBuzz; } 

рд╕рдВрдХрд▓рди рдФрд░ рдЬреБрджрд╛рдИ рдХреЗ рдмрд╛рдж:

javap -c -s -p -v FizzBuzz.class
 Classfile /dev/null/FizzBuzz.class Last modified 32 . 2019 .; size 903 bytes MD5 checksum add0af79de3e9a70a7bbf7d57dd0cfe7 Compiled from "FizzBuzz.java" public final class FizzBuzz extends java.lang.Enum<FizzBuzz> minor version: 0 major version: 58 flags: (0x4031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER, ACC_ENUM this_class: #2 // FizzBuzz super_class: #13 // java/lang/Enum interfaces: 0, fields: 4, methods: 4, attributes: 2 Constant pool: #1 = Fieldref #2.#3 // FizzBuzz.$VALUES:[LFizzBuzz; #2 = Class #4 // FizzBuzz #3 = NameAndType #5:#6 // $VALUES:[LFizzBuzz; #4 = Utf8 FizzBuzz #5 = Utf8 $VALUES #6 = Utf8 [LFizzBuzz; #7 = Methodref #8.#9 // "[LFizzBuzz;".clone:()Ljava/lang/Object; #8 = Class #6 // "[LFizzBuzz;" #9 = NameAndType #10:#11 // clone:()Ljava/lang/Object; #10 = Utf8 clone #11 = Utf8 ()Ljava/lang/Object; #12 = Methodref #13.#14 // java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum; #13 = Class #15 // java/lang/Enum #14 = NameAndType #16:#17 // valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum; #15 = Utf8 java/lang/Enum #16 = Utf8 valueOf #17 = Utf8 (Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum; #18 = Methodref #13.#19 // java/lang/Enum."<init>":(Ljava/lang/String;I)V #19 = NameAndType #20:#21 // "<init>":(Ljava/lang/String;I)V #20 = Utf8 <init> #21 = Utf8 (Ljava/lang/String;I)V #22 = String #23 // Fizz #23 = Utf8 Fizz #24 = Methodref #2.#19 // FizzBuzz."<init>":(Ljava/lang/String;I)V #25 = Fieldref #2.#26 // FizzBuzz.Fizz:LFizzBuzz; #26 = NameAndType #23:#27 // Fizz:LFizzBuzz; #27 = Utf8 LFizzBuzz; #28 = String #29 // Buzz #29 = Utf8 Buzz #30 = Fieldref #2.#31 // FizzBuzz.Buzz:LFizzBuzz; #31 = NameAndType #29:#27 // Buzz:LFizzBuzz; #32 = String #4 // FizzBuzz #33 = Fieldref #2.#34 // FizzBuzz.FizzBuzz:LFizzBuzz; #34 = NameAndType #4:#27 // FizzBuzz:LFizzBuzz; #35 = Utf8 values #36 = Utf8 ()[LFizzBuzz; #37 = Utf8 Code #38 = Utf8 LineNumberTable #39 = Utf8 (Ljava/lang/String;)LFizzBuzz; #40 = Utf8 LocalVariableTable #41 = Utf8 name #42 = Utf8 Ljava/lang/String; #43 = Utf8 this #44 = Utf8 Signature #45 = Utf8 ()V #46 = Utf8 <clinit> #47 = Utf8 Ljava/lang/Enum<LFizzBuzz;>; #48 = Utf8 SourceFile #49 = Utf8 FizzBuzz.java { public static final FizzBuzz Fizz; descriptor: LFizzBuzz; flags: (0x4019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL, ACC_ENUM public static final FizzBuzz Buzz; descriptor: LFizzBuzz; flags: (0x4019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL, ACC_ENUM public static final FizzBuzz FizzBuzz; descriptor: LFizzBuzz; flags: (0x4019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL, ACC_ENUM private static final FizzBuzz[] $VALUES; descriptor: [LFizzBuzz; flags: (0x101a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC public static FizzBuzz[] values(); descriptor: ()[LFizzBuzz; flags: (0x0009) ACC_PUBLIC, ACC_STATIC Code: stack=1, locals=0, args_size=0 0: getstatic #1 // Field $VALUES:[LFizzBuzz; 3: invokevirtual #7 // Method "[LFizzBuzz;".clone:()Ljava/lang/Object; 6: checkcast #8 // class "[LFizzBuzz;" 9: areturn LineNumberTable: line 1: 0 public static FizzBuzz valueOf(java.lang.String); descriptor: (Ljava/lang/String;)LFizzBuzz; flags: (0x0009) ACC_PUBLIC, ACC_STATIC Code: stack=2, locals=1, args_size=1 0: ldc #2 // class FizzBuzz 2: aload_0 3: invokestatic #12 // Method java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum; 6: checkcast #2 // class FizzBuzz 9: areturn LineNumberTable: line 1: 0 LocalVariableTable: Start Length Slot Name Signature 0 10 0 name Ljava/lang/String; private FizzBuzz(); descriptor: (Ljava/lang/String;I)V flags: (0x0002) ACC_PRIVATE Code: stack=3, locals=3, args_size=3 0: aload_0 1: aload_1 2: iload_2 3: invokespecial #18 // Method java/lang/Enum."<init>":(Ljava/lang/String;I)V 6: return LineNumberTable: line 1: 0 LocalVariableTable: Start Length Slot Name Signature 0 7 0 this LFizzBuzz; Signature: #45 // ()V static {}; descriptor: ()V flags: (0x0008) ACC_STATIC Code: stack=4, locals=0, args_size=0 0: new #2 // class FizzBuzz 3: dup 4: ldc #22 // String Fizz 6: iconst_0 7: invokespecial #24 // Method "<init>":(Ljava/lang/String;I)V 10: putstatic #25 // Field Fizz:LFizzBuzz; 13: new #2 // class FizzBuzz 16: dup 17: ldc #28 // String Buzz 19: iconst_1 20: invokespecial #24 // Method "<init>":(Ljava/lang/String;I)V 23: putstatic #30 // Field Buzz:LFizzBuzz; 26: new #2 // class FizzBuzz 29: dup 30: ldc #32 // String FizzBuzz 32: iconst_2 33: invokespecial #24 // Method "<init>":(Ljava/lang/String;I)V 36: putstatic #33 // Field FizzBuzz:LFizzBuzz; 39: iconst_3 40: anewarray #2 // class FizzBuzz 43: dup 44: iconst_0 45: getstatic #25 // Field Fizz:LFizzBuzz; 48: aastore 49: dup 50: iconst_1 51: getstatic #30 // Field Buzz:LFizzBuzz; 54: aastore 55: dup 56: iconst_2 57: getstatic #33 // Field FizzBuzz:LFizzBuzz; 60: aastore 61: putstatic #1 // Field $VALUES:[LFizzBuzz; 64: return LineNumberTable: line 3: 0 line 5: 13 line 7: 26 line 1: 39 } Signature: #47 // Ljava/lang/Enum<LFizzBuzz;>; SourceFile: "FizzBuzz.java" 


рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рд╣рдо рдорд┐рд▓реЗ рд╣реИрдВ

  • рдЧрдгрдирд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рддреНрдпреЗрдХ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ public static final рдХреНрд╖реЗрддреНрд░
  • рдирд┐рдЬреА рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдХреНрд╖реЗрддреНрд░ $VALUES , $VALUES рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╕реНрддрд╛рд░ values() рд╡рд┐рдзрд┐
  • values() рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди values() рдФрд░ valueOf() рд╡рд┐рдзрд┐рдпрд╛рдБ
  • рдирд┐рдЬреА рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛
  • рд╕реНрдерд┐рд░ рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛ рдмреНрд▓реЙрдХ, рдЬрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рд╣реЛрддреА рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ, рдмрд╛рдж рд╡рд╛рд▓рд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  static { Fizz = new FizzBuzz("Fizz", 0); Buzz = new FizzBuzz("Buzz", 1); FizzBuzz = new FizzBuzz("FizzBuzz", 2); $VALUES = new FizzBuzz[] { Fizz, Buzz, FizzBuzz }; } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЧрдгрди рддрддреНрд╡реЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдмрдирд╛рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рддреБрд░рдВрдд рд╕рдВрдмрдВрдзрд┐рдд public static final рдлрд╝реАрд▓реНрдб рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдлрд┐рд░ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕рднреА рдЧрдгрди рддрддреНрд╡реЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдЖрдмрд╛рджреА рд╣реЛрддреА рд╣реИред рд▓рд┐рдВрдХ рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдКрдкрд░ рдХреЗ рдкреИрд░рд╛ рдореЗрдВ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдерд╛ред рднрд░реЗ рд╣реБрдП рд╕рд░рдгреА рдХреЛ private static final рдХреНрд╖реЗрддреНрд░ $VALUES рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрд╕рдХреЗ рдмрд╛рдж, рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

рдЯреЛрдВрдЯреА


рдПрдХ рдЙрдмрд╛рдК рдЕрдзреНрдпрд╛рдп рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЧрдгрдирд╛ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдк рдЕрдкрдиреА рдЦреЛрдЬ JLS рдЕрдзреНрдпрд╛рдп .38.9.3 " рдПрдирдо рд╕рджрд╕реНрдпреЛрдВ" рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

JLS 8.9.3 Enum рд╕рджрд╕реНрдп
рдПрдХ enum рдкреНрд░рдХрд╛рд░ E рдХреЗ рд╕рджрд╕реНрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:
...
* рдИ рдХреЗ рдШреЛрд╖рдгрд╛ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдПрдиреБрдо рдирд┐рд░рдВрддрд░ рдЧ рдХреЗ рд▓рд┐рдП, рдИ рд╣реИ
рд╕рдорд╛рди рд░реВрдк рд╕реЗ E рдХреЗ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЕрдВрддрд┐рдо рдХреНрд╖реЗрддреНрд░
рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдоред рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рд╣реИ рдЬреЛ E рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ
рдИред рдХреЗ рд▓рд┐рдП рдЪреБрдиреЗ рдЧрдП рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рд╕реА рдХреА рджрд▓реАрд▓ рдореЗрдВ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рд╣реА рдЯрд┐рдкреНрдкрдгреА рд╣реИ
c рдХреЗ рд░реВрдк рдореЗрдВ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ)ред

рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
Enum рд╕реНрдерд┐рд░рд╛рдВрдХ, рдХрд┐рд╕реА рднреА рд╕реНрдереИрддрд┐рдХ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╢рд░реАрд░ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛
рдИ рдХреА рдШреЛрд╖рдгрд╛ред
...
* рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рддрд░реАрдХреЗ:
 /** * Returns an array containing the constants of this enum * type, in the order they're declared. This method may be * used to iterate over the constants as follows: * * for(E c : E.values()) * System.out.println(c); * * @return an array containing the constants of this enum * type, in the order they're declared */ public static E[] values(); /** * Returns the enum constant of this type with the specified * name. * The string must match exactly an identifier used to declare * an enum constant in this type. (Extraneous whitespace * characters are not permitted.) * * @return the enum constant with the specified name * @throws IllegalArgumentException if this enum type has no * constant with the specified name */ public static E valueOf(String name); 



рддреЛ, рдкреНрд░рддреНрдпреЗрдХ рдЧрдгрди рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ values() рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЗрд╕ рдЧрдгрди рдореЗрдВ рдШреЛрд╖рд┐рдд рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рд╡реИрдХреНрдпреВрдо рдореЗрдВ рдПрдХ рдЧреЛрд▓рд╛рдХрд╛рд░ рдЧрдгрдирд╛ рдореЗрдВ Integer.MAX_VALUE + 1 рддрддреНрд╡реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдореЗрдВ рдЧрдгрдирд╛ рдХреЛ java.lang.Enum рд╡рд░реНрдЧ рдХреЗ рд╡рдВрд╢рдЬ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╡реЗ JVM рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╕рднреА рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдЕрдзреАрди рд╣реИрдВред

рдЖрдЗрдП JVMS the4.1 рдореЗрдВ рджрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рд╡рд░рдг рдХреЛ рджреЗрдЦреЗрдВ: тАЬClassFileureure:

 ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[methods_count]; u2 attributes_count; attribute_info attributes[attributes_count]; } 

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА JLS ┬з8.9.3 рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдореА рдХрдХреНрд╖рд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЧрдгрдирд╛ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдирд╛рдо рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрдХреНрд╖рд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ 16-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд fields_count рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рд╕ рдлрд╝рд╛рдЗрд▓ рдпрд╛ 65_534 рдЧрдгрди рддрддреНрд╡реЛрдВ рдореЗрдВ 65_535 рдлрд╝реАрд▓реНрдб рддрдХ рд╕реАрдорд┐рдд рдХрд░рддреА рд╣реИред рдПрдХ рдХреНрд╖реЗрддреНрд░ $VALUES рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ values() рд╡рд┐рдзрд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

рдЦреЗрддреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ, рдХрдХреНрд╖рд╛рдУрдВ, рдирд┐рд░рдВрддрд░ рдореВрд▓реНрдпреЛрдВ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рдирд╛рдо рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рд▓рд╛рдиреА рдХреЗ рдкреНрд░рд╛рдЪреАрди рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдкреВрд▓ рдореЗрдВ рдЗрд╕рдХреЗ рд▓реЗрдЦрди рдХреЗ рдмрд╛рдж рд╕реЗ рдмрд╣реБрдд рд╕реА рдирдИ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИрдВ, рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрдд рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИрдВред
рд╡рд░реНрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдкреВрд▓ рдХрд╛ рдЖрдХрд╛рд░ рднреА 65_535 рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╕реАрдорд┐рдд рд╣реИред рдПрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЧрдард┐рдд рд╡рд░реНрдЧ рдХреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдкреВрд▓ рдХрднреА рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо, рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рд╣реЛрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреАрдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ OpenJDK 14-ea + 29 рд╕реЗ javac рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдЦрд╛рд▓реА рдЧрдгрди рд╡рд░реНрдЧ рдХреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдкреВрд▓ рдореЗрдВ 29 рдШрдЯрдирд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред

рдпрд╣ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЧрдгрдирд╛ рдореЗрдВ 65_534 рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рдЕрдкреНрд░рд╛рдкреНрдп рд╣реИред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо 65_505 рдпрд╛ рдЗрд╕рдХреЗ рдХрд░реАрдм рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдЪрд▓рд┐рдд рдкрд░рд┐рдЪрдп рдореЗрдВ рдЕрдВрддрд┐рдо рд░рд╛рдЧ:

рдорд╛рди static final рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрдЯреЗрдЯрд┐рдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдмреНрд▓реЙрдХ рдореЗрдВ <clinit> рдЬрд╛ рд╕рдХрддрд╛ <clinit> , рдЬрд┐рд╕реЗ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕реНрддрд░ рдкрд░ <clinit> рдирд╛рдордХ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ <clinit> рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдХрд╛ рдмрд╛рдЗрдЯрдХреЛрдб 65_535 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдкрд░рд┐рдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛, рд╣реИ рдирд╛?

рдПрдХ putstatic рд╕реНрдЯреЗрдЯрд┐рдХ рд░рд╛рдЗрдЯ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди 3 рдмрд╛рдЗрдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ 65_535 / 3 = 21_845 рдХрд╛ рдореЛрдЯрд╛ рдЕрдиреБрдорд╛рди рджреЗрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЕрдиреБрдорд╛рди рдЕрддрд┐рд░рдВрдЬрд┐рдд рд╣реИред рдирд┐рд░реНрджреЗрд╢ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рди рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдФрд░ рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдХреАрдорддреА рдмрд╛рдЗрдЯреНрд╕ рднреА рд▓реЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддрдм рднреА рдкрд░рд┐рдгрд╛рдореА рд╕рдВрдЦреНрдпрд╛ 65_505 рд╕реЗ рдХрд╛рдлреА рдХрдо рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:

  • рд╡рд░реНрдЧ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рд▓рдЧрднрдЧ 65_505 рд╣реИ
  • рд╕реНрдереИрддрд┐рдХ рдЕрдВрддрд┐рдо рдХреНрд╖реЗрддреНрд░ рдЖрд░рдВрднреАрдХрд░рдг рддрдВрддреНрд░ рд╣рдореЗрдВ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ - рдЕрдзрд┐рдХрддрдо 21_845 рддрддреНрд╡, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рднреА рдХрдо рд╣реИ

рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдВрддрд┐рдо рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЕрд╕реНрд╡рд╛рд╕реНрдереНрдпрдХрд░ рдЕрдиреБрдХреВрд▓рди рдФрд░ рдХрдХреНрд╖рд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреАрдврд╝реА рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред

Source: https://habr.com/ru/post/hi483392/


All Articles