Java面试必备:32个关键问题解析
需积分: 10 125 浏览量
更新于2024-10-31
收藏 49KB DOC 举报
"Java程序员面试常见问题集合,涵盖了基础语法、类与对象、集合框架、内存管理等多个方面,旨在帮助面试者准备Java技术面试。"
1. **final, finally, finalize的区别**
- `final` 关键字用于声明变量、方法或类不可变,对于变量意味着一旦赋值就不能改变,对于方法表示不能被重写,对于类表示不能有子类。
- `finally` 通常用于异常处理,无论是否发生异常,finally块中的代码都会执行,确保关键的清理操作得以完成。
- `finalize` 是Java中的一个方法,定义在`Object`类中,用于在对象被垃圾收集器回收前执行清理工作,但不推荐直接使用,因为它的行为不一致且效率低。
2. **AnonymousInnerClass(匿名内部类)**
- 匿名内部类可以直接继承一个类或实现一个接口,但只能做一次,并且没有名称。它常用于简洁地实现回调、事件监听等场景。
3. **StaticNestedClass和InnerClass**
- 静态嵌套类(Static Nested Class)是静态成员类,不持有对外部类的引用,可以直接通过类名访问,类似于普通的静态类。
- 内部类(Inner Class)是非静态的,每个内部类对象都隐含地持有一个外部类的对象引用,需要先创建外部类对象才能创建内部类对象。
4. **& 和 && 的区别**
- `&` 是位运算符,用于进行按位与操作,也可以在逻辑表达式中作为短路与,但始终会计算两边的操作数。
- `&&` 是逻辑与运算符,如果第一个操作数为假,就不会计算第二个操作数,这种称为短路与。
5. **HashMap和Hashtable的区别**
- `HashMap` 不是线程安全的,适用于单线程环境,允许null键和null值。
- `Hashtable` 是线程安全的,不能接受null键和null值,它是`Dictionary`类的子类。
6. **Collection和Collections的区别**
- `Collection` 是所有集合类的父接口,代表一组对象的集合。
- `Collections` 是一个工具类,提供了对集合类的一系列操作方法,如排序、搜索和修改等。
7. **使用assert**
- `assert` 用于断言,主要用于调试阶段,用来验证程序中的一些假设是否正确。在生产环境中,一般关闭断言功能,以提高性能。
8. **GC(Garbage Collection)**
- GC 是垃圾收集器,负责自动回收Java程序中不再使用的对象,以释放内存。它的存在是为了避免内存泄漏和手动内存管理的复杂性。
9. **String对象的创建**
- `Strings = new String("xyz");` 创建了两个String对象,一个在常量池,一个在堆内存。
- 字符串连接操作如`s1 = s1 + 1;` 会创建新的String对象,而`s1 += 1;` 在编译后会转换为使用StringBuilder,效率更高。
10. **Math.round()**
- `Math.round(11.5)` 返回12,`Math.round(-11.5)` 返回-11。
11. **short变量的加法**
- `short s1 = 1; s1 = s1 + 1;` 错误,因为加法操作会提升为int类型,需要显式转换回short。
- `short s1 = 1; s1 += 1;` 正确,编译器会自动处理类型转换。
12. **sleep() 和 wait()**
- `sleep()` 是Thread类的方法,使当前线程暂停指定时间,不会释放对象锁。
- `wait()` 是Object类的方法,用于线程间通信,让线程等待直到其他线程调用notify()或notifyAll(),会释放对象锁。
13. **Java没有goto语句**
- Java设计时摒弃了goto,以提高代码的可读性和维护性。
14. **length() 方法**
- 数组没有`length()`方法,而是使用`length`属性获取长度。
- String有`length()`方法,返回字符串的字符数量。
15. **Overload和Override的区别**
- Overload(重载)是在同一类中,方法名相同但参数列表不同的多个方法。
- Override(重写)是指子类重新定义父类中具有相同名称和参数列表的方法。
16. **Set中的元素区分**
- Set中的元素通过`equals()`方法区分是否重复,而不是使用`==`,因为`equals()`比较的是对象内容,而`==`比较的是对象引用。
17. **常见的RuntimeException**
- 常见的运行时异常如NullPointerException,ArrayIndexOutOfBoundsException,ArithmeticException等,它们不需要在方法签名中声明。
18. **Error和Exception的区别**
- Error表示系统级错误,如内存溢出、JVM崩溃等,通常无法恢复。
- Exception是程序运行时可以预见的问题,可以通过捕获和处理继续执行。
19. **List, Set, Map与Collection的关系**
- List、Set和Map都是Java集合框架的一部分,它们都继承自`Collection`接口,但各自有不同的特性和使用场景。
20. **abstract class和interface的区别**
- 抽象类可以有构造方法、字段和非抽象方法,可以包含具体实现,一个类只能继承一个抽象类。
- 接口只包含方法声明,不能有实现,一个类可以实现多个接口。
21. **abstract method的限制**
- abstract method不能是static、native或synchronized,因为这些修饰符与抽象方法的概念相冲突。
22. **接口与接口的继承,抽象类与接口的关系**
- 接口可以继承接口,实现多继承。
- 抽象类可以实现接口,但抽象类不能继承实体类(Concrete Class),因为抽象类本身就是一个未完成的类定义。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2022-09-19 上传
2008-11-21 上传
2007-11-18 上传
Mr_pop
- 粉丝: 26
- 资源: 6
最新资源
- 巧用网络测试命令应对网络故障(使用于广大计算机用户)
- 象计算机专家一样思考 之Python
- Saber入门教程中文版.pdf
- Expert Python Programming
- EJB3 实例教程 学习EJB的好资源
- Addison.Wesley.Bjarne.Stroustrup.The.C.++Programming.Language.Third.Edition
- EXTJS 中文手册
- Java编程题及实践
- NIOS开发板电路图(Altera官方版)
- Apache服务器 攻略
- 在Tomcat和Eclipse进行远程调试的配置
- c# winfrom的串口通讯
- 深度官方所有的封装系统
- 难找到的ad9854程序
- c语言知识点详细讲解
- 交换机基本操作锐捷 交换机 配置命