Java面试是评估程序员技能的重要环节,涵盖了许多核心概念和技术。以下是对给定的Java面试题目的详细解答: 1. **final, finally, finalize的区别** - `final`:用于声明不可变的类、变量或方法,防止继承、修改或重写。 - `finally`:在异常处理中使用,确保代码块中的清理操作总会被执行,即使有异常发生。 - `finalize`:是Java中的一个方法,用于对象被垃圾收集器回收前进行清理工作,但并不总是会被调用,且不应依赖此方法进行关键资源的释放。 2. **Anonymous Inner Class** 可以继承其他类和实现接口,但它们没有名字,通常用于简洁地实现某个接口或继承一个类的特定功能。 3. **Static Nested Class 和 Inner Class**: - Static Nested Class:静态嵌套类,不持有对外部类的引用,可以独立存在,可以通过类名直接访问。 - Inner Class:非静态内部类,持有对外部类的引用,必须在外部类的对象内实例化,通过外部类对象访问。 4. **& 和 &&的区别** - `&`:位运算符,无论两边表达式如何都会进行运算;逻辑与,两边都为真时结果才为真。 - `&&`:短路逻辑与,如果左侧表达式为假,右侧就不会被执行,节省计算资源。 5. **HashMap 和 Hashtable的区别** - HashMap是非同步的,而Hashtable是同步的,适合多线程环境。 - HashMap允许null键和值,Hashtable不允许。 - HashMap使用Entry数组存储,而Hashtable使用Hashtable内部类。 6. **Collection 和 Collections的区别** - Collection是所有集合框架的顶级接口,表示单个元素的集合。 - Collections是工具类,提供了对集合框架的操作方法,如排序、查找等。 7. **assert**:用于断言,调试阶段用来检查程序状态,生产环境中默认关闭,只有在启动参数中加上`-ea`才会启用。 8. **GC (Garbage Collector)**:自动内存管理机制,负责回收不再使用的对象所占的内存,避免内存泄漏。 9. **String s = new String("xyz")** 创建了两个对象:一个在常量池,一个在堆内存。因为String是不可变的,所以创建新对象。 10. **Math.round**:四舍五入。Math.round(11.5)等于12,Math.round(-11.5)等于-11。 11. **short s1 = 1; s1 = s1 + 1** 错误,因为这涉及到自动装箱拆箱,可能导致数据溢出。正确做法是`s1 += 1`,它会自动处理数据类型转换。 12. **sleep() 和 wait()**: - sleep()使当前线程暂停执行指定时间,不会释放锁。 - wait()使线程等待,需要在同步环境中使用,释放锁,等待其他线程唤醒。 13. **Java 没有 goto** 关键字。 14. **数组的length()和String的length()**: - 数组没有length()方法,但可以通过`array.length`获取长度。 - String有length()方法,返回字符串的字符数。 15. **Override 和 Overload**: - Override:重写,子类重新定义父类的虚方法。 - Overload:重载,方法名相同但参数列表不同。 16. **Set中元素的判断**: - 使用`.equals()`判断元素是否重复,因为`==`比较的是对象引用,而`.equals()`比较的是内容。 17. **常见运行时异常**:例如`NullPointerException`、`ArrayIndexOutOfBoundsException`、`ArithmeticException`等。 18. **Error 和 Exception**: - Error:系统级错误,通常由系统或者JVM自身问题引起,无法恢复。 - Exception:程序运行过程中出现的异常情况,可以捕获并处理。 19. **List, Set, Map与Collection的关系**: - List、Set继承自Collection接口。 - Map不继承Collection,但实现了Iterable接口。 20. **abstract class 和 interface**: - 抽象类可以有方法实现,可以有非抽象方法和成员变量。 - 接口只包含抽象方法和常量,不能有方法实现。 21. **abstract method的限制**: - 不能同时为static,因为抽象方法没有具体实现,而静态方法属于类。 - 不能同时为native,因为原生方法需要C/C++实现。 - 不能同时为synchronized,因为抽象方法没有具体实现,无需同步。 22. **接口继承接口**:可以,接口可以多继承。 - 抽象类可以实现接口,但只能实现一个抽象类。 - 抽象类可以继承实体类。 23. **启动线程**:用`start()`,调用`run()`相当于普通方法调用,不会创建新线程。 24. **Constructor不能被override**,但可以被重载。 25. **不能继承String类**,因为String是final的。 26. **synchronized方法**:当一个线程进入对象的synchronized方法后,其他线程无法进入该对象的其他synchronized方法,但可以进入非synchronized方法。 27. **try-finally中的return**:finally块的代码总会被执行,无论是否有return语句。return执行后,finally块的代码仍然会执行,但在return之后,不会影响返回值。 28. **计算2的8次方**:最有效率的方法是`Math.pow(2, 8)`,或者用位运算`1 << 8`。 29. **两个对象值相同但hash code不同**:可能,equals()比较对象内容,而hashCode()是基于对象内存地址计算的,除非重写了equals()和hashCode()。 30. **值传递与引用传递**:Java中所有参数传递都是值传递,对于对象则是对象引用的副本。改变对象属性是可以的,因为是改变引用指向的对象内容,而不是引用本身。 31. **switch**:在Java 7之前,switch不能用于byte、char、short和int。从Java 7开始,也可以用枚举类型。在Java 14之后,switch可以用于字符串(String)。 32. **Singleton设计模式**:确保一个类只有一个实例,通常使用私有构造器、静态工厂方法和一个私有的类级静态变量来实现。 以上内容涵盖了Java语言中的一些关键知识点,对于理解Java的特性和面向对象编程非常重要,也是面试中常见的问题。
- 陈胖子_hh2019-09-16还行吧,就是有点贵
- 粉丝: 14
- 资源: 40
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助