2020 Java面试必备知识点详解

4星 · 超过85%的资源 需积分: 47 17 下载量 149 浏览量 更新于2024-07-21 1 收藏 1.2MB PDF 举报
"最新版JAVA面试宝典2020修改版,涵盖了历年面试的经典Java基础问题,旨在帮助面试者全面掌握Java基础知识并提升面试成功率。" 本文将详细解析《最新版JAVA面试宝典2020修改版》中涉及的一些关键知识点,这些知识点对于Java开发者来说至关重要,无论是在面试还是日常开发中都有广泛应用。 1. Java源文件与类的关系:一个`.java`源文件可以包含多个类,但只能有一个公共类(public class),且该公共类的名称必须与文件名相同。 2. `goto`关键字:Java中没有`goto`关键字,它不符合Java的面向对象设计原则。 3. `&`与`&&`的区别:`&`是逻辑与运算符,无论两边表达式是否为真都会进行计算;而`&&`是短路与运算符,如果左边表达式为假,右边的表达式不会执行。 4. 跳出多重循环:使用`break`语句可以跳出当前的多重嵌套循环,但无法指定跳出哪一层循环。 5. `switch`语句的适用范围:`switch`不能作用于`byte`类型,但在Java 7及以上版本可以作用于`char`,`byte`,`short`,和`int`。从Java 14开始,`switch`也可以作用于`String`。 6. `short`类型的自增:直接赋值`s1=s1+1`会导致数据溢出,因为需要先转换为`int`类型再加1,然后又强制转换回`short`。而`s1+=1`则会自动处理类型转换,避免溢出。 7. `char`存储中文:`char`变量可以存储一个中文字符,因为一个中文字符通常由两个字节表示,符合`char`类型(16位)的存储范围。 8. 计算2乘以8:最有效率的方法是直接使用`2 << 3`,利用位移运算。 9. 一百亿计算器设计:设计一个计算器要考虑性能和精度,可以使用大数运算库如BigInteger,或者自定义算法处理大整数。 10. `final`关键字:修饰变量时,意味着引用一旦赋值后不可改变,如果是对象,则对象的内容不可变,但引用本身指向的地址是可以改变的。 11. `==`与`equals`的区别:`==`比较的是对象的引用,而`equals`默认比较对象的内容,但可以重写以实现特定的比较逻辑。 12. 静态变量与实例变量:静态变量属于类,生命周期始于类加载,终于类卸载;实例变量属于对象,随对象创建而生,随对象销毁而灭。 13. `static`方法内调用非`static`方法:不允许,因为`static`方法不依赖对象实例,而非`static`方法需要对象实例才能调用。 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`,但可以被重载。 20. 接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类中的`main`方法可以是静态的。 21. `clone()`方法通常会包含`super.clone()`,用于创建对象的浅复制。 22. 面向对象的特征:封装、继承、多态。 23. Java中实现多态的机制是通过接口和继承,以及方法的重写。 24. `abstract class`与`interface`区别:抽象类可以有方法实现,可以有非抽象方法和实例变量,而接口只有抽象方法和常量。 25. `abstract`、`static`、`native`、`synchronized`组合:`abstract`不能与`static`、`native`同时使用,但可以与`synchronized`结合。 26. 内部类:内部类是定义在另一个类内部的类,分为静态嵌套类(Static Nested Class)和非静态嵌套类(Inner Class)。静态嵌套类不持有外部类的引用,而内部类则可以直接访问外部类的成员。 以上是《最新版JAVA面试宝典2020修改版》中部分知识点的详细解析,掌握这些内容将有助于提升Java开发者的基础知识水平和面试表现。