可以被重写(override)"?](#21构造器constructor-是否可以被重写override)
"这是一份2021年的Java基础面试题集合,涵盖了面向对象、语言特性、数据类型、类与对象、多态等核心概念。"
### Java基础
1. **面向对象四大特性**:封装、继承、多态和抽象。封装是将数据和操作数据的方法绑定在一起,保护数据不被随意访问;继承允许子类继承父类的属性和方法,实现代码复用;多态是同一种行为在不同对象上有不同的表现形式;抽象则通过抽象类或接口定义通用的行为模板。
2. **Java语言特点**:平台独立性(通过JVM实现),面向对象,自动内存管理(垃圾回收),安全性,稳健性,高性能,可移植性,多线程支持,丰富的类库等。
3. **Java程序的主类**:主类是包含`main`方法的类,它是程序执行的入口。应用程序的主类通常只有一个,而小程序(如Applet)可能有多个主类,但只有一个`start`方法。
4. **访问修饰符的区别**:`public`是公共的,所有类都能访问;`private`是私有的,仅限本类访问;`protected`是受保护的,本类和同一包内以及子类可以访问;默认(无修饰符)的,仅限本类和同一包内的类访问。
5. **float f = 3.4**:不正确,因为3.4是双精度浮点数(double),需要转换为float,正确的写法是`float f = 3.4f`。
6. **Java没有goto语句**:Java设计时摒弃了goto,以提高代码的可读性和可维护性。
7. **& 和 && 的区别**:& 是按位与运算符,&& 是逻辑与运算符。在布尔表达式中,&&具有短路效果,如果第一个操作数为假,就不会评估第二个操作数。
8. **Math.round()**:`Math.round(11.5)`等于12,`Math.round(-11.5)`等于-11。`Math.round()`方法将浮点数四舍五入为最接近的整数。
9. **最有效率计算2乘以8**:直接使用`int result = 2 << 3;`,利用位移运算,效率较高。
10. **Java注释**:Java提供三种注释方式,单行注释(//)、多行注释(/*...*/)和文档注释(/**...*/),后者用于生成API文档。
11. **Java数据类型**:分为基本数据类型(如int、char、byte、boolean等)和引用数据类型(类、接口、数组)。
12. **final关键字**:final用于声明不可改变的变量、方法或类,确保变量值的恒定、方法不能被重写、类不能被继承。
13. **final、finally、finalize**:final修饰变量表示常量,修饰方法表示不能重写,修饰类表示不能继承;finally用于异常处理,确保代码块总是被执行;finalize是对象被垃圾回收前调用的清理方法。
14. **String str = "i"; 和 String str = new String("1");**:前者创建一个字符串常量,后者创建一个新的String对象,两者在内存中的存储位置和创建方式不同。
15. **字符串处理类**:Java提供了String、StringBuilder和StringBuffer,其中String是不可变的,StringBuilder和StringBuffer用于可变字符串操作,线程安全的是StringBuffer。
16. **clone()**:Java中的`clone()`用于复制对象,原始对象和副本共享相同的内存空间,修改副本会影响原始对象(浅拷贝)。若类中有自定义对象,需实现`Cloneable`接口并重写`clone()`进行深拷贝。
17. **深克隆与浅克隆**:深克隆创建完全独立的对象副本,包括所有内部对象,修改副本不会影响原始对象;浅克隆只复制对象本身,不复制内部对象。
18. **new对象与clone对象的区别**:new创建新对象,开辟新的内存空间;clone复制现有对象,可能共享内存空间,取决于是否进行了深克隆。
19. **Java实现多态的机制**:多态依赖于继承、抽象类和接口,以及方法的覆盖(override),使得子类对象可以被视为父类对象,调用相同签名的覆盖方法。
20. **多态理解**:多态允许我们使用父类引用指向子类对象,实现不同子类对象对同一方法的不同响应,增强了代码的灵活性和扩展性。
21. **构造器(constructor)是否可以被重写(override)**:构造器不能被重写,但可以被重载,即在同一个类中创建多个参数不同的构造器。
这些面试题覆盖了Java编程的基础和核心知识,对于理解和掌握Java语言非常有帮助,同时也是面试中常见的问题,准备面试时应重点复习。