"Java面试宝典2014版"
这篇文档是针对Java程序员面试的一份指南,包含了多个关于Java基础知识和特性的面试问题及其解答。这些问题涵盖了语言语法、数据类型、控制流、类和对象、封装、继承、多态、接口、内部类等多个方面,旨在帮助求职者准备Java技术面试。
1. 一个".java"源文件中可以包含多个类,但只能有一个公共类(public class),其他非公共类没有数量限制。
2. Java语言中没有goto语句,这与C/C++不同,Java更倾向于使用结构化控制语句。
3. &是按位与运算符,&&是逻辑与运算符。&在任何时候都会进行操作,而&&只有当第一个操作数为真时才会计算第二个操作数。
4. 要跳出多重嵌套循环,可以使用标签(label)配合break语句,例如:`outer: for {...} inner: for {...} break outer;`。
5. switch语句不能作用于byte类型,但从Java 7开始,可以作用于char和枚举类型。从Java 14开始,还可以作用于字符串(String)。
6. 对于short变量,直接相加会自动提升为int类型,因此`s1 = s1 + 1`会导致编译错误,需要强制类型转换;而`s1 += 1`则会自动处理类型转换。
7. char型变量可以存储中文字符,因为一个中文汉字通常占两个字节,Java的char类型也是16位,即两个字节。
8. 计算2乘以8最有效率的方式是直接使用`2 << 3`,利用位移运算。
9. 设计一个一百亿的计算器要考虑数值溢出问题,可以使用BigInteger类来处理大整数运算。
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和默认访问修饰符分别代表不同的访问级别。public可以被任何地方访问,private只能在本类中访问,protected可以在同一包或子类中访问,而默认访问级别只在同一包内可见。
18. Overload是重载,表示可以有多个同名但参数列表不同的方法;Override是重写,指子类覆盖父类的同名同参数的方法。Overloaded方法不能改变返回值类型。
19. 构造器不能被override,但可以重载。
20. 接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类中的静态main方法可以作为程序入口,但不会执行。
21. 在实现clone()方法时,通常会包含`super.clone()`以创建对象副本。
22. 面向对象的特征包括封装、继承、多态。
23. Java中实现多态主要通过接口的实现和抽象类的继承来实现。
24. abstract class和interface都可以用于实现抽象,但abstract class可以包含方法实现,而interface只能声明方法。
25. abstract方法不能同时是static、native或synchronized,因为这些特性与抽象方法的定义不符。
26. 内部类是定义在另一个类内部的类,StaticNestedClass是静态内部类,不需要外部类实例就可以创建;InnerClass是非静态内部类,必须依赖外部类实例。
27. 内部类可以引用包含类的成员,包括私有成员,但静态内部类不能直接访问外部类的非静态成员。
28. A类的对象能否直接访问B类的静态成员,取决于B类的访问权限,如果B类的静态成员是public的,那么A类对象可以直接访问。
这份文档提供了丰富的Java面试题,可以帮助求职者全面复习和理解Java语言的关键概念和技术。