2021 Java面试深度解析:核心概念与实战题

需积分: 16 4 下载量 163 浏览量 更新于2024-07-09 收藏 12.09MB PDF 举报
"2021java面试题-持续更新.pdf" 这份资料包含了2021年Java面试中可能遇到的问题,覆盖了Java基础知识、面向对象、语法特性、字符串处理、多态、构造方法、异常处理等多个方面。以下是部分知识点的详细说明: 1. 面向对象四大特性:封装、继承、多态、抽象。封装是隐藏对象的属性和实现细节,仅对外提供公共访问方式;继承是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法;多态是同一种类型的引用可以指向不同类型的对象,实现不同的行为;抽象是通过抽象类和接口来定义通用的行为。 2. Java语言特点:跨平台性(基于JVM)、面向对象、自动内存管理(垃圾回收机制)、健壮性(检查型错误、异常处理)、安全性等。 3. 主类是Java程序的入口点,应用程序的主类通常包含main方法,而小程序(Applet)的主类则有特定的生命周期方法,如init、start、stop和destroy。 4. 访问修饰符:public表示公开的,任何地方都能访问;private表示私有的,只能在本类中访问;protected表示受保护的,允许子类和同一包内的类访问;默认(无修饰符)表示包级私有,只允许同一包内的类访问。 5. float f = 3.4; 是不正确的,因为3.4是double类型,需要转换为float,应写成float f = 3.4f或float f = (float)3.4。 6. Java没有goto语句,它倡导的是结构化编程,鼓励使用循环和条件判断代替goto。 7. &是按位与运算符,&&是逻辑与运算符。前者始终计算两边的操作数,后者若左边为假,则不计算右边。 8. Math.round(11.5)等于12,Math.round(-11.5)等于-11。round方法会四舍五入到最接近的整数。 9. 2乘以8的最有效率方法是使用位左移运算:2 << 3。 10. Java注释包括单行注释(//)、多行注释(/*...*/)和文档注释(/**...*/),用于解释代码、生成API文档等。 11. Java的数据类型分为基本数据类型(如int、char、boolean)和引用数据类型(类、接口、数组)。 12. final用于声明不可变的变量、方法或类,确保其值不会改变。 13. final、finally和finalize的区别:final修饰变量或方法,使其不可更改;finally是异常处理中的关键字,保证代码块一定会执行;finalize是对象被垃圾回收前的回调方法。 14. String str="i"和String str=new String("1")创建的对象不同,前者在常量池中,后者在堆中。 15. Java中操作字符串的类有String、StringBuilder和StringBuffer。String是不可变的,而StringBuilder和StringBuffer是可变的,多线程环境下推荐使用StringBuffer。 16. clone()用于创建一个对象的副本,浅克隆只复制对象本身,深克隆还需复制对象引用的其他对象。 17. new一个对象是通过构造函数创建,而clone一个对象是复制已有对象的状态。 18. 多态是面向对象的核心特性,允许父类引用指向子类对象,实现方法的重写和动态绑定。 19. 对于多态的理解,可以理解为同一种行为在不同对象上有不同的实现,增强了代码的灵活性和扩展性。 20. 构造器不能被重写,但可以被重载,即构造方法具有相同的名称,但参数列表不同。 21. 两个对象值相同(x.equals(y)==true)但hashcode不同是可能的,因为不同的对象可能有相同的值,但它们的内存地址不同。 22. 不可以继承String类,因为String是final的。 23. String类常用方法包括concat、compareTo、substring、indexOf、replace等。 24. char类型可以存储一个中文汉字,因为UTF-16编码中,一个中文汉字占用两个字节。 25. this关键字用于当前对象的引用,super关键字用于访问父类的成员。 26. this与super的区别在于,this指代当前对象,super指代父类对象。 27. static主要用来声明类级别的成员,这些成员不依赖于类的实例,而是由类共享。 28. static的独特之处在于,它可以被用于声明静态变量、静态方法,还可以用于静态导入和静态初始化块。 29. static的应用场景包括:静态变量(类级别的共享变量)、静态方法(与对象无关的方法,如工具类方法)、静态导入(简化类名引用)。 30. 使用static注意事项包括避免静态过多导致的全局状态问题,以及静态方法内无法访问非静态成员。 31. break、continue和return都是控制流程的语句:break用于跳出当前循环;continue跳过当前循环剩余部分,继续下一轮循环;return用于返回方法的结果并结束方法执行。 32. 定义一个不做事且没有参数的构造方法通常是为了确保每个实例化对象时都有一个默认的构造器,方便其他类进行实例化。 33. 构造方法的特性包括:无返回类型、名称与类名相同、用于初始化对象。 34. 静态变量属于类,实例变量属于对象,类的所有实例共享静态变量,而实例变量是每个实例独有。 35. 静态方法只能访问静态成员,不能访问非静态成员,而实例方法可以访问两者。 36. 方法的返回值是方法执行后返回的结果,可以是基本类型、对象引用或void。返回值的作用是传递方法计算后的结果给调用者。 37. 内部类分为成员内部类、局部内部类、匿名内部类和嵌套枚举类,用于实现更复杂的封装和代码组织。 38. Java的异常分为Error和Exception,Error通常表示系统级错误,Exception是程序运行时可以预见的错误。 39. 内部类分为成员内部类、局部内部类、匿名内部类和嵌套枚举类,每种内部类都有其特定的使用场景和特性。 40. hashCode和equals是Object类的方法,对于equals相等的对象,其hashCode应该也相等,这是哈希表(如HashMap)的基础。 41. hashCode()方法返回对象的哈希码,用于哈希表的快速查找。当两个对象equals相等时,它们的hashCode必须相等,但反之不成立。 42. 有了hashCode,对象可以快速定位在哈希表中,提高了查找效率。当两个对象的equals相等时,它们的哈希码应该相等,以满足哈希表的约束。 43. 抽象类和接口都是实现多态的方式,抽象类可以包含具体实现,接口则只包含方法声明。Java7开始,接口中可以包含静态方法和默认方法。 这只是部分问题的解析,完整的学习和准备面试需要对这些概念有深入的理解和实践。