Java 基础(3-8) - 图谱 & Q-A.pdf

preview
需积分: 0 0 下载量 122 浏览量 更新于2023-06-28 收藏 671KB PDF 举报
Java 基础知识体系广泛且深入,涵盖了各种概念和技术。在Java中,选择合适的数据类型来表示价格是非常重要的。通常,如果不关心内存和性能,推荐使用`BigDecimal`类,因为它提供了精确的浮点数运算,适合处理货币计算。而如果性能是关键,可以使用预定义精度的`double`类型,但需注意浮点数运算可能会产生微小的误差。 在进行数据类型转换时,`byte`到`String`的转换可以通过`String`的构造函数完成,传入`byte[]`数组和相应的字符编码(如UTF-8)。从`bytes`到`long`的转换通常需要先将字节数组转换为字符串,然后通过`Long.parseLong()`方法解析。 关于类型转换,`int`可以强制转换为`byte`,但如果`int`的值超出`byte`的范围(-128至127),超出部分的高位会被截断,可能导致数据丢失或负数的出现。 类之间的转换也是Java中常见的操作。如果`B`继承`A`,`C`继承`B`,可以将`B`类型的引用转换为`C`类型,但必须确保实际对象是`C`类型实例,否则会发生运行时错误。 `clone()`方法是`Object`类中的,允许对象进行浅复制。线程安全性方面,Java中的`++`操作符对于基本类型是线程安全的,但对于对象的属性则需要额外的同步措施。 `a = a + b`与`a += b`在语义上有所不同,前者创建了一个临时变量,而后者是在原地修改`a`。对于`double`和`long`类型的转换,直接赋值可能需要强制类型转换,否则可能导致精度损失。 在表达式`3 * 0.1 == 0.3`中,由于浮点数精度问题,可能会得到`false`。`int`和`Integer`相比,`Integer`是对象,占用更多内存,因为包含额外的对象开销。 `String`在Java中是不可变的,主要是为了线程安全和缓存`hashcode`。从Java 7开始,`switch`语句支持`String`类型。不可变对象意味着一旦创建,其状态不能改变,创建不可变对象通常使用私有构造函数和final字段。包含可变对象的不可变对象需要谨慎处理,因为可变内部对象可能破坏不可变性。 `equals()`和`hashCode()`通常一起重写,以确保一致性。`Comparator`和`Comparable`接口分别用于定制比较逻辑和实现自然排序。`"a==b"`和`"a.equals(b)"`的区别在于前者比较引用,后者比较对象内容。`final`关键字用于声明常量,`finalize()`方法是垃圾回收前的回调,`finally`块确保代码的执行,无论是否发生异常。 Java的编译期常量(如`final static`字段)在编译时会被内联,但过度使用可能导致代码僵化。静态内部类与顶级类的主要区别在于生命周期和访问限制。`Serializable`和`Externalizable`分别代表序列化和自定义序列化方式。Java 7和8引入的新特性包括:try-with-resources、钻石操作符、集合接口的`stream()`方法等。 接口是一种定义行为的方式,相比抽象类,接口提供多继承,而抽象类只能单继承。`Object`类提供诸如`equals()`、`hashCode()`和`toString()`等基础方法。`equals()`和`==`的区别在于前者比较内容,后者比较引用。`String`、`StringBuffer`和`StringBuilder`在多线程环境下的表现各异,`StringBuilder`更适用于单线程。 理解并掌握这些Java基础知识点对于成为一名专业的Java开发者至关重要,它们构成了Java编程的核心基础。