2017 Java面试精华:涵盖基础到进阶知识点

需积分: 3 32 下载量 131 浏览量 更新于2024-07-20 收藏 633KB DOC 举报
Java面试宝典2017版涵盖了广泛的Java基础知识和面试常见问题,以下是部分内容的详细解析: 1. **源文件与类**: Java源文件可以包含多个类,但不是内部类。每个类必须有自己的名字,并且一个.java文件中最多只能有一个公共类(public class)。非公共类可以有多个。 2. **Java的控制结构**: Java不支持直接使用`goto`语句,这有助于避免复杂的控制流程混乱。使用`break`和`continue`来控制循环。 3. **逻辑运算符**: `&`是按位与运算符,`&&`是逻辑与运算符。`&`用于数值运算,`&&`用于条件判断,只有当两边都为真时结果才为真。 4. **跳出嵌套循环**: 使用`break`语句可以从多重嵌套循环中任意一层退出,如`for`, `while`或`switch`循环。 5. **switch与类型**: `switch`语句适用于基本数据类型(如byte, short, char)和枚举类型,但不适用于`String`,因为`String`不是原始类型。 6. **类型转换错误**: 第一个例子中的`s1=s1+1;`没有问题,但`shorts1=1;s1+=1;`有问题,因为`s1`可能超出`short`类型的范围。第二个错误可能是类型转换错误,因为`+=`需要一个`int`或`short`。 7. **char类型**: `char`类型用于存储单个Unicode字符,包括英文字符和中文汉字,但每个`char`只占两个字节,因此无法存储完整的汉字。 8. **效率计算**: 最有效率地计算2乘以8,直接使用乘法运算符`*`即可,无需特别算法。 9. **大数计算**: 设计一个大数计算器需要了解Java的BigDecimals类或者自定义大整数算法。 10. **final关键字**: `final`修饰变量表示该变量的值不可变,如果是引用类型,则是指引用对象本身不可变,但引用指向的对象可能发生变化。 11. **"=="与equals"**: `==`比较的是对象引用,`equals()`是对象间的值比较,对于基本类型和大多数类,`==`默认实现equals方法。 12. **静态变量与实例变量**: 静态变量属于类,所有实例共享;实例变量属于对象,每个实例独立。静态方法不能直接访问实例变量,除非通过类名。 13. **方法调用**: 可以从静态方法中调用非静态方法,但静态方法不能直接调用实例方法。`Integer`是包装类,与基本类型`int`有性能差异。`Math.round()`会向最近的整数四舍五入。 14. **访问修饰符**: `public`、`private`、`protected`决定了不同作用域内的可见性和访问权限。`Overload`指方法重载,即方法名相同但参数列表不同,不改变返回值类型。`Override`是子类重写父类方法,返回值类型可以保持一致。 15. **构造器和继承**: 构造器是可以被重写的,接口可以继承接口,抽象类可以实现接口但不能继承具体类。抽象类不能有静态main方法,因为静态方法不能创建实例。 16. **Clone方法**: 写`clone()`方法时通常会调用`super.clone()`,这是实现浅复制的基础。 17. **面向对象特性**: 包括封装、继承、多态、抽象、接口等,这些是Java面向对象编程的核心概念。 18. **多态与抽象类与接口**: Java通过继承、接口和方法重写实现多态。`abstract`方法可以同时声明为`static`、`native`或`synchronized`,但这些特性与多态性不直接相关。 19. **内部类与嵌套类**: 内部类包括静态嵌套类(StaticNestedClass)和非静态嵌套类(InnerClass)。内部类可以直接访问包含类的私有成员,但有一定的限制,如不能访问final修饰的局部变量。 20. **匿名内部类**: 匿名内部类用于实现接口或继承其他类,没有明确的类名,但可以访问包含类的局部变量。 这些知识点覆盖了Java基础语法、数据类型、控制结构、面向对象概念、多态、继承和内部类等多个方面,是Java面试中常被提问的主题。掌握这些内容有助于准备和应对Java面试。