"大公司的Java面试题集"
这篇资料汇集了来自知名公司如IBM、E*Trade、Siebel、Motorola、SUN等面试中的一些Java相关问题,旨在帮助求职者准备面试。这些问题覆盖了Java的基础知识、语法特性、编程实践以及面向对象的概念。
1. **Java基础部分**
- 一个`.java`源文件可以包含多个类,但只能有一个公开类(public class),其他类可以是非公开的(非public)。
- Java没有`goto`语句,它使用流程控制结构如`break`、`continue`来改变程序执行路径。
- `&`是位运算符,`&&`是逻辑运算符。前者在任何情况下都会计算两边的操作数,后者则只有在左侧表达式为真时才会计算右侧。
- 要跳出多重嵌套循环,可以使用`label`和`break`语句,例如`outerLabel: for (...) { innerLabel: for (...) { ... break outerLabel; } }`。
- `switch`语句不能直接作用于`byte`,但在Java 7及以上版本可以,但不能作用于`long`或`String`,不过在Java 14及更高版本,`switch`可以用于`String`。
2. **数据类型与变量**
- 在`short s1 = 1; s1 = s1 + 1;`中,由于自动装箱拆箱,会损失精度并可能抛出编译错误。而`s1 += 1;`则会自动处理类型转换。
- `char`类型可以存储单个Unicode字符,因此可以存储中文汉字。
- 计算2乘以8最有效率的方法是使用`Math.pow(2, 8)`或`1 << 3`。
3. **关键字与特性**
- `final`关键字用于修饰变量,意味着该变量一旦赋值后就不能改变,如果是对象,则对象的引用不能改变,但对象内部的状态可以改变。
- `==`比较的是两个对象的引用,而`equals`方法通常用于比较对象的内容是否相等。
- 静态变量属于类,实例变量属于对象;静态方法不能直接访问非静态成员,因为它们不在特定对象的上下文中。
- `Integer`是`int`的包装类,两者在使用上有性能和自动装箱拆箱的差异。
- `Math.round(11.5)`等于12,`Math.round(-11.5)`等于-11。
4. **构造器与多态**
- 构造器不能被`override`,但可以重载(Overload)。
- 接口可以继承接口,抽象类可以实现接口,但不能继承具体类(concrete class)。
- 抽象类中可以有静态的`main`方法,但不会作为程序的入口点。
- 实现`clone()`方法时,通常会包含`super.clone()`调用以创建对象副本。
- 面向对象的特征包括封装、继承、多态。
- Java通过方法重写(Override)和接口实现实现多态。
- `abstract class`可以包含方法实现,而`interface`不能;`abstract class`可以有构造器,`interface`没有。
- `abstract`方法不能同时是`static`、`native`或`synchronized`。
- 内部类可以访问其包含类的所有成员,包括私有成员,但静态内部类(StaticNestedClass)不能直接访问非静态成员。
5. **内部类**
- 内部类可以提供更紧密的封装和访问外部类的私有成员。
- StaticNestedClass是静态内部类,不持有对外部类的引用,可以直接通过类名创建对象;InnerClass是非静态内部类,需要先有外部类对象才能创建内部类对象。
- 内部类可以引用包含类的成员,但静态内部类不能直接访问非静态成员。
这些面试题集体现了Java程序员需要掌握的基本技能和深入理解,对于准备面试的开发者来说,是一份宝贵的复习材料。通过解答这些问题,求职者可以检验自己的Java知识水平,找出知识盲点,从而提高面试成功率。