《Java葵花宝典》是一本专注于Java面试的资料集,包含了丰富的Java基础知识和技术要点,旨在帮助求职者准备Java相关的面试。以下将针对书中的部分知识点进行详细解释:
1. **一个.java源文件中是否可以包含多个类**:Java源文件可以包含多个类,但只能有一个公共类(public class),其名称必须与文件名相同。其他非公共类(非public)没有此限制。
2. **Java中是否有goto**:Java语言中不支持goto语句,它是一种流程控制语句,但在Java中被摒弃,以鼓励更清晰和无副作用的编程风格。
3. **&和&&的区别**:&是逻辑与运算符,无论两边表达式的结果如何都会执行;而&&是短路与运算符,如果左边表达式为假,右边的表达式将不会被执行,通常用于优化性能。
4. **跳出多重嵌套循环**:在Java中,可以使用`break`语句跳出最内层的循环,若要跳出所有嵌套循环,可以使用标签(label)配合`break`,例如:`outer: for (...) { inner: for (...) { ... break outer; } }`
5. **switch语句的使用**:switch语句可以作用在byte、char、short和int上,自Java 7起,也可以作用于枚举类型。但是不能直接作用于long或String,Java 7后可以通过强制转换long为int或使用String的`switch`标签(`switch (Objects.requireNonNull(s).toString())`)来间接实现。
6. **short变量的加法**:直接赋值如`s1 = s1 + 1;`会导致类型提升,可能会导致溢出,因此需要类型转换,如`(short) (s1 + 1);`。而`s1 += 1;`是合法的,因为Java会自动处理类型转换。
7. **char存储中文汉字**:char变量可以存储一个Unicode字符,包括中文汉字,因为一个中文汉字通常占用两个字节,而char恰好是16位,即两个字节。
8. **2乘以8的计算**:最有效率的方法是直接使用`2 << 3`,利用位移运算符完成计算。
9. **设计一个百亿计算器**:设计一个能处理大整数的计算器,可以使用BigInteger类,它提供了任意精度的整数运算。
10. **final关键字**:final修饰的变量,如果是基本类型,则其值不能改变;如果是引用类型,则引用本身不能改变,但引用的对象状态可以改变。
11. **"=="和equals的区别**:"=="比较的是对象的内存地址,而equals方法(默认行为)比较的是对象的内容。对于非null对象,自定义类应重写equals方法以比较对象的属性。
12. **静态变量和实例变量的区别**:静态变量属于类,由类的所有实例共享,而实例变量属于每个对象实例,每创建一个对象,都会有自己的实例变量副本。
13. **静态方法与非静态方法的调用**:不能从静态方法内部直接调用非静态方法,因为非静态方法依赖于对象实例,而静态方法不依赖任何实例。
14. **Integer与int的区别**:Integer是int的包装类,用于处理对象操作,如比较、装箱拆箱等。int是原始数据类型,处理效率更高,但不支持对象特性。
15. **Math.round方法**:Math.round方法用于四舍五入,返回最接近参数的长整型数值。如果参数是浮点数,它会被转换成整数,如果参数是double,它会被转换成float,然后再转换成int。
以上只是《Java葵花宝典》部分内容的解析,实际书中还涵盖了更多关于异常处理、集合框架、多线程、网络编程、IO流、反射、设计模式等多个主题的知识点,是Java程序员面试准备的重要参考资料。