Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Java ClassÎļþÏê½â
 
À´Ô´£ºImportNew ·¢²¼ÓÚ 2015-7-2
  2558  次浏览      27
 

Java ClassÎļþÖаüº¬ÒÔÏÂÐÅÏ¢£º

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];    //ÊôÐÔ±í

}

1. ͨ¹ýʵÀýÀ´¿´

public interface InterA {

    void interA();
} 
public interface InterB {
    String interB(int i);
}
public interface InterC {
    void interC();
}
public class Base implements InterA {

    private int baseInt;
    protected String baseString;

    public int getBaseInt() {
        return baseInt;
    }
    public void setBaseInt(int baseInt) {
        this.baseInt = baseInt;
    }

    @Override
    public void interA() {
        System.out.println("the interA in Base");
    }
} 

 public class Sub extends Base implements InterB, InterC {

    private int subInt;
    private static String subString;
    private static Object subObject;

    public int getSubInt() {
        return subInt;
    }
    public void setSubInt(int subInt) {
        this.subInt = subInt;
    }
    public static String getSubString() {
        return subString;
    }
    public static void setSubString(String subString) {
        Sub.subString = subString;
    }
    public static Object getSubObject() {
        return subObject;
    }
    public static void setSubObject(Object subObject) {
        Sub.subObject = subObject;
    }

    @Override
    public void interC() {
        System.out.println("the interC in Sub");
    }

    @Override
    public String interB(int i) {
        return "the interB in Sub";
    }
}

ÎÒÃÇʹÓÃWinHex²é¿´SubÀàµÄ.classÎļþ£º

2. ħÊý

×÷ÓãºÈ·¶¨¸ÃÎļþÊÇ·ñÊÇÐéÄâ»ú¿É½ÓÊܵÄclassÎļþ¡£javaµÄħÊýͳһΪ 0xCAFEBABE (À´Ô´ÓÚÒ»¿î¿§·È)¡£

ÇøÓò£ºÎļþµÚ0~3×Ö½Ú¡£

3. °æ±¾ºÅ

×÷Ó㺱íʾclassÎļþµÄ°æ±¾£¬ÓÉminorversionºÍmajorversion×é³É¡£

ÇøÓò£ºÎļþµÚ4~7×Ö½Ú¡£

Èç

51´ú±í£¬jdkΪ1.7.0

ÐèҪעÒâµÄÊÇjava°æ±¾ºÅÊÇ´Ó45¿ªÊ¼µÄ£¬´ó°æ±¾·¢²¼£¬Ö÷°æ±¾ºÅ+1.¸ß°æ±¾µÄjdkÄÜÏòϼæÈÝÒÔǰ°æ±¾µÄclassÎļþ£¬µ«²»¼æÈÝÒÔºó°æ±¾µÄclassÎļþ¡£

4. ³£Á¿³Ø

³£Á¿³ØµÄ´óСÊDz»¹Ì¶¨µÄ£¬¸ù¾ÝÄãµÄÀàÖеij£Á¿µÄ¶àÉÙ¶ø¶¨£¬ËùÒÔÔÚ³£Á¿³ØµÄÈë¿Ú£¬·ÅÖÃÁËÒ»¸öu2ÀàÐ͵ıíʾ³£Á¿³ØÖг£Á¿¸öÊýµÄ³£Á¿³ØÈÝÁ¿¼ÆÊýÆ÷¡£¼ÆÊýÆ÷´Ó1¿ªÊ¼£¬µÚ0λÓÐÌØÊ⺬Ò壬±íʾָÏò³£Á¿³ØµÄË÷ÒýÖµÊý¾Ý²»ÒýÓÃÈκÎÒ»¸ö³£Á¿³ØÏîÄ¿¡£³ØÖеÄÊý¾ÝÏî¾ÍÏñÊý×éÒ»ÑùÊÇͨ¹ýË÷Òý·ÃÎʵġ£

ÎÒÃÇ¿ÉÒÔÇå³þµÄ¿´µ½£¬ÎÒÃdz£Á¿³ØÖÐÓÐ63-1=62¸ö³£Á¿¡£ÕâЩ³£Á¿ÊÇÊ²Ã´ÄØ£¿

Òª´æ·Å×ÖÃæÁ¿LiteralºÍ·ûºÅÒýÓÃSymbolic References¡£

×ÖÃæÁ¿¿ÉÄÜÊÇÎı¾×Ö·û´®£¬»òfinalµÄ³£Á¿Öµ¡£

·ûºÅÒýÓðüÀ¨ÒÔÏ£º

Àà»ò½Ó¿ÚÈ«ÏÞ¶¨Ãû Full Qualified Name

×Ö¶ÎÃû³ÆºÍÃèÊö·û Descriptor

·½·¨Ãû³ÆºÍÃèÊö·û

ÎÒÃÇʹÓ÷´±àÒ빤¾ß²é¿´Ò»Ï£º

E:\program\JVM\bin\com\gissky\clazz>javap -v Sub.class
Classfile /E:/program/JVM/bin/com/gissky/clazz/Sub.class
Last modified 2015-2-22; size 1363 bytes
MD5 checksum 2dc77c79e4790422407eb7092085883c
Compiled from "Sub.java"
public class com.gissky.clazz.Sub extends com.gissky. clazz.Base implements com.gissky.clazz.InterB,com.gissky.clazz.InterC
SourceFile: "Sub.java"
minor version: 0
major version: 51
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Class #2 // com/gissky/clazz/Sub ¡úÀàºÍ½Ó¿ÚµÄÈ«ÏÞ¶¨Ãû
#2 = Utf8 com/gissky/clazz/Sub
#3 = Class #4 // com/gissky/clazz/Base
#4 = Utf8 com/gissky/clazz/Base
#5 = Class #6 // com/gissky/clazz/InterB
#6 = Utf8 com/gissky/clazz/InterB
#7 = Class #8 // com/gissky/clazz/InterC
#8 = Utf8 com/gissky/clazz/InterC
#9 = Utf8 subInt
#10 = Utf8 I
#11 = Utf8 subString
#12 = Utf8 Ljava/lang/String;
#13 = Utf8 subObject
#14 = Utf8 Ljava/lang/Object;
#15 = Utf8 <init>
#16 = Utf8 ()V
#17 = Utf8 Code
#18 = Methodref #3.#19 // com/gissky/clazz/Base."<init>":()V
#19 = NameAndType #15:#16 // "<init>":()V
#20 = Utf8 LineNumberTable
#21 = Utf8 LocalVariableTable
#22 = Utf8 this
#23 = Utf8 Lcom/gissky/clazz/Sub;
#24 = Utf8 getSubInt
#25 = Utf8 ()I
#26 = Fieldref #1.#27 // com/gissky/clazz/Sub.subInt:I ¡ú ÀàÖÐ×ֶεķûºÅÒýÓÃ
#27 = NameAndType #9:#10 // subInt:I ¡ú ÀàÖÐ×ֶεIJ¿·Ö·ûºÅÒýÓÃÖ®Ãû³ÆºÍÀàÐÍ
#28 = Utf8 setSubInt
#29 = Utf8 (I)V
#30 = Utf8 getSubString
#31 = Utf8 ()Ljava/lang/String;
#32 = Fieldref #1.#33 // com/gissky/clazz/Sub.subString:Ljava/lang/String;
#33 = NameAndType #11:#12 // subString:Ljava/lang/String;
#34 = Utf8 setSubString
#35 = Utf8 (Ljava/lang/String;)V
#36 = Utf8 getSubObject
#37 = Utf8 ()Ljava/lang/Object;
#38 = Fieldref #1.#39 // com/gissky/clazz/Sub.subObject:Ljava/lang/Object;
#39 = NameAndType #13:#14 // subObject:Ljava/lang/Object;
#40 = Utf8 setSubObject
#41 = Utf8 (Ljava/lang/Object;)V
#42 = Utf8 interC
#43 = Fieldref #44.#46 // java/lang/System.out:Ljava/io/PrintStream;
#44 = Class #45 // java/lang/System
#45 = Utf8 java/lang/System
#46 = NameAndType #47:#48 // out:Ljava/io/PrintStream;
#47 = Utf8 out
#48 = Utf8 Ljava/io/PrintStream;
#49 = String #50 // the interC in Sub
#50 = Utf8 the interC in Sub
#51 = Methodref #52.#54 // java/io/PrintStream.println:(Ljava/lang/String;)V
#52 = Class #53 // java/io/PrintStream
#53 = Utf8 java/io/PrintStream
#54 = NameAndType #55:#35 // println:(Ljava/lang/String;)V
#55 = Utf8 println
#56 = Utf8 interB
#57 = Utf8 (I)Ljava/lang/String;
#58 = String #59 // the interB in Sub ¡ú·½·¨ÖÐÓõ½µÄString³£Á¿
#59 = Utf8 the interB in Sub
#60 = Utf8 i
#61 = Utf8 SourceFile
#62 = Utf8 Sub.java

³£Á¿³ØÖеÄÏîÄ¿ÀàÐÍÈçÏ£º

CONSTANT_Utf8_info tag±ê־λΪ1, UTF-8±àÂëµÄ×Ö·û´®

CONSTANT_Integer_info tag±ê־λΪ3£¬ ÕûÐÎ×ÖÃæÁ¿

CONSTANT_Float_info tag±ê־λΪ4£¬ ¸¡µãÐÍ×ÖÃæÁ¿

CONSTANT_Long_info tag±ê־λΪ5£¬ ³¤ÕûÐÎ×ÖÃæÁ¿

CONSTANT_Double_info tag±ê־λΪ6£¬ Ë«¾«¶È×ÖÃæÁ¿

CONSTANT_Class_info tag±ê־λΪ7£¬ Àà»ò½Ó¿ÚµÄ·ûºÅÒýÓÃ

CONSTANT_String_info tag±ê־λΪ8£¬×Ö·û´®ÀàÐ͵Ä×ÖÃæÁ¿

CONSTANT_Fieldref_info tag±ê־λΪ9, ×ֶεķûºÅÒýÓÃ

CONSTANT_Methodref_info tag±ê־λΪ10£¬ÀàÖз½·¨µÄ·ûºÅÒýÓÃ

CONSTANT_InterfaceMethodref_info tag±ê־λΪ11, ½Ó¿ÚÖз½·¨µÄ·ûºÅÒýÓÃ

CONSTANT_NameAndType_info tag ±ê־λΪ12£¬×ֶκͷ½·¨µÄÃû³ÆÒÔ¼°ÀàÐ͵ķûºÅÒýÓÃ

5. Àà»ò½Ó¿Ú·ÃÎʱêÖ¾

±íʾÀà»òÕß½Ó¿Ú·½ÃæµÄ·ÃÎÊÐÅÏ¢£¬±ÈÈçClass±íʾµÄÊÇÀ໹Êǽӿڣ¬ÊÇ·ñΪpublic¡¢static¡¢finalµÈ¡££¬ÏÂÃæÎÒÃǾÍÀ´¿´¿´TestClassµÄ·ÃÎʱêʾ¡£ClassµÄ·ÃÎʱê־ֵΪ0¡Á0021£º

¸ù¾ÝÇ°ÃæËµµÄ¸÷ÖÖ·ÃÎʱêʾµÄ±ê־룬ÎÒÃÇ¿ÉÒÔÖªµÀ£º0¡Á0021=0¡Á0001|0¡Á0020 Ò²¼´ACC_PUBLIC ºÍ ACC_SUPERÎªÕæ£¬ÆäÖÐACC_PUBLIC´ó¼ÒºÃÀí½â£¬ACC_SUPERÊÇjdk1.2Ö®ºó±àÒëµÄÀà¶¼»á´øÓеıêÖ¾¡£

6. ÀàË÷Òý¡¢¸¸ÀàË÷ÒýÓë½Ó¿ÚË÷Òý¼¯ºÏ

ClassÎļþÖÐÓÉÕâ3ÏîÊý¾ÝÀ´È·¶¨ÀàµÄ¼Ì³Ð¹ØÏµ¡£

ÀàË÷ÒýºÍ¸¸ÀàË÷Òý¶¼ÊÇÖ¸Ïò³£Á¿³ØÖеij£Á¿Ë÷Òý£º

½ô½ÓןóÃæÊÇÒ»¸ö½Ó¿ÚµÄ¼ÆÊýÆ÷ºÍ½Ó¿ÚÃèÊö·û£º

7. ×Ö¶Î±í¼¯ºÏ

×÷ÓãºÃèÊö½Ó¿Ú»òÕßÀàÖÐÉùÃ÷µÄÀà±äÁ¿ÒÔ¼°ÊµÀý±äÁ¿£¬²»°üÀ¨·½·¨Öеľֲ¿±äÁ¿¡£

½ô½Ó׎ӿÚË÷Òý¼¯ºÏÖ®ºóµÄ2×Ö½ÚÊÇ×ֶμÆÊýÆ÷£º

±íʾÎÒÃÇÀàÖÐÓÐ3¸ö×ֶΣ¬ÕâÀï±ãÊÇsubInt¡¢subString¡¢subObject 3¸ö×ֶΡ£½ô½ÓÆäºóµÄÊÇ×Ö¶Î±í£¬×ֶαí½á¹¹Îª£º

field_info
{ 
    u2                               access_flags; 
    u2                               name_index; 
    u2                               descriptor_index; 
    u2                               attributes_count; 
    attribute_info          attributes[attributes_count]; 
}

access_flagsÏîµÄÖµÊÇÓÃÓÚ¶¨Òå×ֶα»·ÃÎÊȨÏ޺ͻù´¡ÊôÐÔµÄÑÚÂë±êÖ¾¡£È¡Öµ·¶Î§ÈçÏÂ±í£º

ÃèÊö·û±êʶ×Ö·ûº¬Ò壺

V ±íÊ¾ÌØÊâÀàÐÍvoid¡£

¶ÔÓÚÊý×éÀàÐÍ£¬Ã¿Ò»¸öά¶È½«Ê¹ÓÃÒ»¸öǰÖõġ±["×Ö·ûÀ´ÃèÊö£¬ÈçÒ»¸ö¶¨ÒåµÄ"java.lang.String[][]¡°ÀàÐ͵ĶþάÊý×飬½«±»¼Ç¼Ϊ:¡±[[Ljava/lang/String;",Ò»¸öÕûÐÍÊý×é"int[]¡°½«±»¼Ç¼Ϊ¡±[I"

¸¸ÀàÖеÄ×ֶβ»»á³öÏÖÔÚ×ÓÀàµÄ×ֶαíÖС£

8. ·½·¨±í¼¯ºÏ

×Ö¶Î±í¼¯ºÏ½áÊøºó±ãÊÇ·½·¨±í¼¯ºÏ¡£

×÷ÓãºÃèÊö¸ÃÀàÖеķ½·¨¡£

ºÍ×ֶαíÒ»Ñù£¬Ê¹ÓÃÒ»¸öu2ÀàÐ͵ķ½·¨¼ÆÊýÆ÷£¬¼Ç¼¸ÃÀàÖз½·¨µÄ¸öÊý¡£

±íʾÎÒÃǵÄÀàÖÐÓÐ9¸ö·½·¨¡£

·½·¨±íµÄ½á¹¹ÈçÏÂͼËùʾ

ÆäÖÐname_indexºÍdescriptor_index±íʾµÄÊÇ·½·¨µÄÃû³ÆºÍÃèÊö·û£¬ËûÃÇ·Ö±ðÊÇÖ¸Ïò³£Á¿³ØµÄË÷Òý¡£ÕâÀïÐèÒª½á½âÊÍһϷ½·¨µÄÃèÊö·û£¬·½·¨µÄÃèÊö·ûµÄ½á¹¹Îª£º£¨²ÎÊýÁÐ±í£©·µ»ØÖµ£¬±ÈÈçpublic int instanceMethod(int param)µÄÃèÊö·ûΪ£º£¨I£©I£¬±íʾ´øÓÐÒ»¸öintÀàÐͲÎÊýÇÒ·µ»ØÖµÒ²ÎªintÀàÐ͵ķ½·¨£¬·½·¨java.lang.String.toString()µÄÃèÊö·ûΪ"()Ljava/lang/String;"£¬int IndexOf(char[] source,int sourceOffset,int sourceCount,char[] target int targetOffset,int targetCount,int fromIndex) ±íʾΪ([CII[CII)I¡£½ÓÏÂÀ´¾ÍÊÇÊôÐÔÊýÁ¿ÒÔ¼°ÊôÐÔ±íÁË£¬·½·¨±íºÍ×ֶαíËäÈ»¶¼ÓÐ ÊôÐÔÊýÁ¿ºÍÊôÐÔ±í£¬µ«ÊÇËûÃÇÀïÃæËù°üº¬µÄÊôÐÔÊDz»Í¬¡£

Èç¹û¸¸Àà·½·¨ÔÚ×ÓÀàÖÐûÓб»ÖØÐ´£¨@Override£©£¬·½·¨±íÖоͲ»»á³öÏÖÀ´×Ô¸¸ÀàµÄ·½·¨ÐÅÏ¢¡£

9. ÊôÐÔ±í¼¯ºÏ

ÉÏÃæµÄ·½·¨±íÖÐÎÒÃǾͿ´µ½<init>·½·¨ÓÐÒ»¸öCodeµÄÊôÐÔ¡£ÔÚ±¾½ÚÎÒÃǽ«²ûÊöÕâЩÊôÐÔ£º

CodeÊôÐÔ£º

¸ÃÊôÐÔÀïÖ÷Òª´æ·ÅÓÉjavac±àÒëÆ÷´¦ÀíºóµÃµ½µÄ×Ö½ÚÂëÖ¸Áî¡£

ÆäÖÐattribute_name_indexÖ¸Ïò³£Á¿³ØÖÐֵΪCodeµÄ³£Á¿£¬attribute_lengthµÄ³¤¶È±íʾCodeÊôÐÔ±íµÄ³¤¶È£¨ÕâÀï ÐèҪעÒâµÄʱºò³¤¶È²»°üÀ¨attribute_name_indexºÍattribute_lengthµÄ6¸ö×ֽڵij¤¶È£©¡£

max_stack±íʾ×î´óÕ»Éî¶È£¬ÐéÄâ»úÔÚÔËÐÐʱ¸ù¾ÝÕâ¸öÖµÀ´·ÖÅäÕ»Ö¡ÖвÙ×÷ÊýµÄÉî¶È£¬¶ømax_locals´ú±íÁ˾ֲ¿±äÁ¿±íËùÐèµÄ´æ´¢¿Õ¼ä¡£

max_localsµÄµ¥Î»Îªslot£¬slotÊÇÐéÄâ»úΪ¾Ö²¿±äÁ¿·ÖÅäÄÚ´æµÄ×îСµ¥Ôª£¬ÔÚÔËÐÐʱ£¬¶ÔÓÚ²»³¬¹ý32λÀàÐ͵ÄÊý¾ÝÀàÐÍ£¬±ÈÈç byte,char,intµÈÕ¼ÓÃ1¸öslot£¬¶ødoubleºÍLongÕâÖÖ64λµÄÊý¾ÝÀàÐÍÔòÐèÒª·ÖÅä2¸öslot£¬ÁíÍâmax_localsµÄÖµ²¢²»ÊÇËùÓоֲ¿±äÁ¿ËùÐèÒªµÄÄÚ´æÊýÁ¿Ö®ºÍ£¬ÒòΪslotÊÇ¿ÉÒÔÖØÓõ쬵±¾Ö²¿±äÁ¿³¬¹ýÁËËüµÄ×÷ÓÃÓòÒԺ󣬾ֲ¿±äÁ¿ËùÕ¼ÓõÄslot¾Í»á±»ÖØÓ᣷½·¨²ÎÊý¡¢ÏÔʾÒì³£´¦ÀíÆ÷µÄ²ÎÊý¡¢·½·¨ÌåÖж¨ÒåµÄ¾Ö²¿±äÁ¿¶¼ÒªÊ¹Óþֲ¿±äÁ¿±íÀ´´æ·Å¡£

code_length´ú±íÁË×Ö½ÚÂëÖ¸ÁîµÄÊýÁ¿£¬¶øcode±íʾµÄÊÇ×Ö½ÚÂëÖ¸Á´ÓÉÏͼ¿ÉÒÔÖªµÀcodeµÄÀàÐÍΪu1,Ò»¸öu1ÀàÐ͵ÄȡֵΪ0x00-0xFF,¶ÔÓ¦µÄÊ®½øÖÆÎª0-255£¬Ä¿Ç°ÐéÄâ»ú¹æ·¶ÒѾ­¶¨ÒåÁË200¶àÌõÖ¸Áî¡£

exception_table_lengthÒÔ¼°exception_table·Ö±ð´ú±í·½·¨¶ÔÓ¦µÄÒì³£ÐÅÏ¢¡£

attributes_countºÍattribute_info·Ö±ð±íʾÁËCodeÊôÐÔÖеÄÊôÐÔÊýÁ¿ºÍÊôÐÔ±í£¬´ÓÕâÀï¿ÉÒÔ¿´³öClassµÄÎļþ½á¹¹ÖУ¬ÊôÐÔ±íÊǺÜÁé»îµÄ£¬Ëü¿ÉÒÔ´æÔÚÓÚClassÎļþ£¬·½·¨±í£¬×ֶαíÒÔ¼°CodeÊôÐÔÖС£

ÐÞ¸ÄÒ»ÏÂSubÖеÄInterB·½·¨£º

@Override

    public int interB(int i){
        int x=0;
        try{
            x+=i;
            return x;
        }catch(Exception e){
            x=-1;
            return x;
        }finally{
            x=3;
        }
    }

´ó¼Ò²»·ÁÏȲÂÒ»ÏÂÕâ¸öº¯ÊýµÄ½á¹ûÊÇʲô£¿¼ÙÈçÔÚtry¿éÖз¢ÉúÒì³££¬½á¹¹ÓÖÊÇʲô£¿ÎÒÏàÐŶÔJavaÓïÑÔÊìϤµÄÅóÓÑ£¬¿Ï¶¨ÖªµÀ´ð°¸¡£

ʹÓ÷´±àÒ빤¾ß²é¿´£º

public int interB(int);

    flags: ACC_PUBLIC

    Code:

      stack=2, locals=6, args_size=2

         0: iconst_0

         1: istore_2

         2: iload_2

         3: iload_1

         4: iadd

         5: istore_2

         6: iload_2

         7: istore        5

         9: iconst_3

        10: istore_2

        11: iload         5

        13: ireturn

        14: astore_3

        15: iconst_m1

        16: istore_2

        17: iload_2

        18: istore        5

        20: iconst_3

        21: istore_2

        22: iload         5

        24: ireturn

        25: astore        4

        27: iconst_3

        28: istore_2

        29: aload         4

        31: athrow

      Exception table:

         from    to   target    type

             2       9       14         Class java/lang/Exception

             2       9       25         any

            14      20    25         any

      LineNumberTable:

        line 35: 0

        line 37: 2

        line 38: 6

        line 43: 9

        line 38: 11

        line 39: 14

        line 40: 15

        line 41: 17

        line 43: 20

        line 41: 22

        line 42: 25

        line 43: 27

        line 44: 29

      LocalVariableTable:

        Start  Length  Slot  Name   Signature

               0      32        0      this         Lcom/gissky/clazz/Sub;

               0      32        1        i             I

               2      30        2        x            I

              15    10        3        e            Ljava/lang/Exception;

      StackMapTable: number_of_entries = 2

           frame_type = 255 /* full_frame */

          offset_delta = 14

          locals = [ class com/gissky/clazz/Sub, int, int ]

          stack = [ class java/lang/Exception ]

           frame_type = 74 /* same_locals_1_stack_item */

          stack = [ class java/lang/Throwable ]

}

´Ó args_size=2ÕâÌõ·´±àÒë´úÂ룬ÎÒÃÇ¿ÉÒÔÖªµÀ£¬ÔÚpublic int interB(int i)Õâ¸ö·½·¨ÖÐÓÐ6¸ö¾Ö²¿±äÁ¿£¬2¸ö²ÎÊý£¬¿ÉÊÇÎÒÃǵĺ¯ÊýÖÐÃ÷Ã÷Ö»ÓÐÒ»¸ö²ÎÊýô¡­¡­ÕâÊÇÒòΪ±àÒëÆ÷»áΪÿһ¸öʵÀýº¯Êý°üÀ¨¹¹ÔìÆ÷Ìí¼ÓÒ»¸ö²ÎÊýthis£¬ÔÚJVMµ÷Óø÷½·¨µÄʱºò»á¸ÃÐβδ«µÝÒ»¸öʵ²Î¡ª·½·¨ËùÔÚ¶ÔÏóµÄ×ÔÉí¡£

Exception table:

from to target type

2 9 14 Class java/lang/Exception

2 9 25 any

14 20 25 any

Éϱí±íÍ·±íʾ£¬µ±×Ö½ÚÂëÔÚformÐе½toÐУ¨²»°üÀ¨toÐУ©³öÏÖÀàÐÍΪtypeµÄÒì³££¬Ôòתµ½µÚtargetÐмÌÐø´¦Àí¡£

´Ó·½·¨µÄÒì³£±íÖУ¬ÎÒÃÇ¿ÉÒÔ¿´µ½Õâ¸öº¯ÊýÓÐ3ÌõÖ´Ðз¾¶£º

ÕâÀïÎÒÃDzåÈë²ûÊöÒ»ÏÂLineNumberTable±íµÄº¬Ò壺Ëü±íʾJavaÔ´ÂëÐкÅÓë×Ö½ÚÂëÐкÅÖ®¼äµÄ¶ÔÓ¦¹ØÏµ¡£

¶ÔÕÕÉÏͼ£¬ÎÒÃÇÄÜÇåÎúµÄ¿´³öÕâ3Ìõ·¾¶¡£

ÖªµÀÁ˸÷½·¨Ö´ÐеÄ3Ìõ·¾¶£¬ÎÒÃÇÒ²¾ÍÖªµÀ¸Õ²ÅÎÒÃǵÄÄǸöÎÊÌâÓÐ3¸ö´ð°¸£ºÃ»ÓÐÒì³£ÊÇΪx+i£»try¿éÖгöÏÖExceptionÀàÐ͵ĴíÎóʱ£¬·µ»Ø-1£»³öÏÖExceptionÒÔÍâµÄÈκÎÒì³£·½·¨·ÇÕý³£½áÊø£¬Ã»Óзµ»ØÖµ¡£

LocalVariableTable:

Start Length Slot Name Signature

0 32 0 this Lcom/gissky/clazz/Sub;

0 32 1 i I

2 30 2 x I

15 10 3 e Ljava/lang/Exception;

LocalVariableTable±íʾ¾Ö²¿±äÁ¿±í£¬ÃèÊö·½·¨Öоֲ¿±äÁ¿¡£

Èç¹ûÄã¶Ô·µ»ØµÄ´ð°¸ÄÜÀí½âµÄ»°£¬ÄÇôÎÒÏàÐÅÄãÒ²¿Ï¶¨ÖªµÀ£¬ÎÒÃǺ¯ÊýÖÐÖ»ÓÐ4¸ö²ÎÊý£¬µ«max_localsÈ´µÈÓÚ6¡£²»¶®µÄ»°×Ðϸ¿´Ò»ÏÂCodeÖÐ×Ö½ÚÂëµÄÖ´Ðйý³Ì±ä¿ÉÒÔÀí½âÁË¡£

Ò»¸ö·½·¨ÔÚÖ´ÐÐʱÐèÒª¶à´óµÄ¾Ö²¿±äÁ¿¿Õ¼äÔÚ±àÒëʱÆÚ¾ÍÖªµÀÁË£¬·½·¨Ö´ÐÐÆÚ¼ä²»»á¸Ä±ä¾Ö²¿±äÁ¿±íµÄ´óС¡£

Signature ÊôÐÔ£º

¸ÃÊôÐÔÊÇÔÚJDK1.5ÐÂÔöµÄ¡£¸ÃÊôÐÔ¿ÉÓÃÓÚÀà¡¢ÊôÐÔ±íºÍ·½·¨±í½á¹¹µÄÊôÐÔ±íÖС£Ê¹Ó÷ºÐÍÇ©ÃûÈç¹û°üº¬ÁËÀàÐͱäÁ¿£¨Type Variables£©»ò²ÎÊý»¯ÀàÐÍ£¨Parameterized Types£©£¬ÔòSignature ÊôÐÔ»áΪËü¼Ç¼·ºÐÍÇ©ÃûÐÅÏ¢¡£µ±ÎÒÃÇÒª·ºÐÍÀàÖÐÄõ½·ºÐ͵Äʵ¼ÊÀàÐ͵Äʱºò·Ç³£ÓÐÓá£

ʵÀý£º

ÔÚʹÓÃHibernateʱ£¬ÎÒϰ¹ß½«ÎªDao²ã·â×°Ò»¸ö·ºÐÍ»ùÀ࣬À´·ÅÖÃһЩͨÓõķ½·¨£¬¶øHibernateÓкܶ෽·¨¶¼Òª´«µÝÒ»¸öPOJOµÄÀàÐÍ£¬È»ºó½øÐвéѯ£¬Èçload·½·¨¡£ÎÒÃǹ¹½¨ÕâÑùµÄÒ»¸ö»ùÀࣺ

public abstract class BaseDaoImpl<T, PK extends Serializable> extends HibernateDaoSupport implements BaseDao<T, PK>

ÄÇôloadÖÐҪʹÓõÄPOJOÀàÐͱãÊÇTµÄʵ¼ÊÀàÐÍ¡£ÔõôÀ´Äǵ¹Õâ¸öÊôÐÔÄØ£¿ÕâÀï±ßҪʹÓõ½SignatureÊôÐÔÁË¡£

public abstract class BaseDaoImpl<T, PK extends Serializable> extends HibernateDaoSupport implements BaseDao<T, PK> {

private Class<T> entityClass;

@SuppressWarnings("unchecked")
public BaseDaoImpl() {
//class OrgDao extends BaseDaoImpl<Organization, String> implements OrgDao {}
Class c = this.getClass(); //·µ»ØµÄÊÇʹÓÃnew´´½¨µÄ·ºÐÍÀà¶ÔÓ¦µÄ¶ÔÏóµÄclass¶ÔÏó¡£
Type type = c.getGenericSuperclass(); //È¡µÃ¸Ã¶ÔÏóµÄ·ºÐÍÀà
//È¡µÃ·ºÐͶÔÓ¦µÄÕæÕýµÄclass£¬²¢·Åµ½Êý×éÖÐ
Type[] types = ((ParameterizedType)type).getActualTypeArguments();
entityClass = (Class<T>) types[0];
}

Õâʱ£¬getByIdÖоͿÉÒÔÖ±½ÓʹÓÃÁË£º

public T getById(PK id) {
return (T) getHibernateTemplate().load(entityClass, id);
}
   
2558 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ