不完整的java字节码

不完整的java字节码,java,bytecode,Java,Bytecode,嗨,我有下面的java代码 public class A{ private String B="test_string"; private int AA; public int C; private int method1() { int a; a=0; return a; } private int method1(int c, String d) { int a; a=c; return a; } } 但是当我使用javap-c命令来获得

嗨,我有下面的java代码

public class A{
private String B="test_string";
private int AA;
public int C;
private int method1()
{
    int a;
    a=0;
    return a;
}


private int method1(int c, String d)
{
    int a;
    a=c;
    return a;
}
}
但是当我使用javap-c命令来获得等效的字节码时

    Compiled from "A.java"
public class A extends java.lang.Object{
public int C;

public A();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   aload_0
   5:   ldc #2; //String test_string
   7:   putfield    #3; //Field B:Ljava/lang/String;
   10:  return

}
从“A.java”编译而来
公共类A扩展了java.lang.Object{
公共INTC;
公共A();
代码:
0:aload_0
1:invokespecial#1;//方法java/lang/Object。“:()V
4:aload_0
5:ldc#2;//字符串测试\u字符串
7:putfield#3;//字段B:Ljava/lang/String;
10:返回
}
我不清楚这里的字节码,因为私有变量和方法声明在哪里


有人能给我解释一下吗?

您需要
-p
选项来显示私人成员:

javap -c -p A
然后您将看到所有内容:

Compiled from "A.java"
public class A {
  private java.lang.String B;

  private int AA;

  public int C;

  public A();
    Code:
       0: aload_0       
       1: invokespecial #1        // Method java/lang/Object."<init>":()V
       4: aload_0       
       5: ldc           #2        // String test_string
       7: putfield      #3        // Field B:Ljava/lang/String;
      10: return        

  private int method1();
    Code:
       0: iconst_0      
       1: istore_1      
       2: iload_1       
       3: ireturn       

  private int method1(int, java.lang.String);
    Code:
       0: iload_1       
       1: istore_3      
       2: iload_3       
       3: ireturn       
}
从“A.java”编译而来
公共A类{
私有java.lang.String B;
私人国际机场;
公共INTC;
公共A();
代码:
0:aload_0
1:invokespecial#1//方法java/lang/Object。“:()V
4:aload_0
5:ldc#2//字符串测试
7:putfield#3//字段B:Ljava/lang/String;
10:返回
私有int method1();
代码:
0:iconst_0
1:istore_1
2:iload_1
3:我轮到你了
私有int方法1(int,java.lang.String);
代码:
0:iload_1
1:istore_3
2:iload_3
3:我轮到你了
}

为什么在私有方法中看不到变量名?我可以看到类字段名。@Pbasak:使用
-v
获取详细信息,这些信息将显示局部变量名。(这不是公共/私有的问题-这是局部变量与字段的关系。)您可能还需要使用
-g
编译局部变量名,以便包含所有的局部变量名,但是用-g编译可以做到这一点。@Pbasak:Well-v只会显示类文件中的变量名。您需要在脑海中区分“编译器提供的信息”和“javap显示的信息”之间的区别,后者显然必须是前者的子集。我明白了,这可能是原因,反编译器无法重现方法的私有变量名。