我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java中的魔法值概念是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java中的魔法值概念是什么

本文小编为大家详细介绍“Java中的魔法值概念是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的魔法值概念是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    Java中的魔法值

    背景

    使用IDEA时,启用了阿里的代码规范检查,其中就有一项提示是不允许任何魔法值出现在代码里,于是出于好奇就了解一下到底啥时魔法值。

    介绍

    魔法数值、魔法数字、魔法值,这是一个东西,不同的叫法。

    魔法数字,在编程领域指的是莫名其妙出现的数字。数字的意义必须通过详细阅读才能推断出来

    if("1".equals(dangerKey)){            BigDecimal warningValue = new BigDecimal(JedisUtils.get(WARNING_VALUE_KEY));            model.addAttribute("isDanger", true);            model.addAttribute("warningValue", warningValue);        }

    上面代码中的字符串1就是一个魔法值,在未读整段代码之前,我并不知道这个字符串1代表什么意思,只有把这个字符串带入后面的代码逻辑才能判断该值的真实意义,而且如果多次出现,这就大大的降低了代码的可阅读性。所以我们在代码中应该极力避免产生魔法值。

    解决方法

    ** 使用枚举类型或者使用static final修饰常量 **

    //预警值标识    public static final String DANGERKEY_TRUE ="1";    if(DANGERKEY_TRUE.equals(dangerKey)){            BigDecimal warningValue = new BigDecimal(JedisUtils.get(WARNING_VALUE_KEY));            model.addAttribute("isDanger", true);            model.addAttribute("warningValue", warningValue);        }

    以上就是使用static final的方式替换的魔法值,这样就可以避免了。如果在代码中多次使用的话,只需更声明的地方就可以达到全局的效果。

    提示:静态常量的命名最好全是大写字母,如果是多个单词需要分割,可以使用下划线分割。

    小结:魔法值的问题对于代码逻辑来说,并不是什么要命的事情,即使不修改也基本不影响代码的正常运行,我以前没有安装阿里代码检查规范时,一样这么使用,也没出现过啥问题。好吧,应该说但是了。但是,遵循公认的代码规范,可以有效的避免开发过程的一些小问题(最让人头疼的往往都是一些小问题引起的),提升开发的效率和代码的可阅读性,老老实实按照规范来,自然就会受益良多,继续加油! 

    Java的魔法值概念

    想象一下,当你入职一家新公司,打开工具看以前同事的项目时,突然看到下面这段代码

    String[] catNames = new String[7];String[] dogNames = new String[7];for(int i = 0; i < 7; i++) {    //此处省略若干行}

    你心中一定很凌乱,可能还会在心底默默问候下写这段代码的前同事。

    在没有注释的情况下,此处的i < 7,你根本无法知道是要处理 dogNames数组还是catNames数组,你还要继续去看循环体中的内容才能来推断这个数字的含义。这里的7就是魔法值。

    所谓的魔法值,就是指在代码中直接出现的数值,只有在这个数值记述的那部分代码中才能明确了解其含义。

    魔法值简单好用,任何项目基本上都会有魔法值的出现。但魔法值就像一段没有注释的代码,它的出现使得程序的可读性大大下降,甚至只有当事人才知道。这对于项目或者别的开发来说,无疑都是不利的。同时,如果到处用到魔法值,那需要修改的时候,就要修改很多地方,这不仅耗费时间,还很容易会遗漏。

    魔法值的问题就是含义不明且无法统一使用,要把它们统一表示,并加上注释,我们可以用static final 定义常量或使用enum值。

    static final int CAT_NUM = 7;String[] catNames = new String[CAT_NUM];for(int i = 0; i < CAT_NUM; i++) {    //此处省略若干行}for(int i = 0; i < PET.DOG.getNum(); i++) {    //此处省略若干行}

    当然此处用catNames.length,dogNames.length也不会引起混淆。

    其实魔法值也并不是要完全禁止不用,毕竟每次用到数值就要去定义常量或者在enum中新增元素还是很麻烦的。只要保障你的数值不会让别人难以阅读,你就可以使用魔法值。一般 -1、0 和 1不被视为魔法值。

    读到这里,这篇“Java中的魔法值概念是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Java中的魔法值概念是什么

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Java中的魔法值概念是什么

    本文小编为大家详细介绍“Java中的魔法值概念是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的魔法值概念是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Java中的魔法值背景使用IDEA时,
    2023-06-29

    java中锁的概念是什么

    java中锁的概念是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;
    2023-06-14

    java中void的概念是什么

    这篇文章主要介绍了java中void的概念是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java中void的概念是什么文章都会有所收获,下面我们一起来看看吧。在java中,void是“空”的意思,即“什么
    2023-07-05

    java中string的概念是什么

    这篇文章主要介绍了java中string的概念是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java中string的概念是什么文章都会有所收获,下面我们一起来看看吧。在java中,string是字符串的意
    2023-07-05

    java中重载的概念是什么

    在Java中,重载(Overloading)是指在同一个类中定义多个方法,这些方法具有相同的名称但具有不同的参数列表。重载方法可以具有不同的返回类型,但不能仅由返回类型区分。重载方法的目的是为了提高代码的可读性和可维护性。通过使用不同的参数
    2023-09-01

    Java中io流的概念是什么

    在Java中,I/O流是用于处理输入和输出的一种机制。它允许程序从输入源读取数据,并将数据写入输出源。I/O流可以用于读取和写入文件、网络连接、标准输入/输出等。I/O流分为输入流和输出流两种类型。输入流(InputStream)用于从输
    Java中io流的概念是什么
    2024-02-29

    C++中左值与右值的概念与应用方法是什么

    这篇文章主要讲解了“C++中左值与右值的概念与应用方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中左值与右值的概念与应用方法是什么”吧!什么是左值与右值?左值(Lvalue)
    2023-07-05

    java多态的概念是什么

    Java多态的概念是指子类对象可以以父类的类型进行引用和操作。多态性是面向对象编程的重要特性之一,它允许一个变量引用不同类型的对象,并根据实际类型的调用来执行相应的方法。具体来说,当一个父类引用指向一个子类对象时,通过这个父类引用可以调用父
    2023-09-22

    Java封装的概念是什么

    这篇文章主要介绍“Java封装的概念是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java封装的概念是什么”文章能帮助大家解决问题。封装封装的概念将类的某些信息隐藏在类的内部,不允许外部程序直
    2023-06-30

    java数组的概念是什么

    小编给大家分享一下java数组的概念是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java可以用来干什么Java主要应用于:1. web开发;2. Andr
    2023-06-14

    java映射的概念是什么

    在Java中,映射(Map)是一种数据结构,用于存储键值对(key-value pairs)的集合。每个键(key)都是唯一的,而值(value)可以重复。映射提供了以常量时间复杂度(O(1))来查找、插入、删除键值对的操作。在映射中,可以
    2023-08-23

    JAVA基本概念是什么

    这篇文章主要为大家展示了“JAVA基本概念是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JAVA基本概念是什么”这篇文章吧。一、java发展史1.java之父:詹姆斯·高家林2.关键时间点
    2023-06-25

    java中的四个核心概念是什么

    本篇内容主要讲解“java中的四个核心概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中的四个核心概念是什么”吧!1.Java虚拟机Java虚拟机的主要任务是装在class文件并
    2023-06-17

    Java中Term Vector的概念和使用方法是什么

    本篇内容主要讲解“Java中Term Vector的概念和使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中Term Vector的概念和使用方法是什么”吧!term vec
    2023-06-03

    java空指针的概念是什么

    在Java中,空指针是指一个变量被赋值为null,然后尝试访问该变量的实例方法或实例字段时出现的错误。当一个变量为空时,它不指向任何有效的对象,因此无法调用对象的方法或访问对象的字段。空指针异常(NullPointerException)
    java空指针的概念是什么
    2024-02-29

    Java进程调度算法的概念是什么

    这篇“Java进程调度算法的概念是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java进程调度算法的概念是什么”文章吧
    2023-07-02

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录