"Java程序员面试宝典2011最新出炉"
这篇文档是针对Java软件工程师面试准备的一份综合指南,包含了多个方面的Java基础知识和技术问题。以下是对其中一些关键知识点的详细解释:
1. **Java源文件与类的关系**:一个.java源文件可以包含多个类,但只能有一个公开类(public class),其他类可以是非公开类,作为主类的辅助类。
2. **goto关键字**:Java中没有goto关键字,它遵循结构化编程原则,鼓励使用控制流程语句如if, while, for等。
3. **& 和 && 的区别**:& 是位运算符,用于按位进行逻辑与操作;&& 是布尔逻辑运算符,用于短路逻辑与,如果第一个操作数为假,不会评估第二个操作数。
4. **跳出多重循环**:在Java中,使用`break`语句可以跳出最内层的循环;`break label;`可以跳出带有标签的循环。
5. **switch 语句的使用**:switch不能直接作用于byte,但可以通过类型转换;在Java 7及以后版本,switch可以作用于字符串(String)。
6. **short变量的加法**:直接赋值`short s1 = 1; s1 = s1 + 1;`会引发编译错误,因为结果会被提升为int类型;使用`s1 += 1;`则会自动转换回short类型。
7. **char型变量与中文字符**:char类型可以存储Unicode字符,因此可以存储中文汉字。
8. **计算2乘以8**:最有效率的方式是直接写`2 * 8`。
9. **设计大数计算器**:设计一个计算器要考虑数值范围,可能会用到大整数类BigInteger。
10. **final关键字**:final修饰的变量,其引用一旦赋值后不可改变,对于引用类型意味着引用的对象不能变。
11. **"=="与equals的区别**:"=="比较的是对象的引用,而equals()比较的是对象的内容。对于基本类型,"=="即是内容比较。
12. **静态变量与实例变量**:静态变量属于类,而实例变量属于对象。静态变量被所有类的实例共享,实例变量是每个实例独有的。
13. **从静态方法调用非静态方法**:不允许直接从静态方法内部调用非静态方法,因为静态方法不依赖于任何实例,而非静态方法需要对象实例才能调用。
14. **Integer与int**:Integer是int的包装类,它们一个是原始类型,另一个是对象类型。Integer对象的创建和操作相比int会有额外的内存开销。
15. **Math.round()**:Math.round(11.5)等于12,Math.round(-11.5)等于-11。
16. **代码不妥之处**:这个问题需要具体的代码才能分析。
17. **作用域public,private,protected和默认的区别**:public作用域是全局的,所有类都可以访问;private仅限于本类;protected允许子类和同包访问;默认(包访问)只允许同包内的访问。
18. **Overload与Override**:Overload是重载,方法名相同但参数列表不同;Override是重写,子类方法覆盖父类方法,要求方法名和参数列表完全一致。
19. **构造器不能被override**:构造器不能像普通方法那样被覆盖,但可以重载。
20. **接口与接口继承,抽象类与接口实现**:接口可以继承接口,抽象类可以实现接口,抽象类也可以继承具体类。静态main方法不能在抽象类中声明为静态,因为静态方法不能被继承。
21. **clone()方法**:通常在重写clone()时,会有一行`super.clone()`来克隆对象。
22. **面向对象特征**:封装、继承、多态。
23. **Java中的多态**:通过方法重写和接口实现实现多态。
24. **abstractclass与interface的区别**:抽象类可以包含方法实现,而接口只能定义方法签名;类可以继承一个抽象类,但可以实现多个接口。
25. **abstract、static、native、synchronized的组合**:抽象方法不能是static或native,也不能是synchronized。
26. **内部类**:内部类是定义在另一个类内部的类,分为静态嵌套类(StaticNestedClass)和非静态内部类(InnerClass)。静态嵌套类不依赖于外部类的实例,而内部类需要外部类的实例。
27. **内部类与外部类的成员**:内部类可以直接访问外部类的所有成员,包括私有成员,但外部类不能直接访问内部类的私有成员。
28. **匿名内部类**:没有名字的内部类,通常用于快速实现一个接口或父类的简短实例,常用于事件处理和回调机制。