java 创建常量值_从Java到C++——常量值的使用和定义

本文介绍了在Java和C++中如何定义和使用常量,包括常量的定义语法、优点以及在实际编程中的应用场景。在Java中,常量通常用public static final修饰,而在C++中则使用const关键字。对于表示一组相同概念的值,Java中建议使用final常量而非枚举类型,C++则推荐使用枚举类型以提高代码可读性。
摘要由CSDN通过智能技术生成

程序中常常会用到常量值来定义一些相对固定的有实际意义值。比如,你要定义一个扑克牌的类,扑克牌有花色和数字两种属性,然而花色只有红桃(红心)、方块、黑梅、黑桃四种,这时你就可以定义四个常量分别表示这四种花色,这样定义的好处是:每次给花色赋值时只用到常量值的名称就可以,不易出错;如果某一天扑克出现新玩法增加一个花色,只有增加一个常量值就可以,扩展性强;

Java中常量的定义

Java中常量的定义,最常见的就是以下形式:

publicstaticfinalT[CONSTNAME]=[VALUE];

T是数据类型,可以是基本数据类型,也可以是类;CONSTNAME常量的名称,通常用大写表示;VALUE常量值,必须是一个确定的值,或本身是一个编译时确定值的静态变量。这种常量定义方式的优点可通过修饰它的三个关键字进行阐述:

public:声明了这个常量值可以被其它类访问,不仅限于类本身;

static:声明了这个常量值是静态的,可通过定义该常量的类的类名直接进行调用,而不用创建对象;

final:声明了这个常量值一经定义,其值不可以再被改变;

关于常量的这种定义和用法,相信做过Android开发的都会深有体会,Android的R.java文件中定义的各种资源的内部类和ID全都是通过这种方式定义的。当然常量的定义不止上面这一种形式,可以是非public,非static的,这是上面这种形式用的最多。针对文章开头提到的扑克牌问题,Java的定义如下:

/**

* 纸牌

* @author xiaoxu

*

*/

public class Card {

/**

* 红桃(红心)

*/

public static final int HEART = 0;

/**

* 方块

*/

public static final int DIAMOND = 1;

/**

* 黑梅

*/

public static final int BLACKBERRY = 2;

/**

* 黑桃

*/

public static final int SPADE = 3;

/**

* 张牌,随机发四张牌

* @return 返回发牌的数组,如c[0][0]表示第一张牌的数字(大小),c[0][1]表示第一张牌的花色

*/

private int flowerColor;

private int size;

public Card() {

super();

}

public Card(int flowerColor, int size) {

this.flowerColor = flowerColor;

this.size = size;

}

public int getFlowerColor() {

return flowerColor;

}

public void setFlowerColor(int flowerColor) {

this.flowerColor = flowerColor;

}

public int getSize() {

return size;

}

public void setSize(int size) {

this.size = size;

}

}

可能有些人会认为红牌的花色是一组相同概念的值,为什么不定义枚举类型。在C++中你可以定义成枚举类型,因为C++中枚举类型的枚举成员都是常量值;但在Java中,枚举其实是一个类类型,采用枚举类型反而效率不高,且使用不太方便,可参考《从Java到C++——枚举类型的使用》。在C++中,只要表示一组相同概念的常量,都可以而且应该用枚举类型,使代码可读性高;在Java中,能用final常量表示的都不建议用枚举类型,除非一些会使代码很难理解不得不用的地方。

C++中常量的定义

C++中常量的定义用const,类似于Java的final。const的定义形式如下:

constT[CONSTNAME]=[VALUE];

T是数据类型,可以是基本数据类型,也可以是类;CONSTNAME常量的名称,const对象CONSTNAME一旦创建就不可以再改变;VALUE常量值,可以是具体的值,也可以常量表达式。

class T{

public:

T():i(0){};

int i;

};

int getValue()

{

return 12;

}

void PointerTest()

{

T t;

const T CONSTNAME = t;//用T类型的常量对象

int value = 5;

const int MIN = value;//可用非常量值变量对const对象进行初始化

const int MAX = 10;//可以用数值直接进行初始化

int max = MIN;//也可以用常量值给非const变量赋值

const int CONST_VALUE = getValue();//用常量表达式对const变量进行进行初始化

cout << t.i << endl;

cout << MIN << endl;

cout << MAX << endl;

cout << CONST_VALUE << endl;

}

const常量在类中的定义和使用:

class Card

{

public :

/**

* 红桃(红心)

*/

static const int HEART = 0;

/**

* 方块

*/

static const int DIAMOND = 1;

/**

* 黑梅

*/

static const int BLACKBERRY = 2;

/**

* 黑桃

*/

static const int SPADE = 3;

/************************************************************************/

/*定义其它的内容

/************************************************************************/

};

int main()

{

cout << Card::BLACKBERRY << endl;

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值