本文主要探讨了Java基础中的核心概念,包括数据类型、面向对象编程以及Object类。文章首先区分了`int`和`Integer`的区别,并解释了`==`运算符在两者之间的作用。随后深入阐述了面向对象编程的思想,强调了类、对象、继承、封装和多态的重要性,并对比了面向对象与结构化编程的差异。 文章详细讲解了面向对象的三大特征:封装、继承和多态,并探讨了封装的目的和实现方式。此外,还讨论了Java单继承的原因,以及重写和重载的区别,并明确构造方法不能被重写。最后,文章介绍了`Object`类中的常用方法,如`getClass()`、`equals()`、`hashCode()`、`toString()`、`wait()`、`notify()`、`notifyAll()`和`clone()`等,并对`finalize()`方法的使用提出了注意事项。 总而言之,本文系统地梳理了Java基础知识,为理解和应用Java编程提供了坚实的基础。

hashCode用于取散列码,equals比较对象相等;若相等必须同hashCode,同hashCode不一定相等,HashSet正是依据此去重。Object 默认 equals 采用 ==,业务常需重写,两者必须保持约定一致。== 比较引用,重写后 equals 可比较内容。String 为 final 不可变,常用方法众多,推荐使用字面量存入常量池,new 会额外创建堆对象。StringBuffer 可变且线程安全,StringBuilder 亦可变但非线程安全,性能更佳,拼接时依据是否涉及变量及线程需求选择。接口只定义规范,无构造函数,可多实现;抽象类可含实现和成员变量。面向接口编程通过分离实现降低耦合、提升可扩展性。

本文系统阐述了Java核心概念:异常处理遵循try‑catch‑finally三步,Throwable分为Error与Exception,后者再细分为Checked和Runtime异常;finally块必执行,且在其中使用return会覆盖前面的返回。static修饰成员使其成为类成员,不能访问实例成员;static类可继承,但外部类不能static;static与final的区别在于前者决定成员归属,后者限制继承、重写和赋值。泛型通过参数化类型解决集合类型安全问题,介绍了类型擦除、上限(extends)与下限(super)通配符。反射可在运行时获取类信息、创建实例和生成代理,常用于JDBC驱动加载、框架配置和AOP。最后列举了强、软、弱、虚四种引用及其垃圾回收行为。

Java集合类主要由Collection和Map两大接口派生而来,Collection包含Set(无序、不可重复)、List(有序、可重复)和Queue(先进先出队列),Map则存储键值对。常用的实现类有HashSet、TreeSet、ArrayList、LinkedList、HashMap、TreeMap等。 大部分Java集合类是线程不安全的,但可通过`Collections.synchronizedXxx()`方法或使用`java.util.concurrent`包下的线程安全集合类(如ConcurrentHashMap)来保证线程安全。`java.util.concurrent`包提供了高性能的并发集合,包括以`Concurrent`开头的集合(支持并发写入,读取无需锁定)和以`CopyOnWrite`开头的集合(写操作复制底层数组)。 HashMap是最常用的Map实现,JDK7基于数组+链表,JDK8引入红黑树优化了哈希冲突,提升查找效率。HashMap通过哈希算法计算索引存储键值对,扩容机制为2倍,并使用红黑树解决链表过长的问题。它与Hashtable的区别在于HashMap非线程安全,性能更高,且允许null键值。ConcurrentHashMap则通过分段锁或CAS操作实现线程安全,性能优于Hashtable。LinkedHashMap则维护插入顺序。

本文系统介绍了Java集合类的关键实现与特性:TreeMap基于红黑树实现,Map、Set、List的区别;ArrayList 与 LinkedList 的结构与性能对比;线程安全 List(Vector、Collections.synchronizedList、CopyOnWriteArrayList)的原理及适用场景;ArrayList 的数组扩容机制;CopyOnWriteArrayList 写时复制的优缺点;TreeSet 与 HashSet 的实现差异及 HashSet 基于 HashMap;BlockingQueue 的四类操作方法及设计目的,并以 ArrayBlockingQueue 为例说明 ReentrantLock、Condition 与 AQS 的阻塞实现;最后列举了 Stream 的中间、终端以及有状态/短路方法,阐明其在集合聚合中的作用。

Java IO(输入/输出)机制用于实现数据的输入与输出,将各种输入/输出源抽象为流(Stream),程序可采用统一方式访问不同源。流分为输入流和输出流,分别用于读取和写入数据;字节流和字符流,分别处理8位字节和16位字符;节点流和处理流,前者直接与IO设备交互,后者封装节点流以简化操作或提高效率。 Java提供了丰富的IO类库,如文件流、字节/字符数组流、管道流、缓冲流、转换流、对象流、打印流等。处理大文件时,应避免一次性读取全部内容,而采用分次读取和缓冲流。NIO(New IO)通过通道(Channel)、缓冲区(Buffer)和选择器(Selector)实现高效IO,并可使用内存映射文件。 此外,文章还介绍了Java序列化机制,将对象转换为字节序列以便存储或传输,需要实现`Serializable`接口并定义`serialVersionUID`以保证版本一致性。除了Java自带的序列化,还有JSON、Protobuf、Thrift、Avro等序列化工具可供选择。