【Java核心技术/基础】25道Java基础面试题及答案

以下是从基础层面出发整理的25道Java核心技术面试题及答案。这些问题覆盖了Java的核心概念,包括基本语法、面向对象、集合框架、多线程、JVM基础等,旨在帮助您系统复习面试核心知识点。答案基于Java标准规范和实践经验整理,确保真实可靠。每个问题下方提供简明答案,并自然地引用相关知识点(如JVM内存模型、类加载过程等)。

25道Java核心技术基础面试题及答案

  1. Java的基本数据类型有哪些?
    答:Java有8种基本数据类型:byte(8位)、short(16位)、int(32位)、long(64位)、float(32位)、double(64位)、char(16位 Unicode)、boolean(true/false)。这些类型直接存储在栈内存中,效率高。

  2. 区分JDK、JRE和JVM的作用?
    答:JDK(Java Development Kit)是开发工具包,包含编译器(javac)和调试工具;JRE(Java Runtime Environment)是运行环境,包含JVM和核心类库;JVM(Java Virtual Machine)是虚拟机,执行字节码。开发需JDK,运行需JRE。

  3. 解释面向对象编程(OOP)的四大特性?
    答:封装(隐藏对象细节,通过访问修饰符控制)、继承(子类复用父类属性和方法)、多态(同一接口不同实现,通过重写或重载)、抽象(定义共性,如抽象类和接口)。例如,Animal抽象类可被Dog子类继承。

  4. final关键字的作用?
    答:修饰类时表示不可继承(如String);修饰方法时不可重写;修饰变量时为常量,值不可变(基本类型)或引用不可变(对象类型)。

  5. static关键字的作用?
    答:修饰变量时为类变量,所有实例共享;修饰方法时为类方法,可通过类名直接调用;修饰代码块在类加载时执行;修饰内部类时可直接实例化。

  6. 抽象类和接口的区别?
    答:抽象类可包含实现方法(非抽象方法)和字段,单继承;接口只定义抽象方法(Java 8后支持默认方法),多实现。接口强调行为契约,抽象类侧重代码复用。

  7. Java异常处理机制中,try-catch-finally的执行顺序?
    答:先执行try块,若异常跳转catch块处理,最后执行finally块(无论是否异常)。例如,文件操作中finally常用于关闭资源。

  8. checked异常和unchecked异常的区别?
    答:checked异常(如IOException)需在编译时处理(捕获或声明抛出);unchecked异常(如NullPointerException)是运行时异常,可不处理。

  9. 解释Java集合框架的主要接口?
    答:核心接口包括:Collection(根接口)、List(有序可重复,如ArrayList)、Set(无序唯一,如HashSet)、Map(键值对,如HashMap)、Queue(队列)。

  10. ArrayList和LinkedList的区别?
    答:ArrayList基于动态数组,随机访问快(O(1)O(1)O(1)),但插入删除慢(O(n)O(n)O(n));LinkedList基于双向链表,插入删除快(O(1)O(1)O(1)),但随机访问慢(O(n)O(n)O(n))。

  11. HashMap的工作原理?
    答:基于哈希表,通过hashCode()计算桶位置;冲突时使用链表或红黑树(Java 8优化)。负载因子(默认0.75)触发扩容,性能接近O(1)O(1)O(1)

  12. 如何创建线程?推荐哪种方式?
    答:方式一:继承Thread类并重写run();方式二:实现Runnable接口;推荐Runnable,避免单继承限制,且支持线程池复用资源。

  13. synchronized关键字的作用?
    答:修饰方法或代码块,实现线程同步,确保同一时间只有一个线程访问临界资源。基于监视器锁(monitor),解决竞态条件。

  14. volatile关键字的作用?
    答:保证变量可见性(线程直接读写主内存)和禁止指令重排序,但不保证原子性。适用于状态标志变量,如volatile boolean flag

  15. 简述JVM内存结构?
    答:包括线程私有的程序计数器、Java虚拟机栈、本地方法栈;线程共享的堆(对象实例)、方法区(存储类信息、常量、静态变量等)。Java 8后方法区改为元空间,使用本地内存。

  16. 垃圾回收(GC)机制的基本原理?
    答:GC自动回收堆中不再引用的对象。算法包括标记-清除、复制、标记-整理。分代收集策略:新生代(Minor GC)、老年代(Major GC)。

  17. String, StringBuilder, StringBuffer的区别?
    答:String不可变,线程安全但拼接效率低;StringBuilder可变,非线程安全,效率高;StringBuffer可变,线程安全(synchronized修饰),效率较低。

  18. 反射是什么?应用场景?
    答:反射允许运行时获取类信息并操作对象(如Class.forName())。用于框架开发(如Spring依赖注入)、动态代理。但降低性能,需谨慎使用。

  19. 泛型的作用和类型擦除机制?
    答:泛型提供编译时类型安全,防止ClassCastException。Java通过类型擦除实现,运行时泛型信息被擦除(如List<String>变为List),兼容旧代码。

  20. 注解(Annotation)的作用?
    答:为代码添加元数据,用于编译检查(如@Override)、运行时处理(如Spring的@Autowired)。自定义注解需通过@interface定义。

  21. 内部类的类型及优缺点?
    答:包括成员内部类、静态嵌套类、局部内部类、匿名内部类。优点:封装相关逻辑,访问外部类私有成员。缺点:增加复杂性。匿名内部类无名字,必须实现接口或继承抽象类,不能定义静态成员。

  22. 类加载过程简述?
    答:加载(Loading):读取字节码生成Class对象;验证(Verification):检查格式;准备(Preparation):分配内存;解析(Resolution):符号引用转直接引用;初始化(Initialization):执行静态代码块。加载可从文件、动态代理等多源获取。

  23. 方法区存储的内容?
    答:存储已被加载的类信息、常量(如字符串常量池)、静态变量、即时编译器编译后的代码。Java 8后由永久代改为元空间,避免内存溢出。

  24. 什么是函数式接口?举例说明。
    答:只含一个抽象方法的接口(如Runnable)。Java 8支持Lambda表达式简化实现,例如() -> System.out.println("Hello")

  25. Java中的序列化与反序列化?
    答:序列化将对象转为字节流(实现Serializable接口),用于网络传输或存储;反序列化重建对象。需注意serialVersionUID保证兼容性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anneCoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值