Java语言的核心在于其跨平台特性,这得益于Java虚拟机(JVM)。Java源代码编译成字节码后,由JVM将其翻译成特定平台的机器码执行,实现“一次编写,到处运行”。 Java文件可包含多个类,但只能有一个public类,且其名称需与文件名一致。Java提供了private、protected、public三种访问修饰符,形成四种访问权限,控制成员变量和方法的访问范围。 Java数据类型分为基本数据类型(如int, double, boolean)和引用数据类型(数组、类、接口)。基本类型有内存占用大小和范围的规定,引用类型本质上是堆内存对象的指针。 Java中存在成员变量(实例变量/类变量)和局部变量,前者有默认值,存储于堆或方法区,后者无默认值,存储于栈。包装类解决了基本数据类型不具备对象特性的问题,自动装箱和拆箱简化了基本类型与包装类之间的转换。比较Integer和Double类型时,应先转换为相同基本类型再进行比较。

本文主要介绍了Java基础知识中的核心概念,包括基本数据类型与包装类、面向对象编程思想以及Object类中的常用方法。 文章首先区分了`int`和`Integer`的区别,并说明了`==`运算符在两者运算时的行为。随后深入探讨了面向对象编程,强调了其核心思想——以现实世界事物为模型构建系统,并对比了面向对象与结构化程序设计。 文章详细阐述了面向对象的三大特征:封装、继承和多态,并解释了封装的目的和重要性。同时,还讨论了Java单继承的原因,以及重写和重载的区别,并明确构造方法不能被重写。 最后,文章介绍了`Object`类中常用的方法,如`getClass()`、`equals()`、`hashCode()`、`toString()`、`wait()`、`notify()`、`notifyAll()`和`clone()`等,并对这些方法的作用和使用场景进行了说明。

Java基础知识涵盖了`hashCode()`和`equals()`的关系、重写原因、`==`与`equals()`的区别、String类常用方法、String类不可变性及其优势、String与StringBuffer/StringBuilder的区别、字符串拼接方式的选择、字符串底层实现机制以及接口与抽象类的差异。 `hashCode()`用于获取哈希码,`equals()`用于比较对象是否相等,两者需保持一致性:相等对象哈希码相同,哈希码相同对象不一定相等。重写`equals()`通常需要同时重写`hashCode()`。`==`比较内存地址,`equals()`比较对象内容(默认实现与`==`相同,可重写)。 String类不可变,保证了安全性、线程安全性和哈希码的唯一性,并使得字符串常量池有意义。StringBuffer和StringBuilder都可变,前者线程安全但性能略低,后者非线程安全但性能较高。字符串拼接推荐使用直接量方式,或根据场景选择`+`、StringBuilder、StringBuffer或`concat()`方法。 接口定义规范,抽象类提供模板,接口只能包含抽象方法和常量,抽象类可包含普通方法和成员变量。接口不能有构造函数。面向接口编程可以降低耦合,提高可扩展性和可维护性。

Java异常处理机制通过try-catch-finally结构捕获并处理异常,finally块通常无条件执行资源回收,但System.exit()会阻止其执行;throw可主动抛出异常,异常沿调用栈反向传播直至被处理或终止程序。Java异常体系以Throwable为顶层,其子类Error表示不可恢复的系统错误,Exception分为受检异常(需显式处理)和运行时异常。static关键字修饰的类成员属于类本身而非实例,遵循“类成员不能访问实例成员”规则,静态内部类可被继承且只能访问外部类静态成员。final用于限制类不可继承、方法不可重写、变量不可修改。泛型通过类型参数增强集合类型安全,编译后发生类型擦除,List<?>表示未知类型集合,List<? super T>和List<? extends T>分别限定通配符的下限和上限。反射机制允许运行时获取类信息、创建实例及动态代理,广泛应用于JDBC驱动加载、框架配置解析和AOP实现。Java的四种引用(强、软、弱、虚)影响垃圾回收行为,强引用阻止回收,软/弱引用在内存不足时回收,虚引用用于跟踪回收状态且需配合引用队列使用。