Java面试必备知识点:关键概念与问题解析

需积分: 10 5 下载量 131 浏览量 更新于2024-09-20 1 收藏 143KB PDF 举报
"Java面试题集,涵盖Java基础、语法特性、集合框架、多线程、内存管理等多个方面,旨在帮助求职者准备Java程序员面试。" 1. **final,finally,finalize的区别** - `final` 关键字用于声明变量、方法或类,表示不可改变或不可覆盖。对于变量,一旦赋值就不能再改变;对于方法,不允许子类重写;对于类,表示该类不能被继承。 - `finally` 是异常处理语句的一部分,无论是否发生异常,finally块中的代码都会执行,通常用来释放资源。 - `finalize` 是一个特殊的方法,当垃圾收集器确定对象不再被引用时,会调用对象的`finalize`方法,但不应依赖此方法进行资源清理,因为其执行时机不确定。 2. **匿名内部类** - 匿名内部类可以直接定义在需要使用它的上下文中,无需命名。它可以继承一个类或实现一个接口。 - 可以继承其他类,但只能继承一个类。 - 可以实现一个或多个接口。 3. **Static Nested Class 和 Inner Class** - Static Nested Class 是静态嵌套类,它不持有对外部类的引用,可以独立存在,可以有静态成员。 - Inner Class(非静态嵌套类)持有外部类的引用,必须依附于外部类实例存在,可以访问外部类的私有成员。 4. **& 和 && 的区别** - `&` 是位运算符,用于按位与操作,也可以在布尔表达式中作为逻辑与,此时两边的表达式都会被计算。 - `&&` 是逻辑与运算符,只有当第一个表达式为真时,才会计算第二个表达式,常用于短路逻辑。 5. **HashMap 和 Hashtable** - HashMap 是非同步的,允许null键和null值,效率相对高。 - Hashtable 是同步的,不允许null键和null值,效率相对低。 6. **Collection 和 Collections** - Collection 是接口,是所有单列集合的父接口。 - Collections 是工具类,提供了一组对集合进行操作的静态方法。 7. **assert 的使用** - `assert` 用于断言,用于调试,断言条件如果为假,程序将抛出 AssertionError 错误。 8. **GC (Garbage Collector)** - GC 是Java的自动内存管理系统,负责回收不再使用的对象占用的内存,防止内存泄漏。 - 有GC是因为程序员不需要手动管理内存,简化编程,同时也避免了内存泄露问题。 9. **String 对象的创建** - 创建 String 对象如 `Strings = new String("xyz")` 会创建两个对象:常量池中的"xyz"和堆内存中的引用对象。 10. **Math.round() 方法** - Math.round(11.5) 返回12,Math.round(-11.5) 返回-11。 11. **shorts1 = 1; s1 = s1 + 1; 与 shorts1 = 1; s1 += 1; 的区别** - 前者在加法操作后需要强制类型转换,否则编译错误,因为s1+1的结果是int类型。 - 后者是复合赋值操作符,自动处理类型转换,所以不会出错。 12. **sleep() 与 wait()** - sleep() 是 Thread 类的方法,使当前线程暂停指定时间,不释放锁。 - wait() 是 Object 类的方法,使当前线程等待,释放锁,需要在同步环境中使用。 13. **Java 没有 goto 关键字。** 14. **数组与 String.length()** - 数组没有 length() 方法,但有 length 属性,如 `int len = array.length`。 - String 有 length() 方法,如 `int len = str.length()`。 15. **Overload 和 Override** - Overload(重载)是同一个类中方法名相同但参数列表不同的方法,返回类型可以不同。 - Override(重写)是子类重写父类中同名同参的方法,返回类型和访问权限不能缩小。 16. **区分重复元素:equals() vs ==** - equals() 比较对象内容是否相等,对于自定义类需要重写。 - == 比较对象的引用是否指向同一内存地址,对于基本类型比较数值。 17. **常见的 RuntimeException:例如 NullPointerException、ArithmeticException 等。** 18. **Error 和 Exception 的区别** - Error 是严重问题,如系统资源耗尽,一般程序无法恢复。 - Exception 是程序可以预见并尝试处理的异常。 19. **List,Set,Map 与 Collection** - List,Set 和 Map 都属于 Java 集合框架的一部分,但它们不是继承自 Collection 接口,而是直接或间接实现了该接口。 20. **abstract class 和 interface** - 抽象类可以有构造方法、实例变量、非抽象方法,可以实现多继承。 - 接口只包含抽象方法和默认方法,不能有实例变量,支持多继承。 21. **abstract method 的限制** - abstract 方法不能是 static,因为静态方法属于类而不是对象,与抽象概念不符。 - abstract 方法不能是 native,因为 native 方法由其他语言实现,而抽象方法需要子类提供实现。 - abstract 方法也不能是 synchronized,因为抽象方法没有具体实现,不需要同步控制。 22. **接口继承接口,抽象类实现接口** - 接口可以继承接口,实现多继承。 - 抽象类可以实现接口,但抽象类也可以继承普通类。 23. **启动线程:start() vs run()** - start() 用于启动线程,会自动调用 run() 方法,线程是在新的线程上执行。 - run() 直接调用则在当前线程执行,不会创建新线程。 24. **构造器 Constructor 不可被 override** - 构造器不能被重写,但可以被重载。 25. **继承 String 类** - Java 中 String 类是 final 的,因此不能被继承。 26. **线程同步** - 当一个线程进入对象的 synchronized 方法后,其他线程无法同时进入该对象的其他 synchronized 方法或 synchronized(this) 代码块,直至该线程退出 synchronized 区域。