java面试-基础语法与面向对象

简介: 本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。

1.1 重载与重写的区别

  • 重载是对象的方法之间,它们方法名相同,但方法的参数列表不同
  • 重写是父子类(包括接口与实现类)中两个同名方法,它们方法名相同,且方法的参数列表相同
  • 重载在编译阶段,由编译器根据传递给方法的参数来区分方法,例如
    MyObject obj = ...
    obj.test(123);   // 应该是调用 test(int x) 这个方法
    obj.test("abc"); // 应该是调用 test(String x) 这个方法
    
  • 而重写是在运行阶段,由虚拟机解释器去获取引用对象的实际类型,根据类型才能确定该调用哪个方法,例如
    Super obj = ...
    obj.test();     // 到底是调用父类,还是子类的 test 方法,必须检查引用对象的实际类型才能确定
    
  • 有没有发生重写,可以使用 @Override 来检查
    重写时,子类方法的访问修饰符要 >= 父类方法的访问修饰符
    重写时,子类方法抛出的检查异常类型要 <= 父类方法抛出的检查异常类型,或子类不抛异常
    重写时,父子类的方法的返回值类型要一样,或子类方法返回值是父类方法返回值的子类
    

    1.2 == 与 equals 的区别

  • 对于基本类型,== 是比较两边的值是否相同
  • 对于引用类型,== 是比较两边的引用地址是否相同,用来判断是否引用着同一对象
  • equals 要看实现
    • Object.equals(Object other) 的内部实现就是 ==,即判断当前对象和 other 是否引用着同一对象
    • 比如 String,它的内部实现就是去比较两个字符串中每个字符是否相同,比较的是内容
    • 比如 ArrayList,它的内部实现就是去比较两个集合中每个元素是否 equals,比较的也是内容
      // Java 示例
      String a = new String("text");
      String b = new String("text");
      System.out.println(a == b);       // false(地址不同)
      System.out.println(a.equals(b));  // true(内容相同)
      
      image.png

      1.3 String,StringBuilder 和 StringBuffer 的区别

  • 它们都可以用来表示字符串对象
  • String 表示的字符串是不可变的,而后两者表示的字符串是内容可变的(可以增、删、改字符串里的内容)
    image.png
// 示例:String 的不可变性
String s1 = "hello";
s1 += " world";  // 创建新对象 "hello world",原对象 "hello" 仍在内存中

// 示例:StringBuilder 的修改
StringBuilder sb = new StringBuilder("hello");
sb.append(" world");  // 直接修改为 "hello world",无新对象生成
  • StringBuilder 不是线程安全的,StringBuffer 是线程安全的,而 String 也算是线程安全的
    image.png
// 示例:StringBuffer 的同步方法
StringBuffer buffer = new StringBuffer();
buffer.append("A");  // 内部加锁,保证多线程安全

image.png

// 性能测试示例(单线程)
long start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100000; i++) {
   
    sb.append(i);  // 耗时约 5ms
}

StringBuffer sbf = new StringBuffer();
for (int i = 0; i < 100000; i++) {
   
    sbf.append(i);  // 耗时约 15ms(同步开销)
}

适用场景

  • 大部分场景下使用 String 就足够了
  • 如果有大量字符串拼接的需求,建议用后两者,此时
    • 此字符串对象需要被多线程同时访问,用 StringBuffer 保证安全
    • 此字符串对象只在线程内被使用,用 StringBuilder 足够了
      另外针对 String 类是 final 修饰会提一些问题,把握下面几点
  • 本质是因为 String 要设计成不可变的,final 只是条件之一
  • 不可变的好处有很多:线程安全、可以缓存等

    4.Java 中的异常

    image.png
    image.png
    image.png
    image.png
// 自定义 Checked 异常
class PaymentFailedException extends Exception {
   
    public PaymentFailedException(String message) {
   
        super(message);
    }
}
// 自定义 Unchecked 异常
class InvalidInputException extends RuntimeException {
   
    public InvalidInputException(String field) {
   
        super("字段 " + field + " 值非法");
    }
}

image.png

  • 常见的非检查异常有
    • 空指针异常
    • 算术异常(例如整数除零)
    • 数组索引越界异常
    • 类型转换异常
相关文章
|
1月前
|
存储 Java 容器
Java基本语法详解
本文深入讲解了Java编程的基础语法,涵盖数据类型、运算符、控制结构及数组等核心内容,帮助初学者构建坚实的编程基础。
|
3月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
166 1
|
2月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
322 0
|
2月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
115 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
28天前
|
算法 Java 测试技术
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
79 0
|
2月前
|
存储 Java 测试技术
Java基础 - 面向对象
面向对象编程是Java的核心,包含封装、继承、多态三大特性。封装隐藏实现细节,提升代码可维护性与安全性;继承实现类间IS-A关系,支持代码复用;多态通过继承、重写与向上转型,实现运行时方法动态绑定,提升系统扩展性与灵活性。
|
3月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
96 5
|
3月前
|
安全 Java API
2025 年 Java 校招面试常见问题及详细答案汇总
本资料涵盖Java校招常见面试题,包括Java基础、并发编程、JVM、Spring框架、分布式与微服务等核心知识点,并提供详细解析与实操代码,助力2025校招备战。
158 1
|
3月前
|
算法 Java 微服务
2025 年 Java 面试宝典社招春招秋招实操全方位攻略
2025年Java面试宝典涵盖核心技术及最新趋势,分为四大板块:1. Java基础:深入数据类型、多态等特性,结合学生信息管理等实例;2. JVM核心:解析内存模型与GC算法,附多线程转账等场景应用;3. 高并发方案:详解synchronized与线程池配置,提供Web服务器优化案例;4. Spring生态:剖析IoC/AOP原理,演示微服务架构实现。特别新增Java 17+特性实操,包括Record类、密封接口等语法糖,整合Spring Boot 3、响应式编程及云原生技术,通过订单状态机、API网关配置。
221 1
|
2月前
|
存储 安全 Java
从基础语法到实战应用的 Java 入门必备知识全解析
本文介绍了Java入门必备知识,涵盖开发环境搭建、基础语法、面向对象编程、集合框架、异常处理、多线程和IO流等内容,结合实例帮助新手快速掌握Java核心概念与应用技巧。
61 0