"Java面试宝典是一本针对Java程序员面试准备的完整指南,涵盖了Java语言的基础知识、核心概念以及高级特性。"
1. Java源文件可以包含多个类,但只能有一个公共类(public class),其他类可以是非公共的,作为主类的辅助类。
2. Java中没有goto语句,它不符合Java的结构化编程理念。
3. "&" 是位运算符,而"&&"是逻辑与运算符。位运算符会计算所有位,逻辑与会在第一个操作数为假时直接返回结果,不会评估第二个操作数。
4. 跳出多重嵌套循环可以使用标签(label)配合break语句,如:`outer: for (...) { inner: for (...) { ... if (condition) break outer; } }`
5. switch语句不能作用在byte上,因为Java 7之前switch仅支持byte、short、char和int。从Java 7开始,它可以作用于枚举类型。Java 14之后,switch表达式支持了字符串(String)。
6. 对于short变量,直接赋值`s1=s1+1`会导致自动提升为int类型,需要强制转换回来。而`s1+=1`会被编译器优化,避免了溢出问题。
7. char类型可以存储单个Unicode字符,因此可以存储中文汉字。
8. 计算2乘以8最有效率的方法是直接使用`2 << 3`,利用位左移运算。
9. 设计一个百亿计算器要考虑数值精度问题,可以使用BigDecimal类处理大数运算。
10. 使用final修饰变量,其引用不能改变,但引用的对象内容可以改变,除非对象本身也是final的。
11. "=="比较的是对象的引用,equals方法比较的是对象的内容。对于基本类型,两者效果相同;对于引用类型,"=="比较地址,equals比较内容。
12. 静态变量属于类,而实例变量属于对象。静态变量被所有实例共享,实例变量每个实例都有自己的一份拷贝。
13. 不可以,静态方法属于类,不能直接访问非静态成员,因为非静态成员依赖于特定对象。
14. Integer是int的封装类,使用Integer对象会有额外的内存开销,而int是原始类型,效率更高。Integer还有缓存机制,对于小范围的int值,直接用Integer与int性能差距不大。
15. Math.round(11.5)等于12,Math.round(-11.5)等于-11。
16. 没给出代码,无法分析,但常见的问题可能涉及类型匹配、异常处理或变量作用域。
17. public表示公开的,可以被任何类访问;private是私有的,只有同一类内能访问;protected是受保护的,同一包内和子类可以访问;默认权限,同包内可见。
18. Overload是重载,方法名相同但参数列表不同;Override是重写,子类重新定义父类方法。重载不改变返回值类型,重写必须保持返回值类型和方法签名一致。
19. 构造器不能被覆盖,因为构造器不具有继承性。
20. 接口可以继承接口;抽象类可以实现接口;抽象类可以继承具体类;抽象类中可以有静态的main方法,但不能运行。
21. 实现克隆时,通常会声明`super.clone()`以创建对象副本。
22. 面向对象的特征包括封装、继承、多态。
23. Java通过方法重写(Override)和向上转型(Upcasting)实现多态。
24. abstract class可以包含抽象方法和非抽象方法,可以有实例变量和构造器;interface只能有抽象方法和常量,不能有实现。
25. abstract的method不能同时是static,因为抽象方法是未实现的,静态方法属于类,不依赖实例。也不能同时是native或synchronized,因为native和synchronized都是与方法实现相关的修饰符。
26. 内部类是定义在另一个类内部的类,StaticNestedClass是静态嵌套类,可以直接通过外部类引用;InnerClass是非静态内部类,需要外部类实例才能创建。
27. 内部类可以引用包含类的成员,但不能访问静态成员,除非通过外部类实例。
28. 匿名内部类可以继承一个类或实现一个接口,但没有名称,通常用于一次性使用的简单类实现。