"Java程序员面试宝典2013版"
这份面试宝典涵盖了Java编程语言的基础知识,面试中常见的问题以及重要的编程概念。以下是其中的一些关键知识点:
1. **Java源文件与类的关系**:一个.java源文件可以包含多个类,但只能有一个公共类(public class),其他的类可以是非公共的。
2. **Java中的关键字**:Java没有goto关键字,它鼓励使用结构化的控制流程。
3. **逻辑运算符的区别**:`&`是按位与运算符,无论条件是否为真都会执行后续操作;`&&`是逻辑与运算符,只有当左侧表达式为真时才会评估右侧表达式。
4. **跳出多重嵌套循环**:在Java中,可以使用`break`语句跳出最内层的循环,`break label;`可以跳出标记的循环。
5. **switch语句的使用**:switch不能直接用于byte、long或String,但JDK 7后可以用于byte和String。
6. **short变量的增加**:直接赋值`s1=s1+1`会导致数据溢出,因为加法的结果会转换为int类型;而`s1+=1`会自动进行类型转换,防止溢出。
7. **char存储中文**:char变量可以存储单个中文字符,因为中文字符通常占用两个字节,Java的char也是16位的。
8. **效率计算**:最有效的方法计算2乘以8是直接使用`2 << 3`,利用位移运算。
9. **设计大整数计算器**:设计一个能处理一百亿级别的计算器,需要考虑数据类型的选择(如BigInteger)和算法优化。
10. **final关键字**:final修饰的变量,其引用不可变,即一旦指向某个对象,就不能再指向其他对象;但如果引用的对象本身是可变的,那么对象的属性仍然可以修改。
11. **"=="与equals的区别**:"=="比较的是对象的引用,而equals方法比较的是对象的内容。对于基本类型,"=="和equals行为一致。
12. **静态变量与实例变量**:静态变量属于类,所有类的实例共享;实例变量属于对象,每个实例有自己的副本。
13. **static方法与非static方法**:不能从static方法内部直接调用非static方法,因为非static方法依赖于特定对象实例。
14. **Integer与int**:Integer是int的包装类,用于处理对象和基本类型的转换。它们在内存管理和性能上有显著差异。
15. **Math.round方法**:Math.round(11.5)等于12,Math.round(-11.5)等于-11。
16. **代码不妥之处**:未给出具体代码,但常见问题可能涉及类型转换、空指针异常、数组越界等。
17. **访问修饰符的区别**:public表示任何地方都能访问,private仅在本类内可见,protected在本类和子类及同一包内可见,无修饰符默认为包访问。
18. **重载与覆盖**:重载发生在同一个类中,方法名相同但参数列表不同;覆盖发生在子类中,方法名、返回类型、参数列表都必须与父类方法一致。重载不改变返回值类型,但覆盖可以。
19. **构造器不可被覆盖**:构造器不能被子类覆盖,但可以被重载。
20. **接口与抽象类**:接口可继承接口,抽象类可以实现接口,但不能继承具体类。抽象类可以有静态的main方法,但不能直接运行。
21. **clone方法**:在实现clone方法时,通常需要调用`super.clone()`来创建一个对象的副本。
22. **面向对象特征**:封装、继承、多态是面向对象的三大特征。
23. **Java多态机制**:Java通过方法的重写(Override)和父类引用指向子类对象来实现多态。
24. **abstract类与接口**:abstract class可以包含方法实现,可以有构造器,而interface只能声明方法,不能有实现。
25. **abstract与关键字组合**:abstract方法不能是static、native或synchronized,因为这些关键字与抽象方法的概念不兼容。
26. **内部类**:内部类是定义在另一个类内部的类,分为静态嵌套类(Static Nested Class)和非静态内部类(Inner Class)。静态嵌套类不依赖于外部类的实例,而内部类则需要。
27. **内部类与外部类成员**:内部类可以直接访问外部类的所有成员,包括私有成员。
28. **匿名内部类**:匿名内部类无法有名称,常用于简短的、一次性的类定义,可以继承其他类或实现接口。
这份面试宝典为Java程序员提供了全面的复习材料,涵盖了从基础到高级的多个方面,对于准备面试或提升Java技能非常有帮助。