"《Java面试宝典》涵盖了Java编程的基础知识和面试常见问题,适合初入职场的求职者准备面试。这份资料包含了Java语法、逻辑控制、数据类型、类和对象、多态、接口、构造器等多个方面的内容,旨在帮助读者深入理解Java编程的核心概念并提升面试技巧。"
1. Java源文件可以包含多个类,但只能有一个公共类(public class),其他类可以是非公共的,作为主类的辅助类存在。
2. Java语言中没有`goto`关键字,它是为了避免复杂的跳转结构导致的代码难以理解和维护。
3. `&`是位运算符,而`&&`是逻辑运算符。位运算符用于按位进行操作,逻辑运算符用于布尔逻辑判断,且`&&`具有短路特性,只会在必要时计算第二个操作数。
4. 要跳出多重嵌套循环,可以使用`break`语句配合标签(label)来实现,如:`break outerLoop;`。
5. `switch`语句可以作用于`byte`, `char`, `short`, `int`以及枚举类型,但不能直接作用于`long`或`String`。Java 7以后,`String`可以用在`switch`中。
6. 对于`short s1 = 1;`,`s1 = s1 + 1;`会涉及自动装箱拆箱,可能导致编译错误,因为表达式右侧会先转换为`int`。而`s1 += 1;`则是合法的,因为编译器会自动处理类型提升。
7. `char`型变量可以存储一个中文汉字,因为UTF-16编码下,一个中文汉字占两个字节。
8. 计算2乘以8最有效率的方法是直接使用`2 << 3`,利用左移运算符。
9. 设计一个能处理百亿级别的计算器,需考虑大数运算、内存管理和效率优化,可能需要使用高效算法和数据结构。
10. 使用`final`修饰变量,意味着变量的引用一旦初始化后就不能改变,但如果是对象类型,对象的内容仍可改变。
11. `==`比较的是变量的值(基本类型)或引用(对象类型),而`equals()`方法用于比较对象的内容是否相等。
12. 静态变量属于类,所有实例共享;实例变量属于对象,每个实例有自己的副本。
13. 不能从`static`方法内部直接调用非`static`方法,因为非`static`方法依赖于实例对象。
14. `Integer`是`int`的包装类,两者在使用上有性能和自动装箱拆箱的区别。
15. `Math.round(11.5)`等于12,`Math.round(-11.5)`等于-11。
16. 代码中的不妥之处可能包括类型转换错误、数组越界、未初始化的变量等问题。
17. 作用域`public`表示全局可访问,`private`表示仅限类内部访问,`protected`表示类及其子类和同一包内访问,不写则默认为包级私有。
18. `Overload`是重载,方法名相同但参数列表不同;`Override`是重写,方法名、返回值和参数列表完全一致。重载不改变返回值类型。
19. 构造器不能被`override`,但可以重载。
20. 接口可以继承接口,抽象类可以实现接口,但不能继承具体类。抽象类中可以有静态的`main`方法,但不能直接运行。
21. 实现`clone()`方法时,通常会包含`super.clone()`以创建对象副本。
22. 面向对象的特征包括封装、继承、多态。
23. Java中通过方法重写(Override)和父类引用指向子类对象来实现多态。
24. `abstract class`可以包含方法实现,而`interface`则不能。`abstract class`可以有构造器和非`abstract`方法,`interface`不能。
25. `abstract`方法不能同时是`static`,因为`static`方法属于类,而`abstract`方法属于对象。同样,`abstract`方法不能是`native`或`synchronized`,因为`native`方法需要C/C++实现,`synchronized`涉及线程同步,与抽象方法的定义不符。
26. 内部类是定义在另一个类内部的类,分为静态内部类(Static Nested Class)和非静态内部类(Inner Class)。静态内部类与外部类之间没有隐含的引用关系,而非静态内部类可以直接访问外部类的所有成员,包括私有成员。
27. 内部类可以引用其包含类的成员,无限制访问,但对于非静态内部类,必须有一个外部类的实例才能创建内部类对象。
28. 匿名内部类可以直接继承一个类或实现一个接口,但不能同时做这两件事。它可以用于快速定义一个简单的类或接口实现。