汕头制作网站推荐,wordpress iis 安装,网络营销的好处和优势,陕西教育建设信息网站转载自 小知识 | Java中的“魔数”在编程过程中#xff0c;我们可能经常听到“魔数”这个词#xff0c;那么这个词到底指的是什么呢#xff1f;什么数叫做魔数呢#xff1f;一、标识文件类型的“魔数”大多数情况下#xff0c;我们都是通过扩展名来识别一个文件的类型的我们可能经常听到“魔数”这个词那么这个词到底指的是什么呢什么数叫做魔数呢一、标识文件类型的“魔数”大多数情况下我们都是通过扩展名来识别一个文件的类型的比如我们看到一个.txt类型的文件我们就知道他是一个纯文本文件。但是扩展名是可以修改的那一旦一个文件的扩展名被修改过那么怎么识别一个文件的类型呢。这就用到了我们提到的“魔数”。很多类型的文件其起始的几个字节的内容是固定的或是有意填充或是本就如此。因此这几个字节的内容也被称为魔数 (magic number)因为根据这几个字节的内容就可以确定文件类型。有了这些魔术数字我们就可以很方便的区别不同的文件。为了方便虚拟机识别一个文件是否是class类型的文件SUN公司规定每个class文件都必须以一个word(四个字节)作为开始这个数字就是魔数。魔数是由四个字节的无符号数组成的而class文件的名字还挺好听的的其魔数就是0xCAFEBABE读者可以随便编译一个class文件然后然后用十六进制编辑器打开编译后的class文件基本格式如下如何使用16进制打开class文件使用 vim test.class 然后在交互模式下输入:%!xxd 即可。二、代码中的魔数在有些代码中有一些数字常量或者字符串他们没有注释并且从命名上也看不出什么意思很可能在过一段时间之后谁也不知道这个常量或者字符串代表什么意思。我们就称这个常量或者字符串为魔数。在《阿里巴巴Java开发手册》中也有关于魔数的要求所有需要使用魔数的地方都可以使用枚举或者静态变量来代替。譬如一个很简单的根据职位计算薪水的方法public int getSalary(String title int grade) { if (Programmer.equals(title)){ return grade * 500 700; } else if (Tester.equals(title)){ return grade * 500 800; } else if (Analyst.equals(title)){ return grade * 800 1000; }}在这个方法里面ProgrammerTester和Analyst是所谓的魔字符串(Magic String)而500 700800和1000就是所谓的魔数(Magic Number)了。 咋一看代码这样写也没有什么问题但是仔细思考一下就会发现如果这种随手捻来的字符串和数字散布于程序当中随处可见的话是会有很多弊病的。如果我们使用常量来代替上面的魔数的话代码就会清爽很多而且下次修改的时候只需要修改常量值就可以了。public int getSalary(String title int grade) { if (Constants.TITLE_PROGRAMMER.equals(title)){ return grade * Constants.BASE_SALARY_LOW Constants.ALLOWANCE_LOW; } else if (Constants.TITLE_TESTER.equals(title)){ return grade * Constants.BASE_SALARY_LOW Constants.ALLOWANCE_MEDIUM; } else if (Constants.TITLE_ANALYST.equals(title)){ return grade * Constants.BASE_SALARY_HIGH Constants.ALLOWANCE_HIGH; }}在代码中使用魔数不仅使代码的可读性大大降低还可能导致各种问题。所以在代码中我们要尽量避免产生魔数。