"Java面试宝典2014版"
这篇文档是针对Java程序员的面试准备指南,涵盖了广泛的Java基础知识和核心概念。以下是其中涉及到的一些关键知识点的详细解释:
1. **一个.java源文件中的类数量**:一个.java文件中可以包含多个类,但只能有一个公共类(public class),且文件名必须与这个公共类的名字相同。
2. **Java中的goto**:Java语言中没有goto语句,它遵循结构化编程原则,鼓励使用更安全的控制流结构,如if、while、for和switch。
3. **&和&&的区别**:&是逻辑与运算符,无论两边的表达式是否为真都会执行,而&&是短路与运算符,如果左边的表达式为假,则不会执行右边的表达式。
4. **跳出多重嵌套循环**:在Java中,使用`break`语句可以跳出最内层循环;要跳出多层循环,可以使用嵌套循环标签并配合`break`。
5. **switch语句的适用类型**:在Java 7及以前,switch仅支持byte、short、char和int类型,以及枚举类型;从Java 7开始,还支持字符串(String)。
6. **short变量的自增操作**:直接赋值`s1=s1+1`会涉及类型提升,可能导致编译错误,因为结果是int型。而`s1+=1`会自动处理类型转换,因此是安全的。
7. **char类型与中文字符**:char类型可以存储一个Unicode字符,所以理论上可以存储中文汉字。
8. **2乘以8的计算**:最有效率的方法是直接使用`2 * 8`。
9. **设计大数计算器**:设计一个能处理大数的计算器,需要考虑使用String或 BigInteger类来存储大数,并实现基本的加减乘除运算。
10. **final关键字**:final修饰的变量,其引用一旦初始化后不能改变,而引用的对象内容可以改变(除非对象也是final的)。
11. **"=="与equals的区别**:"=="比较的是对象的引用,而equals方法用于比较对象的内容。对于基本类型,"=="就是值比较;对于对象,equals通常是重写过的,用来比较对象属性。
12. **静态变量与实例变量**:静态变量属于类,所有实例共享;实例变量属于对象,每个实例有自己的副本。
13. **static方法内调用非static方法**:不允许直接从static方法内部调用非static方法,因为非static方法依赖于特定的对象实例。
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是子类重写父类方法。Overloaded方法不能改变返回类型。
19. **构造器不能被override**:构造器不能被覆盖,但可以重载。
20. **接口与抽象类的关系**:接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,但抽象类中的main方法不能是静态的。
21. **clone方法**:通常在实现clone方法时,会先调用`super.clone()`以创建一个浅拷贝,然后进行必要的深拷贝操作。
22. **面向对象特征**:封装、继承、多态。
23. **Java中的多态**:多态是指一个接口可以有多种不同的实现,通过接口或抽象类可以实现运行时绑定,即动态多态。
24. **abstract class和interface的区别**:抽象类可以有方法实现,可以有非抽象方法和实例变量;接口则完全是抽象的,只能定义常量和抽象方法。
25. **abstract与static、native、synchronized的组合**:abstract方法不能是static,不能是native,也不能是synchronized。
26. **内部类**:内部类是定义在另一个类内部的类,分为静态内部类(Static Nested Class)和非静态内部类(Inner Class)。静态内部类与外部类之间没有实例关联,而非静态内部类需要依赖外部类的一个实例。
27. **内部类与外部类成员的引用**:内部类可以直接访问外部类的所有成员(包括私有成员),但外部类不能直接访问内部类的私有成员。
28. **问题未完整**:这个问题似乎被截断了,没有提供足够的信息进行回答。
这些知识点是Java程序员面试中常见的问题,掌握它们有助于提高面试成功率。