Java面试必知:核心问题大考究

需积分: 16 4 下载量 166 浏览量 更新于2024-12-31 收藏 34KB DOC 举报
"Java面试题集锦" Java程序员在面试中常常会遇到一系列技术问题,这些问题涵盖了许多核心概念和技术细节。以下是对这些常见面试问题的详细解答: 1. **面向对象的特征**:封装、继承、多态。封装是将数据和操作数据的方法绑定在一起,隐藏内部实现;继承允许子类继承父类的属性和行为;多态则是同一接口,不同对象可以有不同响应。 2. **String不是基本数据类型**,它是对象,属于引用类型。Java的八大基本数据类型包括byte, short, int, long, float, double, char, boolean。 3. **int和Integer的区别**:int是基本类型,直接存储数值;Integer是int的包装类,是对象,提供了更多方法,如自动装箱/拆箱。 4. **String和StringBuffer的区别**:String是不可变对象,每次修改都会生成新对象;StringBuffer线程安全,用于大量字符串拼接,避免频繁创建对象。 5. **运行时异常与一般异常**:运行时异常( unchecked exceptions)不需在方法上声明,一般异常( checked exceptions)则需要。两者都是异常,但运行时异常在编译时不检查。 6. **ArrayList, Vector, LinkedList**:ArrayList基于动态数组,适合随机访问,插入删除效率低;Vector与ArrayList类似,但线程安全;LinkedList适合链式结构,插入删除快,但随机访问慢。ArrayList和Vector的主要区别在于线程安全,Vector的add、remove等方法加了synchronized。 7. **Collection和Collections**:Collection是所有集合框架的顶层接口,表示单列集合;Collections是工具类,提供了一系列静态方法用于操作集合。 8. **&和&&的区别**:&是位运算符,无论两边表达式如何都计算;&&是逻辑运算符,短路运算,如果左边为假,右边不会执行。 9. **HashMap和Hashtable**:HashMap非线程安全,允许null键值;Hashtable线程安全,不允许null键值。 10. **final, finally, finalize**:final修饰变量不可改变,类不可继承,方法不可重写;finally保证代码块始终执行;finalize是垃圾回收前调用的清理方法。 11. **Overload和Override**:Overload是重载,方法名相同,参数列表不同;Override是重写,子类方法与父类方法签名完全一致。Overloaded方法可以改变返回类型,但Override不可以。 12. **error和exception**:Error是严重问题,如系统资源耗尽,无法恢复;Exception是程序可以处理的异常情况。 13. **同步和异步**:同步保证操作顺序执行,适用于数据一致性要求高的场景;异步强调并发性,提高系统效率。根据任务性质选择,如I/O密集型适合异步,CPU密集型适合同步。 14. **abstractclass和interface**:抽象类可以有字段和方法实现,最多一个抽象类;接口只有方法声明,没有实现,可以多继承。 15. **heap和stack**:堆内存存放对象,动态分配,回收由GC管理;栈内存存放基本类型和对象引用,按需分配,自动回收。 16. **StaticNestedClass和InnerClass**:静态嵌套类(静态内部类)像普通类一样,无需外部类实例即可创建;内部类(非静态内部类)必须依赖外部类实例。 17. **assert**:用于断言,调试阶段检查程序状态,生产环境中默认关闭。 18. **GC(Garbage Collection)**:自动回收不再使用的内存空间,防止内存泄漏。 19. **shorts1=1;s1=s1+1** 错误,因为运算后结果是int,需要强制类型转换;**s1+=1** 正确,编译器自动处理了类型转换。 20. **Math.round(11.5)** 等于12,**Math.round(-11.5)** 等于-11,round方法四舍五入到最近整数。 21. **Strings=newString("xyz")** 创建了1个String对象,字符串常量池中已存在"xyz"。 22. **Java没有goto语句**,提倡结构化编程。 23. **常见的runtimeexception**:NullPointerException,ArrayIndexOutOfBoundsException,ArithmeticException等。 24. **接口可以继承接口**,抽象类可以实现接口。抽象类不能继承另一个抽象类。 25. **List, Set, Map** 不继承自Collection接口,但List和Set是,Map不是。 26. **Object类** 是所有Java类的根类,包含equals(), hashCode(), toString()等通用方法。 27. **abstract方法不能是static, native或synchronized**,因为这些修饰符与抽象方法的定义冲突。 28. **数组没有length()方法**,但有length字段;String有length()方法返回字符串长度。 29. **Set判断重复** 通常使用equals(),因为==比较的是对象引用,equals()比较对象内容。 30. **构造器Constructor不能被override**,但可以被重载。 31. **不能继承String类**,因为String是final的。 32. **switch不能作用在byte, short, char, 和枚举类型**,JDK 7以后可以支持枚举类型。 这些面试问题涵盖了Java的基础语法、集合框架、异常处理、多线程、内存管理等多个关键领域,理解并掌握这些知识点对于成为一名合格的Java程序员至关重要。