Java基础深度解析:图谱与常见Q&A

需积分: 0 0 下载量 39 浏览量 更新于2024-08-03 收藏 671KB PDF 举报
Java基础(3/8) - 图谱 & Q&A 是一篇关于Java基础知识的详细指南,通过图表和问答形式帮助读者深入理解Java的核心概念。本篇内容涵盖了Java编程语言的多个关键知识点: 1. **数据类型选择**:介绍Java中适合表示价格的数据类型,如使用`BigDecimal`而非`double`或`float`处理货币精度问题。 2. **基本类型转换**: - 如何将`byte`转换为`String`,通常使用`Byte.toString(byteValue)`。 - `bytes`转`long`可以通过`Long.parseLong(byte[])`或`Long.valueOf(new BigInteger(byte[]))`实现。 - 强制转换`int`到`byte`时,若值超过`byte`范围,将抛出`ArithmeticException`。 3. **继承与类型转换**: - 类型转换示例:不能直接将`B`实例转换为`C`(`C c = (C) b;`),除非`B`实现了`C`的所有方法,否则会抛异常。 4. **内置方法与特性**: - `Cloneable`类允许对象克隆,但需实现`clone()`方法;`Object`类中也有`clone()`方法,但默认行为可能不是期望的。 - `++`操作符在Java中不是线程安全的,不适合多线程环境。 5. **运算符与赋值**: - `a=a+b`和`a+=b`的区别在于前者的左侧是新的引用,而后者直接修改原有引用。 6. **类型转换和精度**: - 可以直接将`double`赋值给`long`,但可能会丢失精度。 7. **比较与逻辑**: - `3*0.1==0.3`的结果通常是`false`,因为浮点数运算可能引入精度误差。 - `int`和`Integer`内存占用的比较,`Integer`通常比`int`多占用一个用于引用的对象。 8. **字符串与不可变性**: - Java的`String`是不可变的,每次修改都会创建新的对象。 9. **控制结构**: - `Switch`语句支持使用枚举类型,但不直接支持`String`。 10. **构造器链与枚举类**: - 构造器链涉及多个构造函数之间的调用顺序,枚举类用于定义一组有限的预定义值。 11. **不可变对象**: - 创建不可变对象的方法:通过提供所有属性值构造器或使用不可变类库如Guava的`ImmutableXXX`类。 12. **哈希码与相等性**: - 不相等的对象可以有相同的哈希码,反之则不可能。 - 哈希码计算应确保相同对象始终返回同一值。 13. **排序与比较**: - `Comparator`是自定义排序规则,`Comparable`用于实现对象间的自然排序。 - `equals`和`hashCode`的关系:当重写`equals`时,必须考虑如何保持`hashCode`的一致性。 14. **内存管理和控制**: - `final`用于标记常量或不可修改的对象,`finalize`是对象被垃圾回收前的回调,`finally`用于代码块的最终执行。 - 编译期常量的风险:可能导致运行时错误,如`static final`字段初始化时的类型错误。 15. **类的设计**: - 静态内部类与顶级类的主要区别在于作用域和生命周期。 - `Serializable`与`Externalizable`:前者用于序列化和反序列化,后者提供了更细粒度的控制。 16. **JDK版本更新**: - JDK 1.7的新特性:如`diamond operator`(菱形操作符)、`try-with-resources`等。 - JDK 1.8的新特性:如Lambda表达式、Stream API、默认方法等。 17. **面向接口编程**: - 接口的定义和用途,它是类的行为契约,可用于多态和抽象实现。 通过阅读这篇文档,读者能够系统地巩固和扩展自己的Java基础,解决实际编程中的疑问。