• 《Effective Java 第三版》——第九章 通用编程


    《Effective Java 第三版》——第二章 创建和销毁对象

    《Effective Java 第三版》——第三章 所有对象都通用的方法

    《Effective Java 第三版》——第四章 类和接口 

    《Effective Java 第三版》——第五章 泛型

     《Effective Java 第三版》——第六章 枚举和注解

     《Effective Java 第三版》——第七章 Lambda 和 Stream 

     《Effective Java 第三版》——第八章 方法

    《Effective Java 第三版》——第九章 通用编程

     

    package effectivejava.chapter9.item58;
    import java.util.*;
    
    // Same bug as NestIteration.java (but different symptom)!! - Page 213
    public class DiceRolls {
        enum Face { ONE, TWO, THREE, FOUR, FIVE, SIX }
    
        public static void main(String[] args) {
            // Same bug, different symptom!
            Collection<Face> faces = EnumSet.allOf(Face.class);
    
            for (Iterator<Face> i = faces.iterator(); i.hasNext(); )
                for (Iterator<Face> j = faces.iterator(); j.hasNext(); )
                    System.out.println(i.next() + " " + j.next());
    
            System.out.println("***************************");
    
            for (Face f1 : faces)
                for (Face f2 : faces)
                    System.out.println(f1 + " " + f2);
        }
    }
    /Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home/bin/java -Dfile.encoding=UTF-8 -classpath /Users/didi/git/effective-java-3e-source-code/bin effectivejava.chapter9.item58.DiceRolls
    ONE ONE
    TWO TWO
    THREE THREE
    FOUR FOUR
    FIVE FIVE
    SIX SIX
    ***************************
    ONE ONE
    ONE TWO
    ONE THREE
    ONE FOUR
    ONE FIVE
    ONE SIX
    TWO ONE
    TWO TWO
    TWO THREE
    TWO FOUR
    TWO FIVE
    TWO SIX
    THREE ONE
    THREE TWO
    THREE THREE
    THREE FOUR
    THREE FIVE
    THREE SIX
    FOUR ONE
    FOUR TWO
    FOUR THREE
    FOUR FOUR
    FOUR FIVE
    FOUR SIX
    FIVE ONE
    FIVE TWO
    FIVE THREE
    FIVE FOUR
    FIVE FIVE
    FIVE SIX
    SIX ONE
    SIX TWO
    SIX THREE
    SIX FOUR
    SIX FIVE
    SIX SIX
    
    Process finished with exit code 0
    package effectivejava.chapter9.item58;
    
    import java.util.*;
    
    public class Card {
        private final Suit suit;
        private final Rank rank;
    
        // Can you spot the bug?
        enum Suit { CLUB, DIAMOND, HEART, SPADE }
        enum Rank { ACE, DEUCE, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT,
            NINE, TEN, JACK, QUEEN, KING }
    
        static Collection<Suit> suits = Arrays.asList(Suit.values());
        static Collection<Rank> ranks = Arrays.asList(Rank.values());
    
        Card(Suit suit, Rank rank ) {
            this.suit = suit;
            this.rank = rank;
        }
    
        public static void main(String[] args) {
            List<Card> deck = new ArrayList<>();
            
            for (Iterator<Suit> i = suits.iterator(); i.hasNext(); )
                for (Iterator<Rank> j = ranks.iterator(); j.hasNext(); )
                    deck.add(new Card(i.next(), j.next()));
    
    //        // Preferred idiom for nested iteration on collections and arrays
    //        for (Suit suit : suits)
    //            for (Rank rank : ranks)
    //                deck.add(new Card(suit, rank));
        }
    }
    /Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home/bin/java -Dfile.encoding=UTF-8 -classpath /Users/didi/git/effective-java-3e-source-code/bin effectivejava.chapter9.item58.Card
    Exception in thread "main" java.util.NoSuchElementException
        at java.base/java.util.Arrays$ArrayItr.next(Arrays.java:4452)
        at effectivejava.chapter9.item58.Card.main(Card.java:27)
    
    Process finished with exit code 1

     不能遍历同时修改...

    package effectivejava.chapter9.item59;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    
    // Printing the contents of a URL with transferTo, added in Java 9 (Page 269)
    public class Curl {
        public static void main(String[] args) throws IOException {
            try (InputStream in = new URL(args[0]).openStream()) {
                in.transferTo(System.out);
            }
        }
    }
    /Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home/bin/java -Dfile.encoding=UTF-8 -classpath /Users/didi/git/effective-java-3e-source-code/bin effectivejava.chapter9.item59.Curl http://www.baidu.com
    <!DOCTYPE html>
    <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
    
    Process finished with exit code 0
    package effectivejava.chapter9.item59;
    import java.util.*;
    
    // Random number generation is hard! - Page 215
    public class RandomBug {
        // Common but deeply flawed!
        static Random rnd = new Random();
    
        static int random(int n) {
            return Math.abs(rnd.nextInt()) % n;
        }
    
        public static void main(String[] args) {
            int n = 2 * (Integer.MAX_VALUE / 3);
            int low = 0;
            for (int i = 0; i < 1000000; i++)
                if (random(n) < n/2)
                    low++;
            System.out.println(low);
        }
    }
    /Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home/bin/java -Dfile.encoding=UTF-8 -classpath /Users/didi/git/effective-java-3e-source-code/bin effectivejava.chapter9.item59.RandomBug
    666550
    
    Process finished with exit code 0

     

    ThreadLocal

    package effectivejava.chapter9.item61;
    
    // What does this program do? - Page 274
    public class Unbelievable {
        static Integer i;
    
        public static void main(String[] args) {
            if (i == 42)
                System.out.println("Unbelievable");
        }
    }
    /Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home/bin/java -Dfile.encoding=UTF-8 -classpath /Users/didi/git/effective-java-3e-source-code/bin effectivejava.chapter9.item61.Unbelievable
    Exception in thread "main" java.lang.NullPointerException
        at effectivejava.chapter9.item61.Unbelievable.main(Unbelievable.java:8)
    
    Process finished with exit code 1

    Integer i 在做 == 时自动拆箱,报 NullPointerException 错误

    
    

     

     

     

     

     

     

  • 相关阅读:
    【独家】K8S漏洞报告 | 近期bug fix解读
    idou老师教你学Istio 29:Envoy启动流程
    idou老师教你学Istio 28:istio-proxy check 的缓存
    idou老师教你学Istio :5分钟简析Istio异常检测
    idou老师教你学Istio 27:解读Mixer Report流程
    idou老师教你学Istio 26:如何使用Grafana进行可视化监控
    idou老师教你学Istio 25:如何用istio实现监控和日志采集
    idou老师教你学Istio 24:如何在Istio使用Prometheus进行监控
    idou老师教你学Istio 23 : 如何用 Istio 实现速率限制
    idou老师教你学Istio 22 : 如何用istio实现调用链跟踪
  • 原文地址:https://www.cnblogs.com/cx2016/p/13273238.html
Copyright © 2020-2023  润新知