Java面试宝典2013版是一本针对Java工程师的面试指南,包含了丰富的技术问题和知识点,旨在帮助求职者准备和提升面试能力。以下是部分关键知识点的详细解析:
1. **源文件中的类**:一个.java文件理论上可以包含多个公共类,但每个类必须有自己的名称,且不能定义为静态或内部类。限制在于,如果多个类中有同名的类,编译器将报错。
2. **Java中的`goto`语句**:Java语言不支持传统的`goto`语句,因为它可能导致代码难以理解和维护,提倡使用控制结构如`break`和`continue`。
3. **`&`与`&&`的区别**:`&`是位运算符,用于按位与;而`&&`是逻辑与运算符,用于条件判断。两者的运算性质和使用场景不同。
4. **跳出嵌套循环**:在Java中,可以使用`break`语句跳出当前嵌套的循环,或者使用标签(label)配合`break`或`continue`来指定跳转到哪一层循环。
5. **`switch`语句**:`switch`语句支持byte、char和枚举类型,但不支持long和String,因为它们没有对应的整数常量池。
6. **`short`类型和赋值错误**:`shorts1=1;s1=s1+1;`会创建一个新的`short`对象,而`s1+=1;`则是对原始值进行自增,避免了复制。第一个表达式存在类型转换错误。
7. **`char`与中文字符**:虽然`char`类型可以存储单个Unicode字符,但一个中文汉字由多个`char`组成,不能直接存储。
8. **高效计算**:用`*`运算符进行乘法运算是最有效率的方法来求解2乘以8的值。
9. **大数计算器**:设计一个大数计算器可能涉及数据结构如 BigInteger 或 BigInteger 类,处理超出基本类型范围的大数值。
10. **final修饰变量**:`final`修饰的变量是常量,其引用不可变,但如果是引用类型(如对象),则对象本身可以被修改。
11. **`==`与`equals()`**:`==`比较的是对象引用,`equals()`比较的是对象内容。对于对象,应使用`equals()`检查相等性,除非明确知道比较的是引用。
12. **静态变量与实例变量**:静态变量属于类,所有对象共享,实例变量与每个对象绑定。静态变量没有默认实例,而实例变量需要创建对象才能存在。
13. **静态方法调用**:静态方法可以从静态方法内调用非静态方法,但非静态方法不能直接调用静态方法。
14. **`Integer`与`int`**:`Integer`是包装类,用于自动装箱和拆箱,`int`是基本类型,两者在性能和内存管理上有区别。
15. **`Math.round()`方法**:`Math.round(11.5)`返回12,`Math.round(-11.5)`返回-11,取决于四舍五入规则。
16. **代码审查**:这部分可能涉及代码规范、异常处理或优化建议,需要找出潜在问题和不当之处。
17. **访问修饰符**:public(公共)、private(私有)、protected(受保护)决定了类成员的可见性和访问范围,不写则默认为包访问。
18. **重载(Overload)与覆盖(Override)**:重载是方法名相同但参数列表不同的行为,返回值类型不影响。覆盖是子类重写父类方法,需满足方法名、参数列表、返回类型和抛出异常完全匹配。
19. **构造器重写**:构造器不能被覆盖,但可以重载。Java不支持多继承,所以接口不能继承接口,抽象类可以实现接口,但不能继承具体类。
20. **`clone()`方法**:通常的实现中会调用`super.clone()`,以确保新对象正确初始化。
21. **面向对象特性**:包括封装、继承、多态、抽象和接口等。
22. **多态机制**:Java通过方法重载、继承和接口实现多态,允许使用父类引用调用子类的方法。
23. **抽象类与接口**:抽象类可以包含具体方法实现,接口只能包含抽象方法(默认无实现)。abstract方法可以同时声明为static、native或synchronized,但不能同时声明这三种特性。
24. **内部类和NestedClass**:内部类包括StaticNestedClass(静态内部类)和InnerClass(非静态内部类)。StaticNestedClass可以访问外部类的静态成员,而InnerClass不能。
25. **匿名内部类**:可以继承其他类,但不能直接定义为静态的,因为没有类名。
通过这些知识点,面试者可以系统地了解和复习Java的基础和面试常见问题,提高面试表现。