打字猴:1.700441484e+09
1700441484 编写高质量代码:改善Java程序的151个建议 [:1700438108]
1700441485 编写高质量代码:改善Java程序的151个建议 建议39:使用匿名类的构造函数
1700441486
1700441487 阅读如下代码,看看是否可以编译:
1700441488
1700441489 public static void main(String[]args){
1700441490
1700441491 List l1=new ArrayList();
1700441492
1700441493 List l2=new ArrayList(){};
1700441494
1700441495 List l3=new ArrayList(){{}};
1700441496
1700441497 System.out.println(l1.getClass()==l2.getClass());
1700441498
1700441499 System.out.println(l2.getClass()==l3.getClass());
1700441500
1700441501 System.out.println(l1.getClass()==l3.getClass());
1700441502
1700441503 }
1700441504
1700441505 注意ArrayList后面的不同点:l1变量后面什么都没有,l2后面有一对{},l3后面有2对嵌套的{},这段程序能不能编译呢?若能编译,那输出是多少呢?
1700441506
1700441507 答案是能编译,输出的是3个false。l1很容易解释,就是声明了ArrayList的实例对象,那l2和l3代表的是什么呢?
1700441508
1700441509 (1)l2=new ArrayList(){}
1700441510
1700441511 l2代表的是一个匿名类的声明和赋值,它定义了一个继承于ArrayList的匿名类,只是没有任何的覆写方法而已,其代码类似于:
1700441512
1700441513 //定义一个继承ArrayList的内部类
1700441514
1700441515 class Sub extends ArrayList{
1700441516
1700441517 }
1700441518
1700441519 //声明和赋值
1700441520
1700441521 List l2=new Sub();
1700441522
1700441523 (2)l3=new ArrayList(){{}}
1700441524
1700441525 这个语句就有点怪了,还带了两对大括号,我们分开来解释就会明白了,这也是一个匿名类的定义,它的代码类似于:
1700441526
1700441527 //定义一个继承ArrayList的内部类
1700441528
1700441529 class Sub extends ArrayList{
1700441530
1700441531 {
1700441532
1700441533 //初始化块
[ 上一页 ]  [ :1.700441484e+09 ]  [ 下一页 ]