更新时间:2022-04-01 10:24:20 来源:极悦 浏览1335次
围绕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 表示的。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习