Java程序员面试题库包含了多个深入的Java编程概念和面试常见问题。以下是其中的关键知识点详解:
1. **final, finally, finalize的区别**:
- `final`修饰变量时,表示常量,不可修改;修饰方法或类时,意味着方法不可被重写,类实例一旦创建就不能被子类继承。
- `finally`在`try-catch`语句块中,无论是否发生异常,都会执行的代码块,主要用于资源清理。
- `finalize`是Java对象的析构函数,当垃圾回收器确定对象不再被引用时,会调用此方法,通常用于释放自定义资源。
2. **匿名内部类**:
- 可以继承其他类,但不能同时继承类和实现接口,只能选择其一。
- 匿名内部类常用于实现回调接口或者创建线程等场景。
3. **StaticNestedClass和InnerClass**:
- Static Nested Class是在类级别声明的内部类,没有实例化即可使用,而Inner Class需要与外部类实例关联。
- Inner Class有访问外部类的非公有成员的权限,而Static Nested Class没有。
4. **&和&&的区别**:
- `&`是位运算符,按位与,用于整数;
- `&&`是逻辑运算符,条件与,用于布尔表达式,只有当两个操作数都为真时结果才为真。
5. **HashMap和Hashtable**:
- HashMap是非同步的,查询快,允许null键值对;
- Hashtable是同步的,但查询略慢,不允许null键值对。
6. **Collection和Collections**:
- Collection是集合框架的基础接口,代表元素的容器;
- Collections是Java集合框架中的工具类,提供了对集合的操作方法,如排序、查找等。
7. **assert的使用**:
- 在开发过程中用于检查条件是否满足,有助于发现早期错误,生产环境通常注释掉。
8. **垃圾回收(GC)**:
- Java自动内存管理机制,负责回收不再使用的对象所占用的内存,避免内存泄露。
9. **String对象创建**:
- `new String("xyz")`会创建一个新的String对象,即使内容相同;
- `Strings`是`String`对象,因此`Strings = newString("xyz")`创建了两个对象。
10. **Math.round()方法**:
- 对于`Math.round(11.5)`,结果为12,向上取整;
- 对于`Math.round(-11.5)`,结果为-11,向下取整。
11. **短整型运算**:
- `shorts1=1;s1=s1+1;`没有错误,将1加到shorts1上;
- `shorts1=1;s1+=1;`也没有错误,等价于`s1 = s1 + 1`。
12. **sleep()和wait()**:
- sleep()使当前线程进入睡眠状态,直到唤醒;
- wait()释放对象锁,并让当前线程等待,直到其他线程调用notify()或notifyAll()。
13. **Java的goto语句**:
- Java不支持`goto`语句,避免控制流的混乱。
14. **数组方法**:
- 数组有`length()`方法,获取数组长度;
- String也有`length()`方法,获取字符串的字符数量。
15. **Overload和Override**:
- Overload是方法重载,指同名但参数列表不同的方法;
- Override是方法覆盖,子类重写父类方法,保持相同的签名。
16. **Set的重复元素检测**:
- Set不允许重复元素,通过`equals()`方法判断元素是否相等,而不是`==`比较地址。
17. **常见的运行时异常**:
- 如`NullPointerException`、`ArrayIndexOutOfBoundsException`、`IOException`等,这些异常在运行时可能抛出。
18. **Error和Exception的区别**:
- Error通常表示系统级的严重错误,如内存溢出,无法恢复;
- Exception是程序运行时发生的可恢复错误,如文件未找到、空指针异常等。
以上内容涵盖了Java面试中的一些核心概念,熟悉这些知识点有助于准备Java编程岗位的面试。