你的位置:首页 > Java教程

[Java教程]java基础盲点梳理


  • 类的基本成员才有默认值

  • finalize()并非析构,Java中没有析构,使用finalize()通常在于跨语言调用情景:比如使用C进行malloc内存分配以后,要在finalize()方法中进行free,以便于提供一种内存释放的方法,否则当量达到一定程度时会造成out of memories。Jvm在进行gc时会优先调用finalize(),但这并不意味着一定会释放finalize中指定的对象,因为gc最终只和内存相关,当内存达到回收条件时才会进行垃圾回收

  • 静态块static{xxx;}在类加载时就进行初始化,非静态块和构造函数在创建对象时才会初始化或调用,并且非静态块要优先于构造函数。

  • 内部类可以访问外围类所有成员,包括private成员

  • 通过内部类可以变相的实现“多重继承”

  • 匿名内部类常用于实例初始化

  • 动态代理,通过反射动态地创建Proxy,Proxy用于添加一些你想对Target进行的额外操作,然后在适当的时候将请求转发给Target。换句话说,Proxy在Target上进行了一层封装修改。

  • HashMap,通过设置容量和负载因子,以调整容器的性能。默认容量达到四分之三满时将自动进行扩充&再散列。因此,如果能够预估存储容量,然后设置一个恰当的初始容量,将可以避免自动再散列的开销

  • transient关键字可以避免敏感信息字段的序列化

  • ThreadLocal对象通常当做静态域存储,使得每个单独的线程都被分配了自己的存储