七段

          無論怎樣,請讓我先感謝一下國家。

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            35 Posts :: 2 Stories :: 7 Comments :: 0 Trackbacks
          Less Code == [Less Bugs,Better Readability,Less programmers to hire, Less organizational communication costs, Less maitain cost]
          Less Code != [Higher Productivity,Better Performance]
          1, import static
          remove duplicated namespace
          what does it do?
          package com.toolbox.lang;
          public class ClassWithStaticMember {
            public static final String name="value";
            public static String say() {
              return "111";
            }
            public static String say(String msg) {
              return msg;
            }
          }
          package com.toolbox.lang;
          import static com.toolbox.lang.ClassWithStaticMember.say;
          import static com.toolbox.lang.ClassWithStaticMember.name;
          public class Test {
            public static void main(String[] args) {
              System.out.println(say());
              System.out.println(say(name));
            }
          }
          

          import同名的member
          意味著不同方法簽名的member都會import, e.g. say() and say(String msg)
          const #45 = Method      #46.#48;        //  com/toolbox/lang/ClassWithStaticMember.say:()Ljava/lang/String;
          const #46 = class       #47;    //  com/toolbox/lang/ClassWithStaticMember
          const #47 = Asciz       com/toolbox/lang/ClassWithStaticMember;
          const #48 = NameAndType #49:#38;//  say:()Ljava/lang/String;
          const #49 = Asciz       say;
          const #62 = Method      #46.#63;        //  com/toolbox/lang/ClassWithStaticMember.say:(Ljava/lang/String;)Ljava/lang/String;
          const #63 = NameAndType #49:#64;//  say:(Ljava/lang/String;)Ljava/lang/String;

          copy primitive type value
          意味著編譯后,Test class中static import的String, int 等是值的寫入class中,不會在去引用ClassWithStaticMember
             43:  ldc     #55; //String value
             45:  invokestatic    #57; //Method com/toolbox/lang/ClassWithStaticMember.say:(Ljava/lang/String;)Ljava/lang/String;
             48:  invokevirtual   #50; //Method java/io/PrintStream.println:(Ljava/lang/String;)V

          when to use it?
          Do it when frequent access to static members from one or two classes
          Not Do it when has naming conflict or complicated class body, otherwise, make you confuse with so many polluting namespace

          2, apply lanuage feature
          2.1 String contact
          String s = "a" + "b";
          compile into:
          const #15 = Asciz       ([Ljava/lang/String;)V;
          const #16 = String      #17;    //  ab
          if String constance + String constance
          直接編譯成結(jié)果寫入class
          else
          使用StringBuilder.append
          So always use "+" unless you need to use StringBuffer or other specific class
          3, inner class {{}}
            List<String> list = new ArrayList<String>() {{add("data1");add("data2");}};
          4, use PMD to find and remove duplicated code

          已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


          JavaEye推薦




          文章來源:http://sevenduan.javaeye.com/blog/504911
          posted on 2009-10-31 14:49 sevenduan 閱讀(310) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 太湖县| 天等县| 郧西县| 鄂托克前旗| 巴林左旗| 区。| 阿尔山市| 颍上县| 布拖县| 汤原县| 巢湖市| 常熟市| 无锡市| 正镶白旗| 吕梁市| 博湖县| 昭觉县| 临澧县| 同江市| 麻阳| 临沂市| 招远市| 唐海县| 英德市| 白沙| 闵行区| 雷波县| 富蕴县| 谷城县| 吉隆县| 迁西县| 崇仁县| 郁南县| 金昌市| 迭部县| 喀什市| 普洱| 高清| 琼结县| 泾川县| 乡城县|