Java的隐藏特性

在阅读C#隐藏特性之后,我想知道,Java的一些隐藏特性是什么?


几个月前,当我第一次发现它时,Double Brace Initialization让我大吃一惊,之前从未听说过它。

通常ThreadLocals并不是广为人知的存储每个线程状态的方式。

由于JDK 1.5 Java具有非常好的实现且强大的并发工具,不仅仅是锁,它们存在于java.util.concurrent中,并且一个特别有趣的示例是java.util.concurrent.atomic子包,其中包含实现比较的线程安全基元并且可以映射到这些操作的实际本机硬件支持版本。


类型参数方差中的联合联合:

public class Baz<T extends Foo & Bar> {}

例如,如果您想采用兼容Comparable和Collection的参数:

public static <A, B extends Collection<A> & Comparable<B>>
boolean foo(B b1, B b2, A a) {
   return (b1.compareTo(b2) == 0) || b1.contains(a) || b2.contains(a);
}

如果给定的两个集合是相等的,或者它们中的任何一个包含给定的元素,则此方法返回true,否则返回false。 需要注意的是,您可以在参数b1和b2上调用Comparable和Collection的方法。


有一天我对实例初始化者感到惊讶。 我正在删除一些代码折叠的方法,并最终创建了多个实例初始值设定项:

public class App {
    public App(String name) { System.out.println(name + "'s constructor called"); }

    static { System.out.println("static initializer called"); }

    { System.out.println("instance initializer called"); }

    static { System.out.println("static initializer2 called"); }

    { System.out.println("instance initializer2 called"); }

    public static void main( String[] args ) {
        new App("one");
        new App("two");
  }
}

执行main方法将显示:

static initializer called
static initializer2 called
instance initializer called
instance initializer2 called
one's constructor called
instance initializer called
instance initializer2 called
two's constructor called

我想如果你有多个构造函数并且需要通用代码,这些会很有用

他们还提供了用于初始化类的语法糖:

List<Integer> numbers = new ArrayList<Integer>(){{ add(1); add(2); }};

Map<String,String> codes = new HashMap<String,String>(){{ 
  put("1","one"); 
  put("2","two");
}};
链接地址: http://www.djcxy.com/p/14455.html

上一篇: Hidden Features of Java

下一篇: Where are the stack, data and instruction segments implemented?