Java面试精华:详解常见知识点与误区

需积分: 4 3 下载量 94 浏览量 更新于2024-09-24 收藏 42KB DOC 举报
在Java面试中,面试官通常会考察候选人的基础知识和理解深度。以下是一些关键的Java概念和面试题,涵盖了类的修饰符、匿名内部类、静态嵌套类、运算符、集合框架、异常处理、基础数据类型、多态、并发与同步、接口和抽象类的区别以及线程操作等内容。 1. **final, finally, finalize的区别:** - `final`用于修饰变量、方法或类,分别表示常量、不可变方法和最终类,不允许子类覆盖或重写。 - `finally`是try-catch-finally语句块的一部分,确保在任何情况下(正常或异常退出)都会执行的代码。 - `finalize`是对象的析构函数,由垃圾收集器在对象即将被回收时自动调用,但并非总能保证执行。 2. **匿名内部类与继承/实现:** - 匿名内部类不能直接继承其他类,但可以通过实现接口实现多态性。 3. **StaticNestedClass vs Inner Class:** - Static Nested Class是静态的,它不需要创建实例即可访问,而Inner Class(非静态)通常作为外部类的成员,随外部类实例存在。 4. **运算符&和&&:** - `&`是位与运算符,用于位操作,`&&`是逻辑与运算符,用于条件判断。 5. **HashMap vs Hashtable:** - HashMap是非线程安全的,而Hashtable是线程安全的,但性能略低,因为提供了额外的同步机制。 6. **Collection vs Collections:** - Collection是接口,代表一系列对象的容器,Collections是Java提供的工具类,提供对Collection的实用操作。 7. **assert的使用:** - 用于在开发阶段检查条件是否满足,编译时不会移除,仅在运行时生效,有助于发现潜在错误。 8. **Garbage Collector (GC):** - Java的内存管理机制,负责自动回收不再使用的内存,以防止内存泄漏。 9. **String对象创建:** - `Strings.newString("xyz")`每次都会创建新的String对象,`"xyz"`是字符串字面量。 - 对于`Math.round()`的结果,取决于舍入策略。 10. **基础类型赋值和算术运算:** - shorts1 = 1; s1 = s1 + 1;有类型不匹配错误,应为`s1 = (short)(s1 + 1)`。 - shorts1 = 1; s1 += 1;是正确的,使用复合赋值运算符。 11. **sleep() vs wait():** - sleep()使当前线程暂停执行,而wait()使线程放弃对象锁并进入等待状态,直到被唤醒。 12. **Java中的goto:** Java不支持`goto`关键字,避免了控制流程的混乱。 13. **length()方法:** - 数组有`length`属性,返回数组长度;String也有`length()`方法,返回字符串长度。 14. **Overload和Override:** - Overload是同名方法但参数列表不同,Override是子类重写父类方法,且返回值类型不能改变。 15. **Set的重复元素检测:** - 使用`equals()`方法比较元素内容,`equals()`是基于引用,`==`是基于地址。 16. **RuntimeException:** - 常见的运行时异常,如NullPointerException、ArrayIndexOutOfBoundsException等。 17. **Error vs Exception:** - Error表示严重问题,通常是JVM内部错误,Exception表示编程错误或预期之外的情况。 18. **继承关系:** - List, Set, Map都继承自Collection接口。 - AbstractClass不能直接实现接口,但可以继承实体类。 - Interface可以继承接口,但不能继承类。 19. **线程操作:** - 启动线程使用`start()`方法,而不是`run()`,后者在Thread对象创建后立即执行。 - 构造器不能被override,但可以重载。 - String类是不可继承的。 20. **线程同步:** - 当一个线程进入synchronized方法,其他线程会被阻塞,直到该线程执行完毕。