论坛首页 Java企业应用论坛

Java 中的语法糖 (Syntactic Sugar)

浏览 14908 次
精华帖 (10) :: 良好帖 (11) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-05  
很好,学习了,谢谢LZ的语法糖解析
0 请登录后投票
   发表时间:2011-10-06  
不错、、、很简单明了。。学习了
0 请登录后投票
   发表时间:2011-10-08  
非常实用!谢谢
0 请登录后投票
   发表时间:2011-10-08  
虽说先前已经知道LZ帖子里的内容,但语法糖的定义以前一直没搞清楚,糊糊弄弄的
0 请登录后投票
   发表时间:2011-10-08  
在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用
0 请登录后投票
   发表时间:2011-10-10  
语法糖 搞死过我好几次了~~
0 请登录后投票
   发表时间:2011-10-28   最后修改:2011-10-28
kidneyball 写道
ol_beta 写道
kidneyball 写道
内部类和断言应该不算语法糖吧

也算


那它们的非语法糖形式分别是?

public class Test{
        public static void main(String [] args){
                System.out.println("begin");
                assert false;
                System.out.println("end");
        }
}

反编译
$ javap -v Test
Compiled from "Test.java"
public class Test extends java.lang.Object
  SourceFile: "Test.java"
  minor version: 0
  major version: 50
  Constant pool:
const #1 = Method       #11.#24;        //  java/lang/Object."<init>":()V
const #2 = Field        #25.#26;        //  java/lang/System.out:Ljava/io/PrintStream;
const #3 = String       #27;    //  begin
const #4 = Method       #28.#29;        //  java/io/PrintStream.println:(Ljava/lang/String;)V
const #5 = Field        #9.#30; //  Test.$assertionsDisabled:Z
const #6 = class        #31;    //  java/lang/AssertionError
const #7 = Method       #6.#24; //  java/lang/AssertionError."<init>":()V
const #8 = String       #32;    //  end
const #9 = class        #33;    //  Test
const #10 = Method      #34.#35;        //  java/lang/Class.desiredAssertionStatus:()Z
const #11 = class       #36;    //  java/lang/Object
const #12 = Asciz       $assertionsDisabled;
const #13 = Asciz       Z;
const #14 = Asciz       <init>;
const #15 = Asciz       ()V;
const #16 = Asciz       Code;
const #17 = Asciz       LineNumberTable;
const #18 = Asciz       main;
const #19 = Asciz       ([Ljava/lang/String;)V;
const #20 = Asciz       StackMapTable;
const #21 = Asciz       <clinit>;
const #22 = Asciz       SourceFile;
const #23 = Asciz       Test.java;
const #24 = NameAndType #14:#15;//  "<init>":()V
const #25 = class       #37;    //  java/lang/System
const #26 = NameAndType #38:#39;//  out:Ljava/io/PrintStream;
const #27 = Asciz       begin;
const #28 = class       #40;    //  java/io/PrintStream
const #29 = NameAndType #41:#42;//  println:(Ljava/lang/String;)V
const #30 = NameAndType #12:#13;//  $assertionsDisabled:Z
const #31 = Asciz       java/lang/AssertionError;
const #32 = Asciz       end;
const #33 = Asciz       Test;
const #34 = class       #43;    //  java/lang/Class
const #35 = NameAndType #44:#45;//  desiredAssertionStatus:()Z
const #36 = Asciz       java/lang/Object;
const #37 = Asciz       java/lang/System;
const #38 = Asciz       out;
const #39 = Asciz       Ljava/io/PrintStream;;
const #40 = Asciz       java/io/PrintStream;
const #41 = Asciz       println;
const #42 = Asciz       (Ljava/lang/String;)V;
const #43 = Asciz       java/lang/Class;
const #44 = Asciz       desiredAssertionStatus;
const #45 = Asciz       ()Z;

{
static final boolean $assertionsDisabled;

public Test();
  Code:
   Stack=1, Locals=1, Args_size=1
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return
  LineNumberTable:
   line 1: 0


public static void main(java.lang.String[]);
  Code:
   Stack=2, Locals=1, Args_size=1
   0:   getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   3:   ldc     #3; //String begin
   5:   invokevirtual   #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   8:   getstatic       #5; //Field $assertionsDisabled:Z
   11:  ifne    22
   14:  new     #6; //class java/lang/AssertionError
   17:  dup
   18:  invokespecial   #7; //Method java/lang/AssertionError."<init>":()V
   21:  athrow
   22:  getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   25:  ldc     #8; //String end
   27:  invokevirtual   #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   30:  return
  LineNumberTable:
   line 3: 0
   line 4: 8
   line 5: 22
   line 6: 30

  StackMapTable: number_of_entries = 1
   frame_type = 22 /* same */


static {};
  Code:
   Stack=1, Locals=0, Args_size=0
   0:   ldc_w   #9; //class Test
   3:   invokevirtual   #10; //Method java/lang/Class.desiredAssertionStatus:()Z
   6:   ifne    13
   9:   iconst_1
   10:  goto    14
   13:  iconst_0
   14:  putstatic       #5; //Field $assertionsDisabled:Z
   17:  return
  LineNumberTable:
   line 1: 0

  StackMapTable: number_of_entries = 2
   frame_type = 13 /* same */
   frame_type = 64 /* same_locals_1_stack_item */
     stack = [ int ]


}

其实是加入了
if (!$assertionsDisabled) throw new AssertionError();
0 请登录后投票
   发表时间:2011-10-29  
学习了 介绍的不错
0 请登录后投票
   发表时间:2011-10-29  
这个总结太好了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics