"这篇资料主要涉及的是Java编程语言的基础知识,包括面向对象的特性、关键字、数据类型转换、异常处理、内存管理以及字符串操作等核心概念。此外,还提到了数据库事务的隔离级别,特别是Repeatable read级别及其可能导致的幻读问题。"
【Java面试题】
1. **面向对象的特征**:面向对象编程(OOP)的四大特性是抽象、继承、封装和多态性。抽象用于概括一类事物的共同特征;继承允许一个类继承另一个类的属性和方法;封装是隐藏对象的属性和实现细节,仅对外提供公共访问方式;多态性则指同一种行为可以有不同的表现形式。
2. **transient关键字**:在Java中,transient用于标记类的一个成员变量,表示该变量不应该被序列化,即在对象被序列化时,该变量的值不会被保存。
3. **访问修饰符区别**:Java有public、protected、default(包访问权限)和private四种访问修饰符,它们决定了类成员的可见性和访问范围。
4. **数据类型自动转换**:在Java中,数据类型的自动转换通常发生在不同大小的数据类型之间,如从低精度类型向高精度类型转换,例如int到long。
5. **switch支持的类型**:Java 7之后,switch语句不仅支持原始数据类型,还可以直接用于字符串(String)。
6. **值传递与引用传递**:Java中,所有参数传递都是按值传递,但对象引用作为参数时,实际上是传递对象引用的副本,而不是对象本身。
7. **重载与重写**:重载(Overload)是指在同一类中定义多个同名方法,但方法的参数列表不同;重写(Override)是子类对父类已有的方法进行重新定义,保持方法名、返回类型和参数列表不变。
8. **abstractclass和interface**:抽象类可以有方法实现,而接口只能声明方法,不能包含实现;一个类可以继承一个抽象类,同时实现多个接口。
9. **静态嵌套类和内部类**:静态嵌套类(Static Nested Class)是独立的类,可以直接通过类名访问,而内部类(Inner Class)是依赖外部类实例的,需要外部类对象才能创建。
10. **"=="与"equals()"**:"=="比较的是两个对象的引用是否相等,而"equals()"是对象内容的比较,对于非null的对象,"equals()"默认行为与"=="相同,但可以被覆盖以实现特定的比较逻辑。
11. **String为什么是final**:String被声明为final是为了防止被继承,保证字符串的不可变性,这有利于缓存和哈希计算。
12. **String、StringBuffer、StringBuilder**:String是不可变的,而StringBuffer和StringBuilder在多线程环境下提供了线程安全(StringBuffer)或非线程安全(StringBuilder)的可变字符串操作。
13. **异常处理**:运行时异常( unchecked exceptions)在编译时不强制捕获,而非运行时异常( checked exceptions)则必须在编译时处理。
14. **引用类型**:Java中的引用类型包括强引用、软引用、弱引用和虚引用,它们控制垃圾回收机制对对象的生命周期。
15. **final, finally, finalize**:final用来声明变量或方法不可改变,类不可被继承;finally确保代码块始终执行;finalize是对象被垃圾回收前的最后一次机会清理资源。
16. **序列化与反序列化**:序列化用于将对象的状态转换为字节流,便于存储或网络传输;反序列化则是将字节流恢复为对象。对象实现Serializable接口即可实现序列化。
17. **Strings=newString("xyz");创建对象数量**:这行代码会创建一个字符串对象,因为字符串字面量"xyz"在字符串池中存在,所以不会创建新的。
这些知识点涵盖了Java开发中的核心概念,对于理解Java语言特性和编写高质量代码至关重要。