"Java面试宝典是一套针对Java软件开发面试者的复习资料,旨在帮助无经验的求职者在笔试和面试中取得成功。这套宝典覆盖了广泛的Java基础知识,需要求职者逐步学习并掌握,建议每天学习一部分,以达到最佳效果。"
在Java面试中,以下是一些重要的知识点:
1. Java源文件可以包含多个类,但只能有一个公共类(public class),且文件名必须与公共类的名称相同。
2. Java中没有`goto`关键字,它通常被视为降低代码可读性的元素,已被其他控制流结构替代。
3. `&`和`&&`都是逻辑运算符,`&`始终计算两边的操作数,而`&&`(短路逻辑与)仅当第一个操作数为假时才计算第二个操作数。
4. 要跳出多重嵌套循环,可以使用`break`语句配合标签(label)来指定跳出特定层次的循环。
5. `switch`语句不能作用于`byte`,但自Java 7开始可以作用于`char`,`short`,`int`,`枚举类型`和`String`(Java 7及以上)。
6. 在`short s1 = 1;`后,`s1 = s1 + 1;`会因为隐式类型提升导致编译错误,因为结果是`int`类型。而`s1 += 1;`会自动转换回`short`类型。
7. `char`型变量可以存储中文字符,因为UTF-16编码允许在单个`char`中存储中文。
8. 计算2乘以8最有效的方法是直接写`2 * 8`。
9. 设计一个能处理一百亿的计算器,需要考虑大数运算,可以使用BigInteger类来处理。
10. 使用`final`修饰变量时,引用本身不可变,意味着不能重新赋值指向其他对象,但引用的对象是可以改变的(如果对象是可变的)。
11. `==`比较的是两个对象的引用,而`equals()`方法通常比较的是对象的内容。对于基本类型,`==`就是值比较;对于对象,`equals()`通常是重写过的比较逻辑。
12. 静态变量属于类,生命周期与类相同;实例变量属于对象,随着对象的创建和销毁而变化。静态变量可被类的所有实例共享,而实例变量只属于特定对象。
13. 不可以在静态方法内部直接调用非静态方法,因为非静态方法依赖于实例对象,而静态方法属于类。
14. `Integer`是`int`的包装类,`int`是原始类型。`Integer`对象包含额外功能,如自动装箱/拆箱,`equals()`方法等,而`int`则更轻量级。
15. `Math.round(11.5)`等于12,`Math.round(-11.5)`等于-11。`Math.round()`四舍五入到最接近的整数。
16. 对于不妥之处的代码,需要具体代码分析。
17. 公共(public)访问修饰符表示任何地方都可以访问,私有(private)表示只有在同一个类里可以访问,受保护(protected)表示在同一包或子类中可以访问,无修饰符(默认)表示同一包内可以访问。
18. 重载(Overload)方法可以改变参数列表,但不能改变返回类型。重写(Override)方法必须保持方法签名一致,可以改变实现。
19. 构造器不能被覆盖(override),但可以被重载。
20. 接口可以继承接口。抽象类可以实现接口。抽象类可以继承具体类,但抽象类中的静态main方法无意义,因为静态方法无法访问非静态成员。
21. 实现`clone()`方法时,通常会包含`super.clone()`调用,以创建对象的浅复制。
22. 面向对象的特征包括封装、继承、多态和抽象。
23. Java通过方法的重写(Override)和重载(Overload)实现多态性。
24. 抽象类(abstract class)可以包含方法实现,而接口(interface)只能声明方法,不允许有实现。抽象类可以有成员变量,接口不能。
25. abstract方法不能是static,不能是native,也不能是synchronized,因为这些特性与抽象方法的概念相冲突。
26. 内部类(Inner Class)是定义在另一个类内部的类,分为静态内部类(Static Nested Class)和非静态内部类。静态内部类可以像普通类一样实例化,无需外部类的实例;非静态内部类需要外部类的实例才能创建。
27. 内部类可以直接访问包含类的所有成员,包括私有成员,但静态内部类不能直接访问包含类的非静态成员。
28. 匿名内部类是没有名字的类,常用于快速创建一次性使用的类,通常用于实现接口或继承已有类。
以上知识点涵盖了Java的基础语法、面向对象特性、异常处理、数据类型、类与对象、接口、多态、内存管理等多个方面,是面试中常见的问题。深入理解和掌握这些概念将有助于提升面试成功率。