"Java面试宝典2012版包含了丰富的Java基础知识和面试常见问题,旨在帮助求职者准备Java程序员的面试。此版本更新至2012年,涵盖了从基本语法到高级特性的多种问题,如类和文件结构、运算符、循环控制、数据类型转换、异常处理、面向对象特性、类和接口设计、内存管理等方面。
1. Java源文件与类的关系:一个`.java`源文件可以包含多个类,但只能有一个公开的顶级类(即public class),其他类可以是非公开的或内部类。
2. `goto`关键字:Java中没有`goto`关键字,这与C/C++不同,它遵循更现代的编程理念,鼓励使用结构化控制流。
3. `&`和`&&`的区别:`&`是逻辑与运算符,无论两边表达式是否为真都会进行运算;而`&&`是短路与运算符,如果左边表达式为假,右边的表达式将不会被执行。
4. 跳出多重嵌套循环:在Java中,可以使用`break`语句配合标签来跳出特定层级的循环。
5. `switch`语句:`switch`不能直接用于`byte`、`long`或`String`类型,但在Java 7及以后版本,`switch`可以用于`String`。
6. `short`类型的变量赋值:直接相加会导致自动提升为`int`类型,因此`s1=s1+1`会报编译错误,而`s1+=1`则会自动转换回`short`类型。
7. `char`型变量:可以存储中文汉字,因为UTF-16编码下,一个中文字符占两个字节。
8. 计算2乘以8:最有效率的方法是直接使用`2 * 8`。
9. 一百亿计算器的设计:涉及大数运算和算法设计,可能需要使用BigInteger类或自定义算法。
10. `final`关键字:修饰变量时,表示该变量一旦赋值后不能改变,如果是引用类型,则引用本身不能改变,但引用的对象内容仍可变。
11. `==`与`equals`的区别:`==`比较的是变量引用是否相同,`equals`通常比较对象内容是否相等,但默认行为与`==`相同,除非重写。
12. 静态变量与实例变量:静态变量属于类,所有类的实例共享同一份;实例变量属于对象,每个对象有自己的副本。
13. `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`是重写,子类方法覆盖父类方法,要求名称、返回类型和参数列表完全相同。
19. 构造器不能被`override`,但可以重载。
20. 接口与接口继承、抽象类与接口实现:接口可以继承接口,抽象类可以实现接口,但不能继承具体类;静态主方法在抽象类中是可以存在的。
21. `clone()`方法:通常需要显式调用`super.clone()`并进行类型转换。
22. 面向对象特征:封装、继承、多态。
23. 多态机制:通过接口、抽象类和方法的重写实现。
24. `abstract class`与`interface`:抽象类可以有方法实现,可以有构造器,而接口只声明方法,不能有实现和构造器。
25. `abstract`、`static`、`native`、`synchronized`组合:`abstract`不能与`static`和`native`同时使用,但可以与`synchronized`结合。
26. 内部类:类定义在另一个类内部,分为静态嵌套类(StaticNestedClass)和非静态内部类(InnerClass),静态嵌套类不持有对外部类的引用,而内部类则有。
27. 内部类与外部类的交互:内部类可以直接访问外部类的所有成员,包括私有成员,但外部类不能直接访问内部类的私有成员。
28. 匿名内部类:没有类名的内部类,常用于快速实现接口或抽象类的简短实现。
这些知识点的掌握对于理解和编写Java代码至关重要,也是面试官评估候选人技术能力的重要依据。