2021 Java面试必备知识点详解

需积分: 13 6 下载量 39 浏览量 更新于2024-07-07 收藏 12.09MB PDF 举报
"2021 Java面试题包含Java基础、IO、集合、JVM、多线程、常用框架和计组等多个领域的常见问题,旨在帮助初中高级Java工程师准备面试,提升技能,以获取更好的职业机会。" 1. **面向对象四大特性**:封装、继承、多态和抽象是面向对象编程的四大核心特性。封装是将数据和操作数据的方法捆绑在一起,保护数据不受外部干扰;继承允许子类继承父类的属性和行为,减少代码重复;多态使得一个接口可以有多种不同的实现,增强代码的灵活性;抽象是忽略对象的具体细节,关注其共性,通过抽象类或接口来定义。 2. **Java语言特点**:包括平台独立性、简单性、面向对象、健壮性、安全性、高效性、可移植性、多线程和动态性等。 3. **主类**:Java程序的主类通常包含main方法,它是程序的入口点。应用程序和小程序(如Applet)的主类不同,Applet需要在Web浏览器环境中运行,而应用程序可以直接由Java虚拟机执行。 4. **访问修饰符**:public表示公共,可以在任何地方访问;private表示私有,只能在本类中访问;protected表示受保护,可以在本包及子类中访问;默认(无修饰符)表示包内可见。 5. **float与3.4**:float f = 3.4 是错误的,因为3.4是double类型的,需要转换为float,正确的写法是float f = 3.4f。 6. **Java中的goto**:Java中没有goto语句,它是一种控制流程的转移命令,但在Java中被省略,以鼓励使用结构化编程。 7. **&和&&的区别**:&是位运算符,无论两边表达式是否为真都会进行运算;&&是逻辑运算符,只有当左边表达式为真时,才会计算右边的表达式。 8. **Math.round**:Math.round(11.5)等于12,Math.round(-11.5)等于-11。Math.round总是返回最接近的整数。 9. **2乘以8的计算**:最有效率的方法是使用位左移运算符,即2 << 3。 10. **Java注释**:Java有三种注释方式,单行注释(//)、多行注释(/*...*/)和文档注释(/**...*/),后两者可以用于生成API文档。 11. **数据类型**:Java有基本数据类型(如int、char、boolean)和引用数据类型(类、接口、数组)。 12. **final关键字**:final用来声明不可变的对象、变量或方法,防止被修改。 13. **final、finally、finalize**:final修饰变量或方法;finally用于异常处理,保证代码块一定会执行;finalize是对象被垃圾回收前调用的方法。 14. **String创建**:"i"是字面量字符串,new String("1")是创建新的对象。两者虽然内容相同,但内存地址不同。 15. **String类**:String类提供了许多操作字符串的方法,如concat、substring、indexOf等,与其他字符串类(如StringBuilder、StringBuffer)相比,String是不可变的。 16. **Java克隆**:克隆用于复制对象,分为浅克隆(只复制对象本身,不复制引用的对象)和深克隆(连同引用的对象一起复制)。 17. **new与clone的区别**:new创建新对象,分配新的内存空间;clone复制已有对象,可能共享内存空间。 18. **多态机制**:多态是同一个接口,使用不同的实例而产生不同的效果,Java通过方法的重写和向上转型实现多态。 19. **多态理解**:多态提高了代码的复用性,降低了耦合度,增强了程序的扩展性。 20. **构造器**:构造器用于初始化新创建的对象,不能被重写(override),但可以被重载(overload)。 21. **equals与hashCode**:当两个对象x和y相等(x.equals(y)==true),根据 equals 的约定,它们的hashCode应该相同。但在某些情况下,两个不同的对象可能具有相同的哈希码。 22. **继承String类**:Java中的String类是final的,不能被继承。 23. **String方法**:String类提供了丰富的操作字符串的方法,如length()、trim()、toUpperCase()等。 24. **char与中文**:char类型可以存储单个Unicode字符,包括中文汉字。 25. **this与super**:this代表当前对象,super代表父类对象。 26. **static关键字**:static用于声明静态成员,它们属于类而非类的实例,生命周期始于类加载,终于类卸载。 27. **break、continue、return**:break用于跳出循环或switch语句;continue跳过当前循环迭代;return结束方法并返回结果。 28. **无参构造器**:用于初始化对象,即使没有显式声明,编译器也会自动添加一个无参构造器,除非类中有其他构造器。 29. **构造器特性**:构造器没有返回类型,名称与类名相同,不能被static、final、abstract等修饰。 30. **静态变量与实例变量**:静态变量属于类,所有实例共享;实例变量属于每个实例,互不影响。 31. **静态方法与实例方法**:静态方法与类关联,不依赖实例调用;实例方法与对象关联,必须通过实例调用。 32. **内部类**:内部类分为成员内部类、局部内部类、匿名内部类和嵌套枚举类,提供更灵活的封装和访问控制。 33. **异常分类**:Java异常分为检查型异常(编译时必须处理,如IOException)和运行时异常(可以选择处理,如NullPointerException)。 34. **hashCode与equals**:这两个方法常用于对象的比较,特别是集合类操作。当两个对象equals相等时,它们的hashCode也应该相等。 35. **hashCode方法**:用于返回对象的哈希码,用于快速查找和定位对象。 36. **为什么要有hashCode**:hashCode在哈希表(如HashMap)中起着关键作用,通过哈希码快速定位对象,提高查找效率。 37. **抽象类与接口**:抽象类是部分实现的类,可以有方法体,可以有非抽象方法;接口完全抽象,只能声明方法,Java7开始支持默认方法和静态方法。抽象类用于实现“is-a”关系,接口用于实现“like-a”关系。 这些面试问题覆盖了Java语言的各个方面,充分理解和掌握这些知识点对于成为一名优秀的Java开发者至关重要。