Java面试宝典涵盖了广泛的Java基础知识,旨在帮助求职者准备面试。以下是部分章节中的知识点详解:
1. **源文件多类限制**:一个`.java`源文件可以包含多个类,但这些类不能同时声明为`public`,否则编译器会报错。每个类只能有一个`public class`定义。
2. **Java中的`goto`语句**:Java不支持`goto`语句,避免了控制流的混乱,提倡使用`break`和`continue`来控制循环结构。
3. **`&`和`&&`的区别**:`&`是位运算符,用于按位与操作;而`&&`是逻辑与运算符,只有当两个表达式都为真时结果才为真。前者用于数值比较,后者用于条件判断。
4. **嵌套循环跳出**:在Java中,通过`break`语句可以跳出最内层的循环,如果需要跳出所有嵌套循环,需使用`finally`块或者自定义标志变量配合`break`。
5. **`switch`语句的适用范围**:`switch`语句可以作用于`byte`类型,但不能直接作用于`long`或`String`上。对于字符串,通常使用`equals`方法进行比较。
6. **`short`类型赋值问题**:`short s1 = 1; s1 = s1 + 1;`没有错误,因为整数自动提升为`int`类型;`shorts1 = 1; s1 += 1;`会有编译错误,因为`s1 += 1`意味着将结果赋值给`s1`,而不是直接进行加法。
7. **`char`类型存储**:`char`类型只能存储单个Unicode字符,无法存储中文汉字,因为一个汉字由多个`char`组成。
8. **高效计算乘法**:用位运算(如移位操作)来快速计算,如`2 * 8`可以通过`2 << 3`得到,效率高且无须乘法运算。
9. **大数计算器设计**:设计一个大数计算器需要考虑性能优化,如使用数组来处理超出`int`范围的大数值,同时确保正确处理溢出和进位。
10. **final修饰变量**:`final`修饰变量时,指的是变量的引用不可变,但引用的对象可以是常量或者在初始化后不可变。
11. **`==`与`equals`的区别**:`==`比较的是对象引用,`equals`则用于比较对象的内容,如字符串和自定义类的对象。
12. **静态变量与实例变量**:静态变量属于类,全局共享,实例变量随对象实例化而存在;静态变量在类加载时初始化,实例变量在创建对象时初始化。
13. **静态方法调用**:从静态方法内部可以调用非静态方法,但需要通过创建对象实例来间接调用。
14. **`Integer`与`int`的区别**:`Integer`是包装类,表示整数对象,提供了方便的转换方法和默认值,`int`则是基本数据类型。
15. **`Math.round`方法**:`Math.round(11.5)`等于12,`Math.round(-11.5)`等于-11,四舍五入规则根据Java的实现可能有所不同。
16. **代码审查**:这段内容可能涉及代码审查,强调检查语法错误、逻辑错误和最佳实践,如避免不必要的类型转换或滥用`null`。
17. **访问修饰符**:`public`公开,`private`私有,`protected`受保护,不写默认为包内可见。这些修饰符影响类、方法和变量的可见性和封装性。
18. **重载与覆盖**:重载是同名方法的不同实现,返回值类型不影响,覆盖是子类对父类方法的重写,必须具有相同的签名。
19. **构造器重写**:构造器不可以被重写,但可以有重载。
20. **接口与继承**:接口可以继承接口,抽象类可以实现接口,但不能继承具体类。抽象类可以有非静态`main`方法,接口则不能。
21. **`clone()`方法**:通常情况下,`clone()`方法的第一行代码是`return this.clone();`,用于浅复制对象。
22. **面向对象特性**:封装、继承、多态和抽象是面向对象编程的核心特性。
23. **Java多态机制**:通过方法重写、接口实现和泛型等方式实现,允许子类对象替换其父类引用,并在运行时动态调用相应方法。
24. **抽象类与接口的区别**:抽象类可以有实现(含默认方法),接口只定义方法签名,不允许实现;抽象类可以包含成员变量,接口全为常量。
25. **抽象方法属性**:抽象方法不能同时是静态、`native`或`synchronized`,它们通常在子类中具体实现。
26. **内部类与嵌套类**:内部类是定义在其他类内部的,StaticNestedClass是静态嵌套类,它们有自己的作用域规则。
27. **内部类引用外部类成员**:内部类可以访问其外部类的非`private`成员,但有一定的限制,如访问权限和作用域。
28. **匿名内部类**:匿名内部类用于一次性、临时性的继承或实现,无需命名,通常用作事件监听器或线程的实现。
以上知识点概述了Java基础面试中的核心概念,涵盖从语法到设计模式的各个方面,对于准备Java面试至关重要。