当前位置: 首页 > article >正文

挑战Java面试题复习第3天,无人扶我青云志

挑战第3天

  • Java 创建对象有几种方式?
  • 有没有可能两个不相等的对象有相同的hashCode
  • 深拷贝和浅拷贝的区别
  • final有哪些用法
  • static有哪些用法
  • 3*0.1 == 0.3 返回值是什么
  • a=a+b与a+=b有什么区别
  • try catch finally,try里有 return,finally还执行么

Java 创建对象有几种方式?

  1. 使用new关键字:
  • 直接使用new关键字调用类的构造函数来创建对象。
  1. 通过反射机制:
  • 使用java.lang.Class类的newInstance()方法或者java.lang.reflect.Constructor类的newInstance()方法来创建对象。
  1. 采用clone机制:
  • 利用对象的clone()方法来复制一个已经存在的对象,从而创建一个新的对象。
  1. 通过序列化机制:
  • 通过将对象序列化到文件、内存或网络中,然后再反序列化回对象,以此来创建对象。这通常涉及到实现java.io.Serializable接口。

有没有可能两个不相等的对象有相同的hashCode

  1. 可能存在相同hashCode值:
  • 在哈希表中,不同的对象可能因为哈希算法的设计而产生相同的哈希码(hashCode),这种现象称为哈希冲突。
  1. 处理哈希冲突的方法:
  • 拉链法:
    • 每个哈希表的槽位(索引)上挂一个链表,当发生冲突时,冲突的元素会被添加到对应槽位的链表中。
  • 开放定址法:
    • 当发生冲突时,寻找哈希表中的下一个空闲位置,将冲突的元素存储在那里。这通常涉及到线性探测、二次探测或双重哈希等策略。
  • 再哈希法:
    • 使用多个不同的哈希函数,当发生冲突时,尝试使用下一个哈希函数计算新的位置,直到找到一个没有冲突的位置。

深拷贝和浅拷贝的区别

  1. 浅拷贝:
  • 只复制对象本身,不复制对象内部引用的对象。
  • 对象的非基本类型属性仍然指向原始对象中的相同引用。
  • 修改原始对象的引用属性会影响拷贝对象的相应属性。
  1. 深拷贝:
  • 复制对象及其内部引用的所有对象,创建完全独立的副本。
  • 对象的所有属性,包括基本类型和非基本类型,都被复制。
  • 修改原始对象的引用属性不会影响拷贝对象的相应属性。

final有哪些用法

  1. 修饰类:
  • 被final修饰的类不能被继承。
  1. 修饰方法:
  • 被final修饰的方法不能被重写。
  1. 修饰变量:
  • 被final修饰的变量一旦被赋值后,其值不能被改变。
  • 如果final修饰的是引用类型变量,那么该引用不可变,但引用指向的对象内容可以变。
  1. 提高运行效率:
  • 被final修饰的方法,JVM可能会尝试进行方法内联,以提高程序运行效率。
  1. 常量存储:
  • 被final修饰的常量,在编译阶段会存入常量池中。
  1. 重排序规则:
  • 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
  • 初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。

static有哪些用法

  1. 静态变量:
  • 被static修饰的变量称为类变量,由类的所有实例共享。
  1. 静态方法:
  • 被static修饰的方法可以不通过类的实例来调用,它们属于类本身。
  1. 静态块:
  • static块通常用于初始化静态变量,它在类加载时执行一次。
  1. 静态内部类:
  • 被static修饰的内部类可以不依赖于外部类的实例,它们是与外部类分离的。
  1. 静态导入:
  • JDK 1.5引入的特性,允许导入类的静态成员,使得在代码中可以直接使用这些静态成员而不需要类名作为前缀。
  • 使用import static语法,可以简化对静态方法和变量的引用。

3*0.1 == 0.3 返回值是什么

  1. 浮点数精度问题:
  • 浮点数在计算机中的表示可能不是完全精确的。
  1. 不等式结果:
  • 3 * 0.1 == 0.3 的返回值是 false。
  1. 原因:
  • 由于浮点数的精度限制,3 * 0.1 的结果可能不等于 0.3。

a=a+b与a+=b有什么区别

  1. 操作符区别:
  • a = a + b 会先计算 a + b 的结果,然后将结果赋值给 a。
  • a += b 是 a = a + b 的简写形式,但会进行隐式类型转换,确保结果与左侧变量类型一致。
  1. 类型转换:
  • += 操作符会自动将加法操作的结果转换为左侧变量的类型。
  • a = a + b 则不会自动进行类型转换,需要显式转换。
  1. 代码示例:
  • byte a = 127; byte b = 127; b = a + b; 会报编译错误,因为 a + b 的结果是 int 类型,不能直接赋值给 byte 类型的 b。
  • byte a = 127; byte b = 127; b += a; 是正确的,因为 += 会自动将结果转换为 byte 类型。
  1. short 类型示例:
  • short s1 = 1; s1 = s1 + 1; 会报编译错误,因为 s1 + 1 的结果是 int 类型。
  • 正确写法是 short s1 = 1; s1 += 1;,因为 += 会自动将结果转换为 short 类型。

try catch finally,try里有 return,finally还执行么

  1. finally 块的执行:
  • 不管是否发生异常,finally 块中的代码总是会被执行。
  1. finally 与 return 的关系:
  • 当 try 或 catch 块中有 return 语句时,finally 块仍然会执行。
  1. 执行顺序:
  • finally 块的执行是在 return 语句之后,但在返回值被实际返回给调用者之前。这意味着 finally 块中的代码执行完毕后,之前保存的返回值才会被返回。
  1. 返回值的确定:
  • 函数的返回值在 finally 块执行之前就已经确定,finally 块中的操作不会改变这个返回值。
  1. finally 块中的 return:
  • 通常不建议在 finally 块中使用 return,因为这会导致函数提前退出,并且返回的值不是 try 或 catch 块中指定的值。

http://www.kler.cn/a/373084.html

相关文章:

  • 计算机科学与技术-毕业设计选题推荐
  • 提升网站速度与性能优化的有效策略与实践
  • Python 的安装及开发环境搭建
  • 智能财务 | 数据与融合,激发企业财务数智化转型思考
  • 聊聊Web3D 发展趋势
  • 在IDEA中运行Mybatis后发现取出的password值为null
  • ELK Stack与Graylog:强大的日志分析和可视化工具
  • 分类算法——LightGBM 详解
  • 基于SSM+微信小程序的汽车维修管理系统(汽车5)
  • 使用Python批量合并多个PDF文档
  • 使用 Flask 实现简单的登录注册功能
  • Unity计算二维向量夹角余弦值和正弦值的优化方法参考
  • cmake学习笔记
  • 什么是目标检测?
  • P1037 [NOIP2002 普及组] 产生数
  • Mybatis-18.动态SQL-sqlinclude
  • 【从零开始的LeetCode-算法】3216. 交换后字典序最小的字符串
  • MaskGCT,零样本语音克隆,TTS语音合成,多语言支持(WIN/MAC)
  • mac|maven项目在idea中连接redis
  • 智能合约分享
  • CSS浮雕效果
  • C++: String容器的使用和实现
  • 【MySQL】日志
  • QT中使用图表之QChart概述
  • 排查公网NAT网关中高流量ECS实例
  • 想要分离人声,来试试看这几个方法