"java面试宝典2012"
这是一份针对Java程序员面试的复习资料,包含了各种基础和进阶的Java知识要点。以下是其中一些关键知识点的详细说明:
1. **Java源文件与类的关系**:一个.java源文件可以包含多个类,但只能有一个公共类(public class),其他的类可以是非公共的。
2. **goto关键字**:Java中没有goto关键字,它采用的是结构化编程思想,鼓励使用控制流程语句如if、while、for等。
3. **逻辑运算符&和&&的区别**:&是按位与运算符,无论两边的操作数是否为真都会进行计算;而&&是逻辑与运算符,只有当左边的操作数为真时才会计算右边的操作数。
4. **跳出多重嵌套循环**:使用`break`语句可以跳出当前循环,但是无法直接跳出多重嵌套循环。如果需要跳出所有循环,可以使用标签(label)配合break。
5. **switch语句的使用**:switch不能直接用于byte、long和String类型,但在Java 7及以上版本,switch支持了字符串(String)。
6. **short变量与运算**:直接使用`=`和`+=`操作符与short变量可能导致数据溢出。因为`short s1 = 1; s1 = s1 + 1;`会将结果转换为int再赋值,可能会丢失数据。而`s1 += 1;`在编译时会自动处理溢出问题。
7. **char类型与中文字符**:char类型可以存储单个Unicode字符,包括中文汉字,因为它占据两个字节。
8. **高效计算2乘以8**:可以直接写`2 * 8`,Java会自动优化这个简单操作。
9. **设计大整数计算器**:在Java中,可以使用BigInteger类来处理大整数的计算,以避免int或long类型的溢出问题。
10. **final关键字**:final修饰变量时,意味着变量的引用一旦赋值就不能改变,如果是引用类型,所指向的对象内容不能变。
11. **"=="与equals方法**:"=="用于比较基本类型或对象的引用,而equals方法用于比较对象的内容,对于非自定义类型,equals通常默认与"=="相同,但自定义类可以重写equals以比较对象属性。
12. **静态变量与实例变量**:静态变量属于类,与类的实例无关,而实例变量属于每个对象实例。
13. **从静态方法中调用非静态方法**:不允许直接从静态方法内部调用非静态方法,因为静态方法在类加载时就可以被调用,而非静态方法需要先创建对象实例。
14. **Integer与int的区别**:Integer是int的包装类,可以进行自动装箱和拆箱,且提供了更多的方法。而int是原始类型,没有这些额外功能。
15. **Math.round方法**:Math.round(11.5)等于12,Math.round(-11.5)等于-11,该方法将浮点数四舍五入为最接近的整数。
16. **代码不妥之处**:未提供具体代码,但可能涉及类型转换错误、变量未初始化等问题。
17. **作用域的区别**:public作用域在任何地方都可见,private仅在类内可见,protected在类、子类及同一包内可见,无修饰符的作用域仅在同包内可见。
18. **Overload与Override**:Overload是方法重载,发生在同一类中,通过参数列表不同区分;Override是方法重写,发生在子类中,方法名和参数列表必须与父类完全一致。
19. **构造器不可override**:构造器不能被重写,但可以重载。
20. **接口与继承关系**:接口可以继承其他接口;抽象类可以实现接口;抽象类不能继承具体类,但可以继承抽象类;抽象类中的main方法可以是静态的。
21. **clone方法**:通常在实现clone方法时,会首先调用`super.clone()`来获取对象的浅拷贝。
22. **面向对象的特征**:封装、继承、多态。
23. **Java中的多态**:通过接口、抽象类和子类实现,允许不同类型的对象对同一消息作出响应。
24. **abstractclass和interface的区别**:抽象类可以有方法实现,可以有非抽象方法和成员变量;接口只能有抽象方法和常量,且默认为public static final。
25. **abstract与static、native、synchronized**:一个方法不能同时是abstract、static、native和synchronized,因为它们代表不同的概念和使用场景。
26. **内部类**:内部类是定义在另一个类内部的类,分为静态内部类(StaticNestedClass)和非静态内部类(InnerClass)。静态内部类不依赖于外部类的实例,而内部类需要外部类实例的存在。
27. **内部类与外部类的交互**:内部类可以直接访问外部类的所有成员,包括私有成员,但外部类访问内部类需要通过实例。
28. **匿名内部类**:没有名字的内部类,通常用于快速实现接口或抽象类的一个简单版本,常用于事件监听器的定义。
以上只是部分内容,实际面试宝典中还包括更多关于异常处理、集合框架、IO流、多线程、网络编程、反射、设计模式等方面的题目,全面覆盖了Java程序员应知应会的知识点。