Java作为一门强类型语言,其数据类型体系是每个开发者必须掌握的基础知识。与Python等动态类型语言不同,Java的数据类型在编译期就确定了存储空间大小,这种设计带来了更好的性能和可移植性。
Java提供了四种整数类型,它们的存储空间和取值范围都是固定的:
注意:Java没有无符号(unsigned)整数类型,这与C/C++不同。所有整数类型都是有符号的。
Java的浮点类型严格遵循IEEE 754标准:
浮点运算的特殊值处理:
java复制System.out.println(1.0/0.0); // Infinity
System.out.println(-1.0/0.0); // -Infinity
System.out.println(0.0/0.0); // NaN
类型转换规则:
String的不可变性体现在三个方面:
java复制String s1 = "hello";
String s2 = s1.concat(" world"); // 创建新对象
System.out.println(s1 == s2); // false
字符串常量池优化:
| 特性 | StringBuffer | StringBuilder |
|---|---|---|
| 线程安全 | 是(synchronized方法) | 否 |
| 性能 | 较低 | 较高 |
| 适用场景 | 多线程环境 | 单线程环境 |
扩容机制(两者相同):
自动装箱实际上是编译器语法糖:
java复制Integer i = 10;
// 实际编译为:
Integer i = Integer.valueOf(10);
常见陷阱:
java复制Integer a = 100, b = 100;
System.out.println(a == b); // true (缓存-128~127)
Integer c = 200, d = 200;
System.out.println(c == d); // false (超出缓存范围)
良好的封装应该:
java复制public class Person {
private String name;
public void setName(String name) {
if(name == null || name.trim().isEmpty()) {
throw new IllegalArgumentException("Invalid name");
}
this.name = name;
}
}
继承使用原则:
java复制abstract class Animal {
abstract void makeSound();
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Woof!");
}
}
多态的三种形式:
运行时多态示例:
java复制List<String> list = new ArrayList<>(); // 接口多态
list = new LinkedList<>(); // 可替换实现
| 维度 | 重载(Overload) | 重写(Override) |
|---|---|---|
| 发生位置 | 同一个类中 | 子类与父类之间 |
| 方法签名 | 必须不同 | 必须相同 |
| 返回类型 | 可以不同 | 必须相同或协变 |
| 访问修饰符 | 无限制 | 不能比父类更严格 |
| 异常 | 无限制 | 不能抛出更宽泛的异常 |
抽象类适用场景:
接口适用场景:
static的四种用法:
java复制class Utils {
static int count; // 静态变量
static { // 静态代码块
count = 0;
}
static void print() { // 静态方法
System.out.println(count);
}
}
finally块保证执行的几种情况:
不执行finally的特殊情况:
java复制try {
System.exit(0); // JVM退出
Thread.currentThread().stop(); // 线程终止
} finally {
System.out.println("不会执行");
}
由于finalize的不可靠性,推荐替代方案:
java复制class Resource implements AutoCloseable {
@Override
public void close() {
// 清理逻辑
}
}
// 使用方式
try(Resource res = new Resource()) {
// 使用资源
} // 自动调用close()
字符串处理:
类型转换:
面向对象设计:
性能优化:
Java作为一门成熟的面向对象语言,其丰富的特性需要开发者深入理解背后的原理。掌握这些基础知识,才能写出健壮、高效的Java代码。在实际开发中,建议结合具体业务场景灵活运用这些特性,同时遵循业界最佳实践。