首页 课程 师资 教程 报名

Java常量定义方法

  • 2022-04-01 10:24:20
  • 1203次 动力节点

围绕Java常量这个话题似乎有很多困惑。有些人使用整数或字符串来定义常量,而另一些人则使用枚举。

在本文中,我们将了解在 Java 中存储常量的两种最常见的策略: 整数和枚举。

首先,当您决定使用常量时,您应该非常确定常量不会随着时间而改变,这样您就可以避免重新编译。

在本文中,我们将使用一个非常常见的常量候选者——工作日!

假设我们有一个类表示在线商店中的订单,我们希望在其中跟踪订单发生在一周中的哪一天。

我们的类看起来像这样:

公共 类 订单{
    私人[数据类型] weekDay ;
    公共[数据类型] getWeekDay () {
        返回 工作日;
    }
    公共 无效 setWeekDay ([数据类型] weekDay ) {
        这个。星期天 = 星期天;
    }
}

请注意,该类暂时不会编译 - [datatype] 只是我们将使用的常量类型的占位符。

用整数定义常量

在 Java 中定义常量的最常见方法之一是通过整数,其中整数变量是静态的。

公共 静态 int 星期一 =  0 ;
公共 静态 int 星期二 =  1 ;
公共 静态 int 星期三 =  2 ;
公共 静态 int 星期四 =  3 ;
公共 静态 int  FRIDAY  =  4 ;
公共 静态 int 星期六 =  5 ;
公共 静态 int  SUNDAY  =  6 ;

定义整数常量时要问的第一个问题是放置它们的位置。我们是否将它们直接放在课堂上?还是我们给他们自己的课? Order

由于日子非常普遍,而且不一定只与 type 的对象相关 Order,我们将在它们自己的 class 中定义它们。 WeekDay

公共 课 工作日{
    私人 工作日(){}
​​​    公共 静态 int 星期一 =  0 ;
    公共 静态 int 星期二 =  1 ;
    公共 静态 int 星期三 =  2 ;
    公共 静态 int 星期四 =  3 ;
    公共 静态 int  FRIDAY  =  4 ;
    公共 静态 int 星期六 =  5 ;
    公共 静态 int  SUNDAY  =  6 ;
}

您可能注意到了私有构造函数——这是为了避免客户端实例化该类。该类仅包含与对象无关的静态变量,因此无需实例化该类。

现在,每当我们需要为订单设置特定日期时,我们都会这样做:

订单 order  =  new  Order ();
订购。setWeekDay ( WeekDay . MONDAY );

而当我们想检查订单是否发生在星期五时,我们可以简单地调用 write:

if(order.getWeekDay() == WeekDay.FRIDAY)

到目前为止,一切都很好。这样的设计肯定不会有问题吧?

好吧,让我们假设您在一年后回到此代码 - 您必须检查订单是否发生在星期一。

哦,当然——你已经完全忘记了 WeekDay 课程......

在这种情况下,你可以尝试这样的事情:

if(order.getWeekDay() == 1)

在那一刻,完全忘记了 WeekDay 类,这段代码非常有意义。星期一是一周的第一天,所以工作日应该是 1,对吧?

但是不,不是,因为静态 int 变量 Monday在我们的 类中被定义为0WeekDay !

这是一个很好的例子,说明了为什么您应该考虑避免 使用整数常量。它们容易出错、令人困惑且难以调试。

用枚举定义常量

在 Java 中定义常量的另一种方法是使用enums。

使用枚举时,我们的常量类将如下所示:

公共 枚举 WeekDay {
    星期一,
    星期二,
    星期三,
    星期四,
    星期五,
    星期六,
    星期日
}

注意没有私有构造函数——程序员(你!)不需要强制类是不可实例化的,因为默认情况下枚举是不可实例化的!

将 a 设置为顺序的语法 WeekDay 与整数常量完全相同:

order.setWeekDay(WeekDay.MONDAY);

我们如何处理订单是否在星期五处理也没有区别:

if(order.getWeekDay() == WeekDay.FRIDAY)

但是,主要区别在于这是您可以设置和比较 Order 类中 weekday 变量值的唯一方法。

两者 order.setWeekDay(1); 和 if(order.getWeekDay() == 1) 都会使编译器抛出一个错误,因为你试图使用整数类型的变量,而它们应该是! WeekDay

使用Java枚举,这不再是问题。如果您尝试使用整数而不是 WeekDay 枚举成员,编译器将简单地抛出一个错误,告诉您需要使用 WeekDay 枚举。

换句话说,唯一能帮助您检查订单是否发生在星期五的是:

if(order.getWeekDay == WeekDay.FRIDAY)

没有比这更清楚的了!

您不再需要记住常量类,并且如果有任何客户使用您的代码,他们不必怀疑星期一实际上是由 0 还是 1 表示的。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交