Java面试必备:基础陷阱与核心知识点解析

需积分: 10 2 下载量 2 浏览量 更新于2024-10-18 收藏 38KB DOC 举报
"java陷阱--面试(题集)杂谈" 面试是评估技术能力的重要环节,而Java面试往往侧重于基础知识的考察。以下是一些常见的Java面试题及其详细解答: 1. **final, finally, finalize的区别**: - `final` 是一个修饰符,用于变量、方法和类,表示不可变或不可重定义。 - `finally` 用于异常处理,无论是否发生异常,finally块中的代码总会被执行。 - `finalize` 是Object类的一个方法,用于对象销毁前进行清理工作,但不保证一定会被调用,且不推荐直接使用。 2. **匿名内部类** 可以直接继承其他类或实现接口,但只能做一次,并且没有名字,通常用于简化代码和创建回调函数。 3. **StaticNestedClass和Inner Class**: - StaticNestedClass 是静态嵌套类,它不持有对外部类的引用,可以直接实例化,类似于普通类。 - Inner Class(非静态内部类)与外部类有紧密关系,持有对外部类的隐式引用,需要外部类实例才能创建。 4. **& 和 && 的区别**: - `&` 是位运算符,对两个操作数的每一位进行按位与操作;在布尔表达式中,`&`始终会计算两边的操作数。 - `&&` 是逻辑与运算符,只有当左侧表达式为真时,才会评估右侧表达式,用于短路逻辑判断。 5. **HashMap和Hashtable的区别**: - HashMap 不是线程安全的,允许null键和null值,迭代时可能会有并发修改问题。 - Hashtable 是线程安全的,不允许null键和null值,适用于多线程环境。 6. **Collection和Collections的区别**: - Collection 是接口,是所有单列集合的父接口。 - Collections 是工具类,提供了一系列静态方法,用于操作集合,如排序、查找、填充等。 7. **assert** 用于断言,用于在开发阶段检查程序的正确性,生产环境中默认关闭,通过 `-enableassertions` 或 `-ea` 开启。 8. **GC(Garbage Collector)** 是Java的内存管理机制,自动回收不再使用的对象以释放内存,避免内存泄露。 9. **Strings = new String("xyz"); 创建了几个StringObject?** 在Java中,创建字符串时会创建一个新的对象,所以这里创建了两个对象:一个在常量池,一个在堆。 10. **Math.round()** 方法: - Math.round(11.5) 等于 12,因为Math.round()会将浮点数四舍五入为最接近的整数。 - Math.round(-11.5) 等于 -11,同样遵循四舍五入规则。 11. **short s1 = 1; s1 = s1 + 1; 与 s1 += 1的区别**: - 第一句需要先将s1转换成int类型,然后相加,再赋值回short,可能导致编译错误。 - 第二句是复合赋值运算符,编译器会自动处理类型转换,通常不会出错。 12. **sleep() 和 wait()**: - sleep() 是Thread类的方法,使当前线程睡眠指定时间,不会释放锁。 - wait() 是Object类的方法,用于线程间协作,使线程进入等待状态并释放持有的锁。 13. **Java 没有 goto 语句**,这是为了避免复杂的控制流,提高代码可读性和维护性。 14. **数组的 length() 和 String 的 length()**: - 数组没有 length() 方法,但可以通过 `.length` 访问长度。 - String 有 length() 方法,返回字符串的字符数量。 15. **Overload 和 Override**: - Overload(重载)是指在同一个类中,方法名相同但参数列表不同(参数类型、数量或顺序不同)的方法。 - Override(重写)是指子类中定义的方法与父类方法同名,且参数列表完全相同,用于覆盖父类的方法。 16. **Set里的元素不能重复**,区分重复通常通过equals()和hashCode()方法,重写这两个方法可以自定义元素的比较逻辑。 面试题的多样性反映了Java语言的复杂性和深度,理解并熟练掌握这些基础概念对于成为一名优秀的Java开发者至关重要。在面试中,清晰、准确地回答这些问题不仅能展示你的技术功底,也可能直接影响到你是否能成功获得心仪的工作机会。