Java面试精华:详解经典问题及答案

需积分: 4 2 下载量 53 浏览量 更新于2024-09-16 收藏 45KB DOC 举报
在本次Java面试题库中,我们将探讨一系列关键的概念和知识点,以帮助你更好地准备面试。首先,我们来解析关于关键字final、finally和finalize的区别: 1. **final**: final可以修饰变量、方法或类,表示不可变性。- 变量final意味着一旦赋值,就不能更改;- 方法final不能被重写;- 类final意味着类是不可派生的(即不能创建其子类)。 2. **AnonymousInnerClass (匿名内部类)**: 可以继承其他类,但不能直接实现接口,因为匿名类通常用于实现接口或继承已知行为,而非定义接口。 3. **StaticNestedClass与Inner Class**: Static Nested Class是在类内部定义的静态类,不与特定的对象关联,而Inner Class则随其外部类实例化。Static Nested Class不能访问外部类的非静态成员,而Inner Class可以。 4. **&与&&的区别**: "&" 是位运算符,用于按位与;"&&" 是逻辑运算符,用于条件判断,只有在所有前缀表达式都为真时结果才为真。 5. **HashMap与Hashtable**: HashMap是非同步的,允许null键值对,且插入顺序可能不保序;Hashtable是同步的,不允许null键值对,插入顺序不变。 6. **Collection与Collections**: Collection是基础接口,代表集合;Collections是工具类,提供对Collection的便利操作。 7. **assert**: 用于在开发阶段检查条件,如果条件为假,则抛出AssertionError,用于辅助调试。 8. **Garbage Collection (GC)**: 是Java自动管理内存的过程,回收不再使用的对象以防止内存溢出。GC的触发是由JVM根据内存使用情况决定的。 9. **String对象创建**: "Strings=newString("xyz");"会创建多个String对象,因为每次new String都会创建新的实例。而String是不可变的,所以"String s = "xyz";"只创建一个。 10. **Math.round()**: 对于整数部分,Math.round(11.5)等于12,Math.round(-11.5)等于-11,它四舍五入到最接近的整数。 11. **short变量操作**: shorts1=1;s1=s1+1;有类型不匹配错误,因为+=会隐式转换为short类型;shorts1=1;s1+=1;正确,这里隐式转换为short类型后相加。 12. **sleep()与wait()**: sleep是Thread类的方法,使当前线程睡眠一段时间;wait是Object类的方法,使线程等待自身被唤醒。 13. **Java中的goto**: Java废除了传统的goto语句,避免控制流程的混乱。 14. **Array长度属性**: 数组有length()方法获取元素个数;String也有length()方法,获取字符数量。 15. **Overload与Override**: Overload是同名方法在不同参数列表或返回类型下的重载;Override是子类重写父类方法。Overloaded方法不能改变返回值类型。 16. **Set元素比较**: Set中的元素不可重复,equals()用于判断内容相等,而==用于基本类型或引用类型的比较。 17. **常见运行时异常**: 如NullPointerException、ArrayIndexOutOfBoundsException等,它们在程序运行期间抛出。 18. **Error与Exception**: Error是更严重的运行时问题,如系统资源不足;Exception是预期的、可恢复的运行时错误。 19. **继承关系**: List, Set, Map都继承自Collection接口,但不互相继承。 20. **abstract class与interface**: abstract class可以包含实现代码,接口只能定义方法,不能包含实现;类可继承一个抽象类,但实现多个接口。 21. **abstract method特性**: 不能同时声明为static、native或synchronized。 22. **接口继承**: 接口可以继承接口,抽象类可以实现接口但不能继承其他类,实体类可以实现接口。 23. **线程启动**: 使用start()方法启动线程,run()方法是线程执行体。 24. **构造器覆写**: 构造器可以被覆写,用于创建子类对象时定制初始化过程。 25. **继承String**: 不可以,Java不支持继承,但可以通过String类的实例方法实现功能复用。 26. **线程同步**: 当一个线程进入synchronized方法,其他线程必须等待,直到该线程结束才能继续。 27. **try-catch-finally**: try块包含可能抛出异常的代码,catch处理异常,finally块无论是否发生异常都会执行清理操作。 这些知识点涵盖了Java面试中常见的核心概念,深入理解这些将有助于你在面试中展现扎实的编程技能和理论知识。