JVM学习之一----基本Java语句翻译

 
JVM 的编译实例 :
 
简单测试:
1 Test.java
public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
       int a = 0;
       int b = 1;
       int c = 10;
       int d = a + b;
    }
}
 
2 运行:
E:/jvm>javac Test.java
E:/jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
 Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
 
public static void main(java.lang.String[]);
 Code:
   0:   iconst_0
   1:   istore_1
   2:   iconst_1
   3:   istore_2
   4:   bipush 10
   6:   istore_3
   7:   iload_1
   8:   iload_2
   9:   iadd
   10: istore 4
   12: return
}
If else 测试:
public class Test {
    public static void main(String[] args) {
      
       int a = 0;
       int b = 1;
       int c = 2;
      
       if( a > b ) {
          c++;
       } else if ( a < c ) {
          c--;
       } else {
          c = c + 10;
       }
      
       System.out.println(c);
      
    }    
 
}
 
运行测试:
E:/jvm>javac Test.java
E:/jvm>java Test
1
E:/jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
 Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
 
public static void main(java.lang.String[]);
 Code:
   0:   iconst_0
   1:   istore_1
   2:   iconst_1
   3:   istore_2
   4:   iconst_2
   5:   istore_3
   6:   iload_1
   7:   iload_2
   8:   if_icmple       17
   11: iinc    3, 1
   14: goto    33
   17: iload_1
   18: iload_3
   19: if_icmpge       28
   22: iinc    3, -1
   25: goto    33
   28: iload_3
   29: bipush 10
   31: iadd
   32: istore_3
   33: getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   36: iload_3
   37: invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
   40: return
 
}
 
Do while 测试:
public class Test {
    public static void main(String[] args) {
      
       int a = 0;
       int result = 0;
              do {
              result += a;
              a++;
       } while(a<100);
       System.out.println(result);
 } 
}
 
运行测试:
E:/jvm>javac Test.java
E:/jvm>java Test
4950
 
E:/jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
 Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
 
public static void main(java.lang.String[]);
 Code:
   0:   iconst_0
   1:   istore_1
   2:   iconst_0
   3:   istore_2
   4:   iload_2
   5:   iload_1
   6:   iadd
   7:   istore_2
   8:   iinc    1, 1
   11: iload_1
   12: bipush 100
   14: if_icmplt       4
   17: getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   20: iload_2
   21: invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
   24: return
 
}
While do 测试:
public class Test {
    public static void main(String[] args) {
      
       int a = 0;
       int result = 0;
      
       while (a < 100) {
              result += a;
              a++;
       }
      
       System.out.println(result);
      
    }    
 
}
 
运行测试:
E:/jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
 Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
 
public static void main(java.lang.String[]);
 Code:
   0:   iconst_0
   1:   istore_1
   2:   iconst_0
   3:   istore_2
   4:   iload_1
   5:   bipush 100
   7:   if_icmpge       20
   10: iload_2
   11: iload_1
   12: iadd
   13: istore_2
   14: iinc    1, 1
   17: goto    4
   20: getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   23: iload_2
   24: invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
   27: return
 
}
 
循环体测试:
1 Test.java
public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
       double i;
           for (i = 10; i < 100.0; i++) {
               ;                   
           }
    }
}
 
2 运行:
E:/jvm>javac Test.java
E:/jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
 Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
 
public static void main(java.lang.String[]);
 Code:
   0:   ldc2_w #2; //double 10.0d
   3:   dstore_1
   4:   dload_1
   5:   ldc2_w #4; //double 100.0d
   8:   dcmpg
   9:   ifge    19
   12: dload_1
   13: dconst_1
   14: dadd
   15: dstore_1
   16: goto    4
   19: return
 
}
 
Switch 语句测试:
public class Test {
    public static void main(String[] args) {
      
       int a = 0;
       int c = 10;
       switch (a) {
       case 0 : c++;
              break;
        case 1 : c--;
              break;
        default: c++;
       }
       System.out.println(c);
    }    
}
 
运行测试:
E:/jvm>javac Test.java
E:/jvm>java Test
11
 
E:/jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
 Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
 
public static void main(java.lang.String[]);
 Code:
   0:   iconst_0
   1:   istore_1
   2:   bipush 10
   4:   istore_2
   5:   iload_1
   6:   lookupswitch{ //2
                0: 32;
                1: 38;
                default: 44 }
   32: iinc    2, 1
   35: goto    47
   38: iinc    2, -1
   41: goto    47
   44: iinc    2, 1
   47: getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   50: iload_2
   51: invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
   54: return
 
}
 
参数传递:
public class Test {
    public static void main(String[] args) {
      
       int c = add(1,2);
 
       System.out.println(c);
      
    }    
 
    private static int add(int a, int b) {
 
       return a + b;
    }
 
}
 
运行测试:
 
E:/jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
 Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
 
public static void main(java.lang.String[]);
 Code:
   0:   iconst_1
   1:   iconst_2
   2:   invokestatic    #2; //Method add:(II)I
   5:   istore_1
   6:   getstatic       #3; //Field java/lang/System.out:Ljava/io/PrintStream;
   9:   iload_1
   10: invokevirtual   #4; //Method java/io/PrintStream.println:(I)V
   13: return
 
}
 
public class Test {
    public static void main(String[] args) {
      
       int a = 1;
        int b = 10;
        int c = 0;
 
       try {
              int i = 1 / c;
       } catch(Exception e)
       {
               //    
       }
       finally{
             
       }
      
    }    
 
 
 
}
 
E:/jvm>javac Test.java
E:/jvm>java Test
E:/jvm>javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
 Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
 
public static void main(java.lang.String[]);
 Code:
   0:   iconst_1
   1:   istore_1
   2:   bipush 10
   4:   istore_2
   5:   iconst_0
   6:   istore_3
   7:   iconst_1
   8:   iload_3
   9:   idiv
   10: istore 4
   12: goto    25
   15: astore 4
   17: goto    25
   20: astore 5
   22: aload   5
   24: athrow
   25: return
 Exception table:
   from   to target type
     7    12    15   Class java/lang/Exception
 
     7    12    20   any
    15    17    20   any
    20    22    20   any
 
}
 

 synchronized(args)

    3:   monitorenter
   4:   aload_1
   5:   monitorexit
   Exception table:
   from   to  target type
     4     6     9   any
     9    12     9   any

Field 测试:

Test.java

 public class Test {
    public static String username = "username";
    private static int age = 0;
    public static void main(String[] args) {
 String name = username;
 System.out.println(name);
 
    } 

}

E:/jvm>javap -c Test

Compiled from "Test.java"
public class Test extends java.lang.Object{
public static java.lang.String username;
public Test();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
public static void main(java.lang.String[]);
  Code:
   0:   getstatic       #2; //Field username:Ljava/lang/String;
   3:   astore_1
   4:   getstatic       #3; //Field java/lang/System.out:Ljava/io/PrintStream;
   7:   aload_1
   8:   invokevirtual   #4; //Method java/io/PrintStream.println:(Ljava/lang/Str
ing;)V
   11:  return
static {};
  Code:
   0:   ldc     #5; //String username
   2:   putstatic       #2; //Field username:Ljava/lang/String;
   5:   iconst_0
   6:   putstatic       #6; //Field age:I
   9:   return
}
Person类及编译结果:
public   class  Person  {

 String name;
 
int age;


public void setAge(int age)
{
    
this.age = age;
}


public void setName(String name)
{
    
this.name = name;
}


private int getAge()
{
    
return age;
}


private String getName()
{
    
return name;
}


}

E:jvm
> javap  - c Person
Compiled from 
" Person.java "
public   class  Person extends java.lang.Object {
java.lang.String name;

int age;

public Person();
  Code:
   
0:   aload_0
   
1:   invokespecial   #1//Method java/lang/Object."<init>":()V
   4:   return

public void setAge(int);
  Code:
   
0:   aload_0
   
1:   iload_1
   
2:   putfield        #2//Field age:I
   5:   return

public void setName(java.lang.String);
  Code:
   
0:   aload_0
   
1:   aload_1
   
2:   putfield        #3//Field name:Ljava/lang/String;
   5:   return

}



Inner Class:
public   class  Person  {
        
         String name;
         
int age;


        
public void setAge(int age)
        
{
            
this.age = age;
        }

        
        
public void setName(String name)
        
{
            
this.name = name;
        }

        
        
int getAge()
        
{
            
return age;
        }

        
        
private String getName()
        
{
            
return name;
        }


}


class  ManPerson extends Person  {
    
        
int getAge(){
                    
return super.getAge();
            }

    
    }


E:jvm
> javap  - c Person
Compiled from 
" Person.java "
public   class  Person extends java.lang.Object {
java.lang.String name;

int age;

public Person();
  Code:
   
0:   aload_0
   
1:   invokespecial   #1//Method java/lang/Object."<init>":()V
   4:   return

public void setAge(int);
  Code:
   
0:   aload_0
   
1:   iload_1
   
2:   putfield        #2//Field age:I
   5:   return

public void setName(java.lang.String);
  Code:
   
0:   aload_0
   
1:   aload_1
   
2:   putfield        #3//Field name:Ljava/lang/String;
   5:   return

int getAge();
  Code:
   
0:   aload_0
   
1:   getfield        #2//Field age:I
   4:   ireturn

}



E:jvm
>
类的调用实例:
public   class  Person  {
        
         String name;
         
int age;


        
public void setAge(int age)
        
{
            
this.age = age;
        }

        
        
public void setName(String name)
        
{
            
this.name = name;
        }

        
        
int getAge()
        
{
            
return age;
        }

        
        
private String getName()
        
{
            
return name;
        }


}


class  ManPerson extends Person  {
    
        
int getAge(){
                    
return super.getAge();
            }

    
    }

public   class  Test {


 
public static void main(String[] args){

    System.
out.println("test");

    Person p 
= new Person();
    p.setName(
"psetName");
    p.setAge(
22);

    System.
out.println(p.getAge());

 }

}
翻译结果:
E:jvm > javap  - c Test
Compiled from 
" Test.java "
public   class  Test extends java.lang.Object {
public Test();
  Code:
   
0:   aload_0
   
1:   invokespecial   #1//Method java/lang/Object."<init>":()V
   4:   return
public static void main(java.lang.String[]);
  Code:
   
0:   getstatic       #2//Field java/lang/System.out:Ljava/io/PrintStream;
   3:   ldc     #3//String test
   5:   invokevirtual   #4//Method java/io/PrintStream.println:(Ljava/lang/Str
ing;)V
   
8:   new     #5//class Person
   11:  dup
   
12:  invokespecial   #6//Method Person."<init>":()V
   15:  astore_1
   
16:  aload_1
   
17:  ldc     #7//String psetName
   19:  invokevirtual   #8//Method Person.setName:(Ljava/lang/String;)V
   22:  aload_1
   
23:  bipush  22
   
25:  invokevirtual   #9//Method Person.setAge:(I)V
   28:  getstatic       #2//Field java/lang/System.out:Ljava/io/PrintStream;
   31:  aload_1
   
32:  invokevirtual   #10//Method Person.getAge:()I
   35:  invokevirtual   #11//Method java/io/PrintStream.println:(I)V
   38:  return
}

参考文献:The Java TM Virtual Machine Specification

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值