"Java面试问题集"
这篇Java面试问题集涵盖了广泛的Java编程和技术知识,适合准备面试或巩固Java基础知识的开发者。以下是对其中部分问题的详细解答:
1. Java源文件可以包含多个类,但只有一个类可以是公共类(public class),且文件名必须与这个公共类的名称完全匹配。其他非公共类没有特定的命名限制。
2. Java中没有goto语句,这与其他一些语言(如C或C++)不同。Java采用更结构化的控制流语句,如if、for、while和switch。
3. &是位运算符,表示按位与;&&是逻辑运算符,表示逻辑与。位运算符会在所有情况下计算右侧表达式,而逻辑运算符在左侧表达式为假时不会计算右侧表达式,这是短路逻辑。
4. 要跳出多重嵌套循环,可以使用标记(label)配合break语句,如:`outer: for (...) { ... inner: for (...) { ... break outer; } }`
5. switch语句可以作用在byte、char、short和int上,但不能直接作用于long和String。不过,Java 7及以上版本支持String类型的switch语句。
6. 在shorts1=1; s1=s1+1; 这一行,s1+1的结果是int类型,无法直接赋值给short。而在s1+=1;中,编译器会自动处理类型转换,将int结果转换回short。
7. char类型可以存储一个Unicode字符,所以理论上它可以存储中文汉字,因为每个中文字符在Unicode中占据一个code unit。
8. 计算2乘以8的最有效率方式是直接使用`2 << 3`,利用位左移运算。
9. 设计一个能处理一百亿级别的计算器,需要考虑大整数操作、内存管理、错误处理和效率优化。可以使用BigInteger类来处理大整数。
10. 使用final修饰变量时,如果修饰的是引用类型,则引用本身不可变,但引用的对象是可以变的。如果修饰基本类型或不可变对象,整个变量内容都不能改变。
11. "=="比较的是两个变量的引用,而equals方法比较的是两个对象的内容是否相等。对于非null对象,如果两个引用指向同一个对象,它们的equals方法返回true;而对于基本类型,"=="和equals的效果相同。
12. 静态变量属于类,而实例变量属于对象。静态变量可以被类的所有实例共享,而实例变量只属于特定对象。
13. 不可以从static方法内部直接调用非static方法,因为static方法不依赖任何对象实例,而非static方法需要对象实例才能调用。
14. Integer是int的包装类,两者之间可以自动装箱拆箱。Integer对象在一定范围内(-128到127)会缓存,超出范围则每次创建新对象。int是原始类型,性能优于Integer。
15. Math.round(11.5)等于12,Math.round(-11.5)等于-11,round方法会四舍五入到最接近的整数。
16. 代码中的不妥之处可能涉及变量作用域、异常处理、类型转换等问题,具体问题需具体分析。
17. public、private、protected和默认访问修饰符(包访问)分别代表全局、仅限本类、仅限同包和同包及子类访问。
18. Overload是重载,方法名相同但参数列表不同;Override是重写,子类方法覆盖父类方法。重载方法不能改变返回值类型。
19. 构造器不能被override,但子类可以定义与父类构造器签名相同的方法,这实际上是重载。
20. 接口可以继承接口,抽象类可以实现接口,但不能继承具体类。抽象类中可以有静态的main方法,但静态方法不能被覆盖。
21. 写clone()方法时,通常会先调用super.clone(),以创建对象的浅复制。
22. 面向对象的特征包括封装、继承、多态和抽象。
23. Java通过方法重写(Override)和抽象方法实现多态。
24. abstract class可以包含方法实现,可以有构造器,可以声明字段;interface只能声明方法,不能有实现,不能有字段(除了默认和静态方法自Java 8起)。
25. abstract方法不能是static、native或synchronized,因为它们都有特定的含义和使用场景。
26. 内部类是定义在另一个类内部的类,分为静态嵌套类(StaticNestedClass)和非静态内部类(InnerClass)。静态嵌套类不持有对外部类的引用,而内部类则有隐含的对外部类的引用。
27. 内部类可以引用外部类的所有成员,包括私有成员,但访问静态成员需要通过外部类名来引用。
28. A类的内部类B可以访问A的所有成员,包括私有成员,但外部类A不能直接访问B的私有成员,除非通过内部类的实例。
以上是对部分Java面试问题的详细解答,涵盖了从基本语法到面向对象概念的广泛知识,有助于提升对Java语言的理解。