Java面试精华:20个经典问题详解

需积分: 3 2 下载量 164 浏览量 更新于2024-07-25 收藏 443KB DOC 举报
Java面试宝典涵盖了广泛的Java基础知识,对于初学者和求职者具有很高的实用价值。以下是部分关键知识点的详细解释: 1. **源文件和类** - 在一个`.java`源文件中,可以包含多个公共类(而非内部类),但每个类只能有一个`public class`声明。这意味着一个文件可以包含多个类,但这些类不能同时为`public`。 2. **Java中的`goto`** - Java并不支持`goto`语句,这与C++或C有所不同,避免了控制流的复杂性带来的混乱。 3. **`&`和`&&`** - `&`是位运算符,用于按位与;而`&&`是逻辑与,用于条件判断。两者在操作数类型和功能上有着本质区别。 4. **跳出嵌套循环** - 使用`break`语句可以从当前循环中退出,`continue`用于跳过当前迭代并进入下一次。对于多重嵌套循环,可以根据需要选择适当的`break`或`continue`。 5. **`switch`语句** - `switch`可以作用在`byte`类型上,但不支持`long`和`String`,因为它们没有整数或枚举类型的对应方式。对于字符串,可以使用`equals()`方法进行比较。 6. **`short`类型运算错误** - `shorts1=1;s1=s1+1;`语法正确,但`shorts1=1;s1+=1;`会报编译错误,因为`+=`操作会尝试将`int`类型的1加到`short`类型上,需要显式转换。 7. **`char`类型与中文字符** - Java的`char`类型只存储单个Unicode字符,中文汉字由多个字符组成,因此不能存于`char`中。 8. **高效计算** - 用位运算来实现2乘以8,如`2 * 8 = (2 << 3)`,这是最有效率的方法,因为位移操作速度极快。 9. **大数计算器** - 设计一个高效的算法或数据结构来处理大数计算,可能涉及 BigInteger 或其他库,但具体实现细节取决于需求和性能优化。 10. **final关键字** - `final`修饰变量时,表明该变量的值不可变,如果是引用类型,指的是引用指向的对象不可变。 11. **`==`与`equals()`** - `==`用于比较对象引用,而`equals()`则用于比较对象的内容。理解它们在不同上下文中的行为至关重要。 12. **静态变量与实例变量** - 静态变量属于类级别,所有实例共享;实例变量属于对象,每个实例独立。静态方法不能访问实例变量,反之则可以。 13. **静态方法与非静态** - 可以在静态方法内调用非静态方法,但静态方法不能访问实例方法。`Integer`与`int`的主要区别在于`Integer`是对象,封装了`int`值。 14. **`Math.round()`** - 这个方法会四舍五入到最接近的整数,所以`Math.round(11.5)`为12,`Math.round(-11.5)`为-12。 15. **作用域和访问修饰符** - `public`、`private`、`protected`分别定义了不同范围的可见性和访问权限,不写默认为包内可见。重载和覆盖的区别,以及它们对方法签名的要求。 16. **构造器和继承** - 构造器是可以被覆盖的,接口可以继承接口,抽象类可以实现接口但不能继承具体类。抽象类不能有静态main方法。 17. **`clone()`方法和多态** - `clone()`方法用于创建对象副本,而多态允许子类以父类接口的方式被调用,实现了运行时的灵活性。 18. **抽象类与接口** - 抽象类可以包含具体方法实现,接口仅定义方法签名。抽象方法不能同时是静态、native或synchronized。 19. **内部类和成员访问** - 内部类分为静态和非静态,静态内部类可以访问外部类的静态和非静态成员,非静态内部类有限制。 20. **匿名内部类** - 匿名内部类通常用于简化回调或事件处理,它们不能直接引用外部类的成员,需要通过外部引用间接访问。 这些知识点涵盖了Java面试中的基础概念、语法、设计模式和高级特性,熟练掌握这些内容有助于提高面试表现。