`
- 浏览:
3420 次
- 性别:
- 来自:
合肥
-
在任何开发语言中,都需要定义常量。在Java开发语言平台中也不例外。不过在Java常量定义的时候,跟其他语言有所不同。其有自己的特色。在这篇文章中,主要针对Java语言中定义常量的注意事项进行解析,帮助各位程序开发人员更好的掌握常量的定义与管理工作。
一、常量定义的基本注意事项
在Java语言中,主要是利用final关键字(在Java类中灵活使用Static关键字)来进行Java常量定义。当常量被设定后,一般情况下就不允许再进行更改。如可以利用如下的形式来定义一个常量:final double PI=3.1315。在定义这个常量时,需要注意如下内容:
一是Java常量定义的时候,就需要对常量进行初始化。也就是说,必须要在常量声明时对其进行初始化。都跟局部变量或者成员变量不同。当在常量定义的时候初始化过后,在应用程序中就无法再次对这个常量进行赋值。如果强行赋值的话,数据库会跳出错误信息,并拒绝接受这一个新的值。
二是final关键字使用的范围。这个final关键字不仅可以用来修饰基本数据类型的常量,还可以用来修饰对象的引用或者方法。如数组就是一个对象引用。为此可以使用final关键字来定义一个常量的数组。这就是Java语言中一个很大的特色。一旦一个数组对象被final关键字设置为常量数组之后,它只能够恒定的指向一个数组对象,无法将其改变指向另外一个对象,也无法更改数组(有序数组的插入方法可使用的二分查找算法)中的值。
三是需要注意常量的命名规则。不同的语言,在定义变量或者常量的时候,都有自己一套编码规则。这主要是为了提高代码的共享程度与提高代码的易读性。在Java常量定义的时候,也有自己的一套规则。如在给常量取名的时候,一般都用大写字符。在Java语言中,大小写字符是敏感的。之所以采用大写字符,主要是跟变量进行区分。虽然说给常量取名时采用小写字符,也不会有语法上的错误。但是,为了在编写代码时能够一目了然的判断变量与常量,最好还是能够将常量设置为大写字符。另外,在常量中,往往通过下划线来分隔不同的字符。而不想对象名或者类名那样,通过首字符大写的方式来进行分隔。这些规则虽然不是强制性的规则,但是为了提高代码友好性,方便开发团队中的其他成员阅读,这些规则还是需要遵守的。没有规矩,不成方圆。
总之,Java开发人员需要注意,被定义为final的常量需要采用大写字母命名,并且中间最好使用下划线作为分隔符来进行连接多个单词。在定义final的数据不论是常量、对象引用还是数组,在主函数中都不可以改变。否则的话,会被编辑器拒绝并提示错误信息。
二、Final关键字与static关键字同时使用
由于Javal是面向对象的语言,所以在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的Java常量定义并不是恒定不变的。因为默认情况下,定义的常量是在对象建立的时候被初始化。如果在建立常量时,直接赋一个固定的值,而不是通过其他对象或者函数来赋值,那么这个常量的值就是恒定不变的,即在多个对象中值也使相同的。但是如果在给常量赋值的时候,采用的是一些函数或者对象(如生成随机数的Random对象),那么每次建立对象时其给常量的初始化值就有可能不同。这往往是程序开发人员不原意看到的。有时候程序开发人员希望建立再多的对象,其在多个对象中引用常量的值都是相同的。
要是现这个需求的话,有两个方法。一是在给常量赋值的时候,直接赋予一个固定的值,如abcd等等。而不是一个会根据环境变化的函数或者对象。像生成随机数的对象,每次运行时其结果都有可能不能。利用这个对象来对常量进行初始化的时候,那么结果可能每次创建对象时这个结果都有可能不同。最后这个常量只能够做到在一个对象内是恒定不变的,而无法做到在一个应用程序内是恒定不变的。另外一个方法就是将关键字static与关键字final同时使用。一个被定义为final的对象引用或者常量只能够指向唯一的一个对象,不可以将他再指向其他对象。但是,正如上面举的一个随机数的例子,对象本身的内容的值是可以改变的。为了做到一个常量在一个应用程序内真的不被更改,就需要将常量声明为staitc final的常量。这是什么意思呢?正如上面笔者所说的,当执行一个应用程序的时候,可以分为两个步骤,分别为代码装载与对象创建。为了确保在所有情况下(即创建多个对象情况下)应用程序还能够得到一个相同值的常量,那么就最好告诉编译器,在代码装载的时候就初始化常量的值。然后在后续创建对象的时候,只引用这个常量对象的地址,而不对其再进行再次初始化。就如同Private static final int int2=rd1.nestInt(10)这种形式来定义常量。如此,在后续多次创建对象后,这个常量int2的值都是相同的。因为在创建对象时,其只是引用这个常量,而不会对这个常量再次进行初始化。
由于加上这个static关键字之后,相当于改变了Java常量定义的作用范围。为此程序开发人员需要了解自己的需求,然后选择是否需要使用这个关键字。在初始化常量的时候,如果采用函数(如系统当前时间)或者对象(如生成随机数的对象)来初始化常量,可以预见到在每次初始化这个常量时可能得到不同的值,就需要考虑是否要采用这个static关键字。一般情况下,如果只需要保证在对象内部采用这个常量的话,那么这个关键字就可有可无的。但是反过来,如果需要在多个对象中引用这个常量,并且需要其值相同,那么就必须要采用static这个关键字了。以确保不同对象中都只有一个常量的值。或者说,不同对象中引用的常量其实指向的是内存中的同一块区域。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Java常量的应用广泛且灵活。例如,在数学计算中,使用final常量来存储数学常数;在配置文件中,用final常量表示配置项,方便管理和修改;在设计模式中,枚举常量可以用于表示策略或状态;在单元测试中,注解常量可以...
在Java编程中,常量管理是一项重要的任务,尤其是在大型项目中。Spring框架作为一个广泛应用的Java企业级应用开发框架,提供了一系列工具...在实际项目中,应结合具体需求灵活运用这些方法,以达到最佳的常量管理效果。
"面向对象的应用用于灵活应用的各个场景笔记总结" 本文主要讨论了面向对象的应用在 Java 中的使用,通过分析 Java 中的面向对象编程,建立了超级丰富的模型和心得,总结了面向对象编程的知识点,并讨论了如何将这些...
在C和C++编程语言中,`static`和`const`是两个非常重要的关键字,它们在不同的上下文中有各自的用途和含义。这篇文章将深入探讨这两个关键字,并分享一些专家的见解。 首先,`static`关键字在C和C++中的主要作用有...
- 使用`static`时要注意避免在静态上下文中使用非静态资源,因为此时非静态资源可能尚未初始化。 - 静态方法只能访问静态变量和调用静态方法。 综上所述,`final`和`static`关键字在Java编程中有着非常重要的作用...
本文将详细探讨多态、static和final在Java中的应用和重要性。 ### 多态:灵活性与扩展性的关键 多态,源自希腊语poly(多)和morph(形态),意味着同一接口或类名可以有多种不同的实现方式。在Java中,多态主要...
在Struts2中,常量配置是非常关键的一环,它们控制着框架的行为和性能,通过在struts.xml文件中定义,可以灵活地调整框架的默认行为以适应不同的应用需求。 ### Struts2常量的具体用法实例 #### 1. struts.i18n....
不同类型的存储区域在性能上有所差异: - **堆栈**:分配速度快,但空间有限; - **自由存储区**:提供更大的灵活性,但分配速度较慢; - **全局静态存储区**:在整个程序运行期间存在,初始化后不会改变; - **...
在深入探讨Struts2常量配置的细节之前,我们首先简要回顾一下Struts2框架。Struts2是一个基于MVC设计模式的Java Web应用程序框架,它提供了丰富的功能,如表单验证、国际化支持、拦截器等,使得开发人员能够构建高效...
Java中的`static`、`this`、`super`和`final`是四个非常重要的关键字,它们在编程中扮演着至关重要的角色。这篇文章将简要介绍这些关键字的基本用法及其应用场景。 1. **static** `static`关键字用于声明类级别的...
本教程将深入探讨`static`关键字的各个方面,以便你更好地理解和应用它。 首先,`static`关键字主要用于声明类级别的变量和方法,这些成员不依赖于类的实例,而是直接与类相关联。这意味着它们是共享的,所有该类的...
在Java编程语言中,继承、多态、接口、常量以及代码块是核心概念,它们构建了面向对象编程的基础。让我们逐一深入理解这些知识点。...在实际编程中,要结合具体情况灵活应用这些概念,以满足软件开发的需求。
总结起来,`static`关键字在Java中用于创建类级别的变量和方法,允许在不创建对象的情况下访问和操作它们,从而提高代码的效率和灵活性。理解和正确使用`static`关键字是编写高效、可维护的Java代码的关键。
Struts2是一个基于MVC设计模式的开源Java Web框架,它极大地简化了Web应用程序的开发流程,并提供了丰富的插件支持和灵活的配置选项。本文将重点介绍Struts2中常用的配置常量,这些常量在项目的初始化配置文件(通常...
- **常量定义**:定义一些不变的值作为常量,如数学常数π,可以通过`static final`来声明。 #### 六、Static的注意事项 - 使用`static`关键字时需要注意以下几点: - 过度使用静态成员可能会导致代码难以维护和...
了解这些基本概念后,开发者可以在实际项目中灵活运用类常量,以提升代码的结构和可复用性。结合其他面向对象特性,如继承、封装和多态,可以构建出高效、模块化的PHP应用程序。在编写代码时,确保正确使用类常量,...
在C语言中,`extern`、`static` 和 `const` 是三个非常重要的关键字,它们在定义变量时起到不同的作用。本文将深入探讨这三个关键字分别在定义全局变量和局部变量时的不同用法及其效果。 #### 二、全局变量的修饰 ...
开发者可以定义一个方法,在父类中使用static来调用,这样子类继承并重写该方法时,使用static的调用仍然指向子类,从而实现灵活的动态方法绑定。 5. 静态绑定的限制:虽然static关键字提供了便利,但它仅适用于...
例如,你可以定义`__PUBLIC__`来指向公共静态资源目录,这样在模板中引用资源时更加灵活。 ```php return [ 'view_replace_str' => [ '__PUBLIC__'=>'../public/static/admin', '__ROOT__' => '/', '__APP__' ...