点滴记录

  1. 类中的实例变量,定义时指定初始值和非静态初始化块中指定初始值都会在构造块前执行,而且二者执行的顺序和它们在源代码中的顺序一致。

    如下:

    171416_BUt8_1177710.png

    第2),3)处的代码都会在1)处前执行,实际上他们经过编译器处理之后,2),3)处对应的代码会被合并到构造器中,并且放在构造器里面原来的代码的前面,所以才会先执行。

  2. 继承成员变量和继承方法的区别。

    171845_VQ2L_1177710.png

        通过例子可以看出:变量的取值取决于声明该变量的对象,而方法的行为则取决于它所实际引用的对象的类型。

3.  为什么内部类中的局部变量要使用final修饰符?

    我们都知道当一个方法中的匿名内部类或局部内部类需要方法方法中的局部变量时,该变量必须要使用final修饰,这跟局部变量的生命周期有关。

    局部变量的作用域仅在方法内部,方法结束,局部变量也就消失了,但是内部类则可能产生隐式的'闭包',使得局部变量脱离它的方法继续运行。比如:内部类使用了线程,调用了局部变量,...

4. HashSet,TreeSet的底层其实也是使用HashMap,TreeMap实现的,所有放在HashSet中的元素实际上由HashMap的key来保存的,而对应的value则是一个PRESENT,一个静态的Object对象。

5. 下面的语句创建了几个字符串对象?

    String str = "Hello"+"Java,"+"utest" ;

    笔试时可能有遇到的,其实这条代码就只创建了一个对象,因为str的值可以在编译时确定下来,JVM会在编译时就计算出str的值“HelloJava,utest”,然后将该字符串放入字符串池中,并让str指向它 。

6. 静态方法是属于类的。

    173725_8hMH_1177710.png

      尽管a=null,但是不影响info方法的执行,实际上实例对象调用静态方法最终还是转化成类调用方法。

7.  catch块中若试图捕获的异常XxxException是Checked异常,那么它对应的try必须是有可能抛出XxxException或其子类的异常,否则编译器将提示改程序编译错误,但是Exception异常除外。

     174525_iJaA_1177710.png

8. 就HashMap来说,如果插入节点时Hash表的节点总数大于“threshold",则会resize这个数组,也就是数组大小会发生扩容,通常扩容为原来的2倍,在扩容的过程中会导致同样的元素计算出来的下标发生改变,因此需要遍历原有的Hash表的所有节点,即遍历每一个单向链表,每个节点将按照新的hash表来计算出自己的位置,逐个迁移到新的hash表上,我们通常把这个过程叫做rehash过程。

9. JDK动态代理在生成动态字节码时,并不是通过实现类创建子类的方式,而是通过类所拥有的接口列表来完成的。也就是说,构造出来的类和实际的实现类一点关系都没有,是一个完全独立的类,只有接口的方法名和原始对象的方法名相同而已。

10. Set底层是使用Map实现的,key为Set添加的对象,value为Object。

 

     

转载于:https://my.oschina.net/u/1177710/blog/265715

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值