`
iamxi
  • 浏览: 191887 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java语言中定义常量注意事项解析

    博客分类:
  • Java
阅读更多

一、常量定义的基本注意事项。

   Java 语言中,主要是利用 final 关键字(在 Java 类中灵活使用 Static 关键字)来定义常量。当常量被设定后,一般情况下就不允许再进行更改。如可以利用如下的形式来定义一个常量: final double PI=3.1315 。在定义这个常量时,需要注意如下内容:

  一是常量在定义的时候,就需要对常量进行初始化。也就是说,必须要在常量声明时对其进行初始化。这跟局部变量或者成员变量不同。当在常量定义的时候初始化过后,在应用程序中就无法再次对这个常量进行赋值。如果强行赋值的话,数据库会跳出错误信息,并拒绝接受这一个新的值。(接口中定义的常量的访问方法)

  二是 final 关键字使用的范围。这个 final 关键字不仅可以用来修饰基本数据类型的常量,还可以用来修饰对象的引用或者方法。如数组就是一个对象引用。为此可以使用 final 关键字来定义一个常量的数组。这就是 Java 语言中一个很大的特色。一旦一个数组对象被 final 关键字设置为常量数组之后,它只能够恒定的指向一个数组对象,无法将其改变指向另外一个对象,也无法更改数组(有序数组的插入方法可使用的二分查找算法)中的值。

  三是需要注意常量的命名规则。不同的语言,在定义变量或者常量的时候,都有自己一套编码规则。这主要是为了提高代码的共享程度与提高代码的易读性。在 Java 语言中,定义常量的时候,也有自己的一套规则。如在给常量取名的时候,一般都用大写字符。在 Java 语言中,大小写字符是敏感的。之所以采用大写字符,主要是跟变量进行区分。虽然说给常量取名时采用小写字符,也不会有语法上的错误。但是,为了在编写代码时能够一目了然的判断变量与常量,最好还是能够将常量设置为大写字符。另外,在常量中,往往通过下划线来分隔不同的字符。而不想对象名或者类名那样,通过首字符大写的方式来进行分隔。这些规则虽然不是强制性的规则,但是为了提高代码友好性,方便开发团队中的其他成员阅读,这些规则还是需要遵守的。没有规矩,不成方圆。

  总之, Java 开发人员需要注意,被定义为 final 的常量需要采用大写字母命名,并且中间最好使用下划线作为分隔符来进行连接多个单词。在定义 final 的数据不论是常量、对象引用还是数组,在主函数中都不可以改变。否则的话,会被编辑器拒绝并提示错误信息。 

二、 Final 关键字与 static 关键字同时使用。

  由于 Java 是面向对象的语言,所以在定义常量的时候还有与其它编程语言不同的地方。如一段程序代码从编辑到最后执行,即使需要经过两个过程,分别为代码的装载与对象的建立。不同的过程对于常量的影响是不同的。现在假设有如下的代码:

   Private static Random rd1=new Random(); // 实例化一个随机数生成对象。

   Private final int int1=rd1.nestInt(10); // 生成随机数并赋值给常量 int1

   Private static final int int2=rd1.nestInt(10); // 生成随机数并赋值给常量 int2

这上面的语句的大致含义是,通过 Java 语言提供的随机数类对象,生成随机数。并把生成的随机数赋值给常量 int1 int2 。细心的读者会发现,虽然同样是赋值语句,但是以上两个语句中有一个细小的差别,即在第二条语句中多了一个关键字 static 。关于关键字的用途,笔者在以前的文章中也有谈到过。这个是一个静态的概念。即当利用这个关键字来修饰一个变量的时候,在创建对象之前就会为这个变量在内存中创建一个 存储 空间。以后创建对对象如果需要用到这个静态变量,那么就会共享这一个变量的 存储 空间。也就是说,在创建对象的时候,如果用到这个变量,那么系统不会为其再分配一个存储空间,而只是将这个内存存储空间的地址赋值给他。如此做的好处就是可以让多个对象采用相同的初始变量。当需要改变多个对象中变量值的时候,只需要改变一次即可。从这个特性上来说,其跟常量的作用比较类似。不过其并不能够取代常量的作用。    

那么以上两条语句有什么差别吗 ? 我们首先来看     Private final int int1=rd1.nestInt(10) 这条语句。虽然 int1 也是一个常量,但是其是在对象建立的时候初始化的。如现在需要创建两个对象,那么需要对这个变量初始化两次。而在两次对象初始化的过程中,由于生成的随机数不同,所以常量初始化的值也不同。最后导致的结果就是,虽然 int1 是常量,但是在不同对象中,其值有可能是不同的。可见,定义为 final 的常量并不是恒定不变的。因为默认情况下,定义的常量是在对象建立的时候被初始化。如果在建立常量时,直接赋一个固定的值,而不是通过其他对象或者函数来赋值,那么这个常量的值就是恒定不变的,即在多个对象中值也使相同的。但是如果在给常量赋值的时候,采用的是一些函数或者对象 ( 如生成随机数的 Random 对象 ) ,那么每次建立对象时其给常量的初始化值就有可能不同。这往往是程序开发人员不愿意看到的。有时候程序开发人员希望建立再多的对象,其在多个对象中引用常量的值都是相同的。

  要实现这个需求的话,有两个方法。一是在给常量赋值的时候,直接赋予一个固定的值,如 abcd 等等。而不是一个会根据环境变化的函数或者对象。像生成随机数的对象,每次运行时其结果都有可能不能。利用这个对象来对常量进行初始化的时候,那么结果可能每次创建对象时这个结果都有可能不同。最后这个常量只能够做到在一个对象内是恒定不变的,而无法做到在一个应用程序内是恒定不变的。另外一个方法就是将关键字 static 与关键字 final 同时使用。一个被定义为 final 的对象引用或者常量只能够指向唯一的一个对象,不可以将他再指向其他对象。但是,正如上面举的一个随机数的例子,对象本身的内容的值是可以改变的。为了做到一个常量在一个应用程序内真的不被更改,就需要将常量声明为 staitc final 的常量。这是什么意思呢 ? 正如上面笔者所说的,当执行一个应用程序的时候,可以分为两个步骤,分别为代码装载与对象创建。为了确保在所有情况下 ( 即创建多个对象情况下 ) 应用程序还能够得到一个相同值的常量,那么就最好告诉编译器,在代码装载的时候就初始化常量的值。然后在后续创建对象的时候,只引用这个常量对象的地址,而不对其再进行再次初始化。就如同 Private static final int int2=rd1.nestInt(10) 这种形式来定义常量。如此,在后续多次创建对象后,这个常量 int2 的值都是相同的。因为在创建对象时,只是引用这个常量,而不会对这个常量再次进行初始化。

  由于加上这个 static 关键字之后,相当于改变了常量的作用范围。为此程序开发人员需要了解自己的需求,然后选择是否需要使用这个关键字。在初始化常量的时候,如果采用函数 ( 如系统当前时间 ) 或者对象 ( 如生成随机数的对象 ) 来初始化常量,可以预见到在每次初始化这个常量时可能得到不同的值,就需要考虑是否要采用这个 static 关键字。一般情况下,如果只需要保证在对象内部采用这个常量的话,那么这个关键字就可有可无的。但是反过来,如果需要在多个对象中引用这个常量,并且需要其值相同,那么就必须要采用 static 这个关键字了。以确保不同对象中都只有一个常量的值。或者说,不同对象中引用的常量其实指向的是内存中的同一块区域。

分享到:
评论

相关推荐

    Java变量常量声明和定义原理解析

    Java变量常量声明和定义原理解析是Java编程语言的基础知识之一,对于初学者和开发者来说都是非常重要的概念。下面是对Java变量常量声明和定义原理解析的详细介绍: 一、常量和变量 在Java程序中,存在大量的数据来...

    java解析rss具体信息

    #### 五、注意事项 - 在实际应用中,需要注意异常处理,例如网络连接失败、XML 文件格式错误等情况。 - `Constant` 类中包含了常量字符串,用于指定 XML 文件中元素的路径。在实际代码中,这些常量需要被正确定义。...

    基于MINIJAVA转MIPS的编译器

    在实际操作中,"readme.txt"文件可能包含了编译器的使用说明和注意事项,而"MiniJava"可能是MINIJAVA的源代码示例,用于测试编译器的正确性。通过编写和调试这个编译器,我们可以深入理解编译过程,提高对计算机系统...

    Java中的static关键字

    Java 中的 static 关键字 ...在 Java 中,类装载器把一个类装入 Java 虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的。

    java学习笔记.pdf

    * 变量使用的注意事项:名字不能重复、变量未赋值不能使用、long类型的变量定义的时候,后面要加L、float类型的变量定义的时候,后面要加F。 * 变量的定义规则:由数字、字母、下划线_和美元符$组成、不能以数字开头...

    Sun公司Java培训教材中文稿.rar_JAVA培训_Java 教材

    3. **基础语法**:讲解Java的基本数据类型、变量、常量、运算符、流程控制(如if语句、switch语句、for循环、while循环等)以及方法定义。 4. **面向对象编程**:深入解析Java的类、对象、封装、继承、多态等核心...

    毕向东Java知识总结

    接下来,学习新技术时,毕向东提出要从四个方面进行:技术的定义、特点和使用注意事项、如何使用该技术以及在什么场景下使用该技术。这样的学习方法有助于深入理解技术本质,避免在实际应用中出现错误。 在Java概述...

    Java基础之笔记系列—Day02(基础语法)

    Java语言的基础组成部分包括关键字、标识符、注释、常量和变量、运算符、语句、函数和数组等。 ### 1.1 关键字 **定义与特点**: - **定义**:被Java语言赋予了特殊含义的单词。 - **特点**:关键字中所有字母都...

    java实现的文字滚动

    #### 四、注意事项 - 在实际项目中,建议使用Swing或JavaFX来代替Applet进行GUI开发。 - 对于复杂的动画效果,可以考虑使用定时器(如`javax.swing.Timer`)来替代`Thread.sleep()`,以避免可能产生的性能问题。 - ...

    java class文件查看工具

    5. **注意事项** 使用这类工具时,应尊重软件版权,除非拥有源代码或获得授权,否则不应对他人编译的Class文件进行反编译。同时,反编译的结果可能与原始源代码有所不同,因为Java编译器会进行优化。 总之,"java ...

    java连接数据库万能代码

    #### 四、注意事项 1. **安全性**: 在实际项目中,不应该硬编码数据库用户名和密码,而应该通过配置文件或环境变量等方式来管理敏感信息。 2. **异常处理**: 示例代码中的异常处理较为简单,仅调用了`...

    词法分析器(Java实现)

    `Readme.txt`通常包含项目简介、使用方法或注意事项,是理解项目的重要文档。 这个Java实现的词法分析器项目,不仅涵盖了编译原理中的基本理论,如正则表达式、有限自动机,还涉及到实际的编程实现,包括状态机的...

    java 随机读写Java类文件

    8. **注意事项**:对类文件的修改可能会导致Java虚拟机无法正确解析,因此这类操作需要谨慎,最好在理解了类文件结构和相关规范后再进行。 9. **相关工具与库**:有一些开源库如BCEL(Byte Code Engineering ...

    Java语言编程规范--华为技术有限公司

    Java语言编程规范是软件开发中的重要组成部分,尤其在大型企业如华为技术有限公司中,遵循统一的编程规范至关重要。规范能够确保代码的可读性、可维护性和团队协作效率。以下是对"Java语言编程规范--华为技术有限...

    java习题解答.pdf

    ### Java 语言概述知识点解析 #### 一、简答题知识点详解 ##### 1. Java 语言的诞生日及其特点与优势 - **诞生日**: Java 语言诞生于1995年5月23日,这是由Sun Microsystems公司发布的一个重要的编程语言。 - **...

    java反编译.zip

    5. **注意事项**:反编译可能涉及到版权和法律问题,因为原始源代码受制于软件许可协议。在进行反编译之前,确保你有权访问和使用相关的字节码。 6. **其他工具**:除了JD之外,还有一些其他的Java反编译器,如...

    class转java

    五、注意事项 反编译可能存在法律风险。在使用他人编译后的`class`文件时,务必确保遵循相应的授权协议,尊重知识产权。 总结,`class`文件到Java源代码的转换是通过反编译工具实现的,如JD-GUI,它可以帮助开发者...

Global site tag (gtag.js) - Google Analytics