首页 > 编程语言 >JAVA面试中,面试官最爱问的问题。

JAVA面试中,面试官最爱问的问题。

时间:2024-05-27 17:28:53浏览次数:27  
标签:面试官 JAVA name 对象 age ImmutablePerson final 最爱问 构造函数

什么是不可变对象?Java中如何创建一个不可变对象?

不可变对象(Immutable Object)是一种在创建之后其状态就不能被修改的对象。这意味着一旦不可变对象被创建,它的所有字段的值都不能再被改变。不可变对象在多线程环境下是线程安全的,因为它们的状态不会因并发访问而改变。

在Java中,要创建一个不可变对象,可以遵循以下步骤:

  1. 将所有字段设置为final:确保对象的状态在初始化后不能被修改。final关键字可以确保字段只能在构造函数中被赋值一次,之后就不能再被修改。

  2. 提供私有构造函数和公共的静态工厂方法:私有构造函数可以防止外部通过new关键字直接创建对象,而公共的静态工厂方法可以用于创建和返回对象的实例。这有助于更好地控制对象的创建过程。

  3. 确保没有可变对象引用:如果类中包含了对其他对象的引用,那么这些被引用的对象也应该是不可变的,或者确保外部无法访问和修改这些被引用的对象。否则,即使类本身的字段是不可变的,外部仍然可以通过修改引用的对象来改变类的状态。

  4. 重写equals()hashCode()方法:对于不可变对象,这两个方法通常基于对象的所有字段来计算,以确保对象的唯一性和一致性。

  5. 确保类的安全性:防止通过反射等机制来修改对象的状态。

下面是一个简单的Java不可变对象的示例:

public final class ImmutablePerson {
private final String name;
private final int age;
private ImmutablePerson(String name, int age) {
this.name = name;
this.age = age;
}
public static ImmutablePerson of(String name, int age) {
return new ImmutablePerson(name, age);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
// 根据需要重写equals()和hashCode()方法
// ...
}

在这个例子中,ImmutablePerson类被声明为final,以防止其他类继承并可能修改其行为。所有的字段(nameage)都被声明为final,并且只能在私有构造函数中被赋值。公共静态工厂方法of()用于创建ImmutablePerson的实例。由于构造函数是私有的,外部代码不能使用new关键字直接创建ImmutablePerson的实例,而必须通过of()方法来创建。这样,我们可以更好地控制对象的创建和状态。

标签:面试官,JAVA,name,对象,age,ImmutablePerson,final,最爱问,构造函数
From: https://blog.csdn.net/heye0910032/article/details/139243073

相关文章

  • java list分组并对bigdecimal属性求和
    JavaList分组并对BigDecimal属性求和在Java中,我们经常需要对一个List进行分组,并对其中的BigDecimal属性进行求和操作。这种需求在实际项目中非常常见,比如在处理财务数据、统计数据等场景中。本文将介绍如何使用Java来实现这一功能,同时会提供代码示例来帮助读者更好地理解。1.使......
  • 基于SpringBoot的酒店订房系统-82159(免费领源码+数据库)可做计算机毕业设计JAVA、PHP、
    springboot酒店订房系统摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,酒店订房系统当然也不能排除在外。酒店订房系统是以实际运用为开发背景,运用软件工程开发方法,采用springboot技术构建的一个管理系统......
  • 公司刚入职了一名 Java 中级开发,短短 4 行代码居然凑齐了 3 个 bug!我哭了~~
    作者:l拉不拉米链接:https://juejin.cn/post/7031445206152577061一、前言公司刚入职了一名中级Java开发,经过一个星期的适应学习,各方面表现还不错,于是分配了一个小的迭代给新人做。需求很简单,把从第三方拉取的数据匹配到自身公司后台设置的渠道后,聚合到一个列表中,批量入库。然......
  • 【Java】短 URL 生成器设计:百亿短 URL 怎样做到无冲突?
    一、问题解析在社交媒体上,人们经常需要分享一些URL,但是有些URL可能会很长,比如:https://geek.qq.org/hybrid/pvip?utm_source=geek-pc-discover-banner&utm_term=geek-pc-discover-banner这样长的URL显然体验并不友好。我们期望分享的是一些更短、更易于阅读的短URL,比如像http......
  • 在JavaScript中如何移除数组中的特定项
    在日常开发中,我们经常需要从数组中移除某个特定的元素。在JavaScript中,存在多种不同的方法来完成这一任务,本文将总结几种常见的处理方式,并介绍它们的优缺点。常规情况1.使用.splice()方法按值移除数组元素是否修改原数组:是是否移除重复项:是(使用循环),否(使用i......
  • 代码雨(coderain)源码(html5+css3+javascript,原创)
     大家看过黑客帝国的代码雨吗?本人自己写了一个,效果还可以。演示效果请见https://www.lanbaoshi.site/coderain.htm下面上代码:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="htt......
  • Linux上搭建并使用ffmpeg(Java)
    原网址:https://blog.csdn.net/Just_do_it_HZF/article/details/136404728关于MacOs和Windows系统上使用ffmpeg就不多说了,有很多相关文章,今天给大家分享一个在Linux环境下使用Java语言来使用ffmpeg一、首先去官网下载一个Linux对应的ffmpeg包1、进入ffmpeg官网:官网2、点击左侧导......
  • 全面详解Java并发编程:从基础到高级应用
    全面详解Java并发编程:从基础到高级应用Java并发编程是Java开发中一个非常重要的领域,涉及多线程编程技术,用于提高程序的性能和响应能力。并发编程在多核处理器上特别有用,因为它可以同时执行多个任务,从而提高应用程序的效率。以下是对Java并发编程的详细讲解,涵盖基本概念、线......
  • 【开源】史上最全的JAVA面试题总结
    史上最全的JAVA面试题总结为什么要做这件事情前言JAVA基础开发框架springSpringMVCmybatisdubbospringbootspringcloudnacos数据库mysqloracle缓存redismongodbElasticSearch消息队列rabbitmqrocketmqkafka监控prometheusgraylogzabbix工具篇tcpdumpgitjenkins容器......
  • Java实验六: Java流式编程与网络程序设计(头歌)
    一、字节输入/输出流实现数据的保存和读取packagestep1;importjava.io.*;importjava.util.*;publicclassSortArray{publicstaticvoidmain(String[]args){/**********Begin**********///创建保存整型数据的数组(数组大小10)......