"Java程序员面试宝典2011最新出炉"
这是一份针对Java软件工程师面试准备的综合指南,包含了一系列基础到高级的Java编程问题。这份宝典旨在帮助应聘者巩固Java基础知识,理解语言特性和编程最佳实践,以应对不同级别的面试挑战。
1. Java源文件可以包含多个类,但只有一个类可以被声明为公共类(public class),且文件名必须与该公共类的类名一致。其他非公共类没有此限制。
2. Java语言中没有goto语句,这与C/C++等语言不同,它鼓励使用结构化的控制流程。
3. &是位运算符,&&是逻辑与运算符。&在任何时候都会执行两边的操作,而&&只有当左侧表达式为真时才会评估右侧。
4. 要跳出多重嵌套循环,可以使用label语句配合break,如:`outer: for {...} inner: for {...} { if (...) break outer; }`
5. switch语句不能作用于byte之外的原始类型,例如long和String。但在Java 7之后,switch支持了字符串(String)。
6. short变量与整型常量相加会导致提升为int类型,因此直接赋值会报编译错误。使用s1+=1则是正确的,因为编译器会自动处理类型转换。
7. char类型可以存储一个中文汉字,因为UTF-16编码每个字符占用2个字节,Java的char类型也是16位。
8. 2乘以8等于16,最有效率的计算方式是直接写出结果。
9. 设计一个能处理百亿级别的计算器要考虑数据类型的选择、高精度计算、内存管理等因素。
10. 使用final关键字修饰变量,意味着该变量一旦赋值后不能更改。对于引用类型,final变量的引用不可变,但引用的对象内容可以变。
11. "=="比较的是两个对象的引用,而equals()方法比较的是对象的内容。对于基本类型,两者含义相同;对于对象,equals()通常是重写过的,比较对象的属性。
12. 静态变量属于类,实例变量属于对象。静态变量在类加载时初始化,实例变量在对象创建时初始化。
13. 不能从static方法内部直接访问非static成员,因为非static成员依赖于特定的对象实例。
14. Integer是int的包装类,Integer对象封装了int值。在某些情况下,Integer对象的自动装箱和拆箱可能导致性能影响。
15. Math.round(11.5)等于12,Math.round(-11.5)等于-11。
16. 代码不妥之处可能涉及未初始化的变量、空指针异常、类型转换错误等问题,需要具体代码分析。
17. public、private、protected和默认访问修饰符的区别在于访问权限:public可被所有类访问,private仅在本类中可见,protected允许子类和同一包内访问,无修饰符的成员在同包内可见。
18. Overload是方法重载,可以改变参数列表,但不能改变返回类型。Override是方法重写,保持方法签名一致,主要改变方法的行为。
19. 构造器不能被override,但可以重载。
20. 接口可以继承接口。抽象类可以实现接口,但不能继承具体类。抽象类中可以有静态的main方法,但不会执行。
21. 在实现clone()方法时,通常会包含`super.clone()`来创建对象副本。
22. 面向对象的特征包括封装、继承、多态。
23. Java通过方法重写(Override)和抽象方法实现多态。
24. abstract class可以包含方法实现,而interface只能声明方法,不能有实现。abstract class可以有构造器,接口没有。
25. abstract method不能是static或native,也不能是synchronized,因为它们与抽象方法的概念不符。
26. 内部类(Inner Class)是定义在另一个类内部的类,分为匿名内部类、局部内部类、成员内部类和静态内部类(Static Nested Class)。静态内部类与其他内部类的主要区别在于,它可以独立于外部类实例存在,并且可以直接被声明为静态。
27. 问题未完整显示,但通常会继续探讨内部类的创建、生命周期、访问外部类成员等方面的问题。