Java面试常见问题解析

需积分: 6 1 下载量 21 浏览量 更新于2024-07-23 收藏 590KB DOC 举报
"Java面试宝典2013版,涵盖了Java基础、语法特性、面向对象、内存管理等多个方面的面试知识点,旨在帮助求职者准备Java程序员的面试。 1. Java源文件与类的关系:一个`.java`源文件可以包含多个类,但只能有一个公开的顶级类(public class),其他类可以是非公开的(如private或默认访问级别)。 2. `goto`关键字:Java语言中不支持`goto`关键字,它是一种流程控制关键字,但在Java中已被其他结构如`break`和`continue`取代。 3. `&`与`&&`的区别:`&`是位运算符,用于按位与操作;`&&`是逻辑与运算符,只有当两边的操作数都为真时,结果才为真,具有短路效果。 4. 跳出多重嵌套循环:可以使用`break`语句跳出当前的多重嵌套循环,配合标签可以跳出特定层的循环。 5. `switch`语句的适用类型:`switch`可以作用于`byte`, `short`, `char`, `int`以及枚举类型(Java 5以后),自Java 7起,还可以作用于`String`类型。 6. `short`变量的加法:直接使用`+`运算符可能导致数据溢出,因为`short`相加的结果会自动提升为`int`类型。因此,`short s1 = 1; s1 = s1 + 1;`会报编译错误,而`s1 += 1;`会自动拆箱并转换为`int`类型,然后装箱回`short`,避免溢出。 7. `char`存储中文:`char`类型在Java中占用两个字节,理论上可以存储中文字符,但需要使用Unicode编码。 8. 计算2乘以8:最有效率的方式是直接使用`2 * 8`,因为这是编译器优化后的基本运算。 9. 一百亿计算器的设计:设计一个大整数计算器要考虑存储和运算的高效性,可能需要使用字符串或自定义的大数类来实现。 10. `final`关键字:`final`修饰的变量,其引用一旦初始化后不可改变,对于对象,意味着引用不可变,但引用的对象的属性可以改变。 11. `'=='`与`equals()`:`==`比较的是变量的值(对象的引用),而`equals()`方法用于比较对象的内容。默认情况下,`equals()`与`==`行为一致,但可以通过重写`equals()`方法改变其行为。 12. 静态变量与实例变量:静态变量属于类,由所有实例共享;实例变量属于对象,每个实例有自己的副本。 13. 调用非静态方法:不能直接从静态方法内部调用非静态方法,因为静态方法属于类,而非静态方法属于对象。 14. `Integer`与`int`的区别:`Integer`是`int`的包装类,提供了额外的功能,如缓存、比较等,而`int`是原始数据类型,使用更高效。 15. `Math.round()`方法:`Math.round(11.5)`等于12,`Math.round(-11.5)`等于-11。 16. 不妥的代码:未给出具体代码,通常需要注意类型转换、数组越界、空指针等问题。 17. 访问修饰符的区别:`public`是全局可访问,`private`仅限本类,`protected`在本包及子类中可访问,无修饰符表示在本包内可访问。 18. Overload与Override:Overload是方法重载,允许在同一类中定义多个同名但参数列表不同的方法;Override是方法重写,子类方法必须与父类方法签名完全一致,并且访问权限不能更低。 19. 构造器不能被覆盖:构造器不能被重写(Override),但可以被重载(Overload)。 20. 接口与抽象类:接口只包含方法声明,不包含实现;抽象类可以包含方法实现。接口可以继承接口,抽象类可以实现接口,但抽象类不能继承具体类。 21. `clone()`方法:通常会包含`super.clone()`调用,用于创建对象的浅复制。 22. 面向对象的特征:封装、继承、多态。 23. Java实现多态的机制:通过接口或抽象类实现,以及方法的动态绑定。 24. `abstract`类与接口的区别:`abstract`类可以有方法实现,可以有非`abstract`方法和成员变量;接口只有方法声明,没有实现,且成员默认为`public static final`。 25. `abstract`、`static`、`native`和`synchronized`组合:`abstract`方法不能是`static`或`native`,也不能是`synchronized`。 26. 内部类:内部类是定义在另一个类中的类,可以分为成员内部类(包括静态嵌套类和非静态嵌套类)和局部内部类。 27. 内部类与包含类的交互:内部类可以访问包含类的所有成员,包括私有成员,但外部类不能直接访问内部类的私有成员。 28. 匿名内部类:匿名内部类可以继承其他类或实现接口,但没有类名,通常用于一次性使用的场景。