`

Java常量定义需要注意的两点

    博客分类:
  • java
 
阅读更多
本文向您介绍Java常量定义,在Java语言中,主要是利用final关键字来进行Java常量定义。在定义final的数据不论是常量、对象引用还是数组,在主函数中都不可以改变。

在任何开发语言中,都需要定义常量。在Java开发语言平台中也不例外。不过在Java常量定义的时候,跟其他语言有所不同。其有自己的特色。在这篇文章中,主要针对Java语言中定义常量的注意事项进行解析,帮助各位程序开发人员更好的掌握常量的定义与管理工作。

package com.test;

import java.util.Random;

public class Test {

public static final int i=0;
public static final StringBuffer sb=new StringBuffer();
public final int k;
public final int r=(new Random()).nextInt(10);
public Test(){
k=3;
}
public Test(int j){
k=j;
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Test t = new Test(2);
System.out.println(t.k);//2
System.out.println(t.r);//unknown

Test tt = new Test(4);
System.out.println(tt.k);//4
System.out.println(tt.r);//unknown

System.out.println(sb.toString());//""
sb.append("a");
System.out.println(sb.toString());//a
}


}


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

在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这个关键字了。以确保不同对象中都只有一个常量的值。或者说,不同对象中引用的常量其实指向的是内存中的同一块区
分享到:
评论

相关推荐

    议Java语言中常量定义的注意事项.pdf

    在Java中定义常量时,有几点需要注意: 1. 使用`final`关键字:`final`关键字用于声明常量,一旦赋值后,不能再修改。常量必须在声明时进行初始化,这是与其他变量的区别。尝试在后续代码中改变常量的值会导致编译...

    Java常量池知识点总结

    Java常量池是Java编程语言中的一个重要概念,它涉及到JVM(Java虚拟机)的内存管理,特别是关于字符串和类的加载。常量池在Java中分为两种形态:静态常量池和运行时常量池。 静态常量池是存在于`.class`文件中的,...

    java 球面两点距离 java球面两点距离

    在Java编程中,计算球面上两点之间的距离是一个常见的地理计算问题,特别是在处理GPS坐标或者其他涉及地理位置的应用中。这个任务通常涉及到地球的经纬度坐标系统,因为这是全球定位系统(GPS)所采用的标准坐标体系...

    java 编程规范需注意的内容

    ### Java编程规范需注意的内容 Java作为一种广泛使用的编程语言,在软件开发过程中,遵循一定的编程规范不仅有助于提高代码的可读性和可维护性,还能增强团队协作效率。以下是从标题、描述及部分内容中提取的关键...

    一种基于Spring的java程序常量管理思路

    在Java中,我们通常使用`public static final`修饰的变量来定义常量,这样的变量在编译时就被初始化并存储在方法区,其值在整个运行期间不可更改。然而,当常量数量增多时,管理这些常量就变得复杂。Spring框架为此...

    java核心知识点整理

    注意:常量定义于main方法的外边,而且必须有关键字 static final; 6.字符串的子串: String str = hello”“; String str1 = str.substring(0,4); //输出hell 7.不要用==运算符来测试两个字符串是否相等,该...

    Java 一些值得注意的细节

    Java编程语言以其强大的跨平台能力和丰富的库而广受开发者...以上就是Java编程中一些值得注意的细节,熟练掌握这些知识点,能够让你的Java代码更加健壮、高效。在实践中不断学习和总结,你会成为更优秀的Java开发者。

    java代码-例子2-1 定义并输出常量和变量

    在Java编程语言中,常量和变量是两个基础且至关重要的概念。它们是程序中存储数据的容器,理解和正确使用它们对于编写任何Java程序都至关重要。 首先,让我们深入理解常量。在Java中,常量是指其值在程序运行过程中...

    Java小知识点

    Java 小知识点 Java 是一门面向对象的程序设计语言,作为一种静态类型的语言,它具有一些独特的特性和规则。下面是 Java 中的一些小知识点,希望对您有所帮助。 局部变量与成员变量的区别 局部变量定义在方法体中...

    java 创建字符串类

    Java提供了两种主要的方式来创建字符串:通过`String`类的构造方法和使用`StringBuilder`或`StringBuffer`类。以下是对这些知识点的详细解释: 1. **String类**: - **不可变性**:Java中的`String`对象是不可变的...

    java安装教程

    * 着重表示的常量:在编写Java程序时,需要注意常量的使用,使用着重表示的常量来提高代码的可读性。 三、类、对象、接口编程练习 * 类的定义:在Java中,类是对象的模板,定义了对象的属性和行为。 * 对象的创建...

    03Java类定义.pdf

    5. 条件逻辑:在`setEngineType`和`setBodyType`方法中包含了条件判断逻辑,确保只有当传入的值符合枚举常量定义的范围时,属性才会被修改。 接下来,`CarTest`类是用来测试`CarObject`类的功能的。在`CarTest`类的...

    java代码-定义并输出常量和变量

    在Java编程语言中,常量和变量是两个基础且重要的概念。它们被用来存储和处理数据,是程序逻辑的基础组成部分。下面将详细讲解这两个概念及其使用方法。 首先,我们来看常量。常量,顾名思义,是其值不能改变的量。...

    java知识点总结

    Java知识点总结 1. 前言 Java作为一种广泛使用的编程语言,因其平台无关性、安全性和稳定性而受到青睐。...以上是对Core Java部分关键知识点的概览,学习Java需要深入理解并实践这些概念,才能成为熟练的Java开发者。

    Java复习题-(含答案)教程文件.pdf

    18. Java 常量:定义常量时需要用到的关键字是 final。 知识点:Java 常量、final 关键字 19. Java 垃圾回收:关于对象删除,下列说法正确的是 Java 把没有引用的对象作为垃圾收集起来一并释放。 知识点:Java ...

    java详细知识点总结.doc

    变量的定义需要指定数据类型、名称和初始值。变量的作用域始于定义位置,止于所在的大括号结束处,其生命周期从定义开始,到作用域结束时消失。 5. **数据类型**:包括基本数据类型(byte、short、int、long、float...

    Java实现局域网内两点文件传输

    ### Java实现局域网内两点文件传输 #### 实现原理及步骤详解 本文将详细介绍如何使用Java编程语言实现局域网内的两点文件传输,并在接收端自动调用虚拟打印机接口来打印PDF文件的功能。该解决方案主要包括以下几个...

    java多态的实现

    在实际编程中,我们需要注意以下几点: 1. 多态的使用应基于抽象,而不是具体的实现。抽象类或者接口是多态的基础,它们定义了共性的行为。 2. 在使用多态时,要避免出现空指针异常(NullPointerException)。因为...

    java点滴学习资料

    Java支持8种基本数据类型,分为四类整数类型、两类浮点数类型、字符类型`char`以及布尔类型`boolean`。 变量声明和初始化是Java编程的基础,可以通过以下方式初始化变量: ```java int intVar; // 声明变量 intVar...

Global site tag (gtag.js) - Google Analytics