java静态常量定义_Java常量定义需要注意事项及static作⽤
(复习)
在任何开发语⾔中,都需要定义常量。在Java开发语⾔平台中也不例外。不过在Java常量定义的时候,跟其他语⾔有所不同。其有⾃⼰的特⾊。在这篇⽂章中,主要针对Java语⾔中定义常量的注意事项进⾏解析,帮助各位程序开发⼈员更好的掌握常量的定义与管理⼯作。
⼀、常量定义的基本注意事项
在Java语⾔中,主要是利⽤final关键字(在Java类中灵活使⽤Static关键字)来进⾏Java常量定义。当常量被设定后,⼀般情况下就不允许再进⾏更改。如可以利⽤如下的形式来定义⼀个常量:finaldouble PI=3.1315。在定义这个常量时,需要注意如下内容:
⼀是Java常量定义的时候,就需要对常量进⾏初始化。也就是说,必须要在常量声明时对其进⾏初始化。都跟局部变量或者成员变量不同。当在常量定义的时候初始化过后,在应⽤程序中就⽆法再次对这个常量进⾏赋值。如果强⾏赋值的话,数据库会跳出错误信息,并拒绝接受这⼀个新的值。
⼆是final关键字使⽤的范围。这个final关键字不仅可以⽤来修饰基本数据类型的常量,还可以⽤来修饰对象的引⽤或者⽅法。如数组就是⼀个对象引⽤。为此可以使⽤final关键字来定义⼀个常量的数组。这
就是Java语⾔中⼀个很⼤的特⾊。⼀旦⼀个数组对象被final关键字设置为常量数组之后,它只能够恒定的指向⼀个数组对象,⽆法将其改变指向另外⼀个对象,也⽆法更改数组(有序数组的插⼊⽅法可使⽤的⼆分查算法)中的值。
java定义一维数组并赋值三是需要注意常量的命名规则。不同的语⾔,在定义变量或者常量的时候,都有⾃⼰⼀套编码规则。这主要是为了提⾼代码的共享程度与提⾼代码的易读性。在Java常量定义的时候,也有⾃⼰的⼀套规则。如在给常量取名的时候,⼀般都⽤⼤写字符。在Java语⾔中,⼤⼩写字符是敏感的。之所以采⽤⼤写字符,主要是跟变量进⾏区分。虽然说给常量取名时采⽤⼩写字符,也不会有语法上的错误。但是,为了在编写代码时能够⼀⽬了然的判断变量与常量,最好还是能够将常量设置为⼤写字符。另外,在常量中,往往通过下划线来分隔不同的字符。⽽不想对象名或者类名那样,通过⾸字符⼤写的⽅式来进⾏分隔。这些规则虽然不是强制性的规则,但是为了提⾼代码友好性,⽅便开发团队中的其他成员阅读,这些规则还是需要遵守的。没有规矩,不成⽅圆。
总之,Java开发⼈员需要注意,被定义为final的常量需要采⽤⼤写字母命名,并且中间最好使⽤下划线作为分隔符来进⾏连接多个单词。在定义final的数据不论是常量、对象引⽤还是数组,在主函数中都不可以改变。否则的话,会被编辑器拒绝并提⽰错误信息。
⼆、Final关键字与static关键字同时使⽤
由于Javal是⾯向对象的语⾔,所以在Java常量定义的时候还有与其它编程语⾔不同的地⽅。如⼀段程序代码从编辑到最后执⾏,即使需要经过两个过程,分别为代码的装载与对象的建⽴。不同的过程对于常量的影响是不同的。现在假设有如下的代码:
Privatestatic Random rd1=new Random(); //实例化⼀个随机数⽣成对象。
Private finalint stInt(10); //⽣成随机数并赋值给常量int1
Privatestatic final int stInt(10); //⽣成随机数并赋值给常量int2
这上⾯的语句的⼤致含义是,通过Java语⾔提供的随机数类对象,⽣成随机数。并把⽣成的随机数赋值给常量int1与int2。细⼼的读者会发现,虽然同样是赋值语句,但是以上两个语句中有⼀个细⼩的差别,即在第⼆条语句中多了⼀个关键字static。关于关键字的⽤途,笔者在以前的⽂章中也有谈到过。这个是⼀个静态的概念。即当利⽤这个关键字来修饰⼀个变量的时候,在创建对象之前就会为这个变量在内存中创建⼀个存储空间。以后创建对对象如果需要⽤到这个静态变量,那么就会共享这⼀个变量的存储空间。也就是说,在创建对象的时候,如果⽤到这个变量,那么系统不会为其再分配⼀个存储空间,⽽只是将这个内存存储空间的地址赋值给他。如此做的好处就是可以让多个对象采⽤相同的初始变量。当需要改变多个对象中变量值的时候,只需要改变⼀次即可。从这个特性上来说,其跟常量的作⽤⽐较类似。不过其并不能够取代常量的作⽤。
那么以上两条语句有什么差别吗?我们⾸先来看Private final int stInt(10)这条语句。虽然int1也是⼀个常量,但是其是在对象建⽴的时候初始化的。如现在需要创建两个对象,那么需要对这个变量初始化两次。⽽在两次对象初始化的过程中,由于⽣成的随机数不同,所以常量初始化的值也不同。最后导致的结果就是,虽然int1是常量,但是在不同对象中,其值有可能是不同的。可见,使⽤final的Java常量定义并不是恒定不变的。因为默认情况下,定义的常量是在对象建⽴的时候被初始化。如果在建⽴常量时,直接赋⼀个固定的值,⽽不是通过其他对象或者函数来赋值,那么这个常量的值就是恒定不变的,即在多个对象中值也使相同的。但是如果在给常量赋值的时候,采⽤的是⼀些函数或者对象(如⽣成随机数的Random对象),那么每次建⽴对象时其给常量的初始化值就有可能不同。这往往是程序开发⼈员不原意看到的。有时候程序开发⼈员希望建⽴再多的对象,其在多个对象中引⽤常量的值都是相同的。
要是现这个需求的话,有两个⽅法。⼀是在给常量赋值的时候,直接赋予⼀个固定的值,如abcd等等。⽽不是⼀个会根据环境变化的函数或者对象。像⽣成随机数的对象,每次运⾏时其结果都有可能不能。利⽤这个对象来对常量进⾏初始化的时候,那么结果可能每次创建对象时这个结果都有可能不同。最后这个常量只能够做到在⼀个对象内是恒定不变的,⽽⽆法做到在⼀个应⽤程序内是恒定不变的。另外⼀个⽅法就是将关键字static与关键字final同时使⽤。⼀个被定义为final的对象引⽤或者常量只能够指向唯⼀的⼀个对象,不可以将他再指向其他对象。但是,正如上⾯举的⼀个随机数的例⼦,
对象本⾝的内容的值是可以改变的。为了做到⼀个常量在⼀个应⽤程序内真的不被更改,就需要将常量声明为staitc final的常量。这是什么意思呢?正如上⾯笔者所说的,当执⾏⼀个应⽤程序的时候,可以分为两个步骤,分别为代码装载与对象创建。为了确保在所有情况下(即创建多个对象情况下)应⽤程序还能够得到⼀个相同值的常量,那么就最好告诉编译器,在代码装载的时候就初始化常量的值。然后在后续创建对象的时候,只引⽤这个常量对象的地址,⽽不对其再进⾏再次初始化。就如同Private static final int stInt(10)这种形式来定义常量。如此,在后续多次创建对象后,这个常量int2的值都是相同的。因为在创建对象时,其只是引⽤这个常量,⽽不会对这个常量再次进⾏初始化。
由于加上这个static关键字之后,相当于改变了Java常量定义的作⽤范围。为此程序开发⼈员需要了解⾃⼰的需求,然后选择是否需要使⽤这个关键字。在初始化常量的时候,如果采⽤函数(如系统当前时间)或者对象(如⽣成随机数的对象)来初始化常量,可以预见到在每次初始化这个常量时可能得到不同的值,就需要考虑是否要采⽤这个static关键字。⼀般情况下,如果只需要保证在对象内部采⽤这个常量的话,那么这个关键字就可有可⽆的。但是反过来,如果需要在多个对象中引⽤这个常量,并且需要其值相同,那么就必须要采⽤static这个关键字了。以确保不同对象中都只有⼀个常量的值。或者说,不同对象中引⽤的常量其实指向的是内存中的同⼀块区域。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。