java final 使用_在java中使用final

本文探讨了在Java中如何使用final和private关键字来实现属性的只读特性。final字段一旦在构造函数中初始化后就无法改变,而私有变量可以通过getter方法提供对外访问,但不允许外部直接修改。文章提供了示例代码,解释了何时使用final和private,并给出了使用场景,如用户注册时间和自动售货机库存管理。同时,提到了public static final常量的使用规范。
摘要由CSDN通过智能技术生成

我想知道它们之间有什么区别

public final type attribute_name;

private type attribute_name;

public type getA_name() {

return attribute_name;

}

基本上我想将属性设置为只读,因此在初始化后它不能改变.

我是公开最终的,还是将其设为私有,并且只能通过get方法访问它(没有set方法)?

解决方法:

必须在构造函数退出之前设置最终字段.设置后,无法修改引用(无法重新分配值).强调不能重新分配.这意味着虽然引用不能更改,但值本身可以更改.

这是合法的:

final List list = new List();

list.add(5); // the value of list changes, but the reference doesn't

这不是:

final List list = new List();

list = new List(); // may seem sort of redundant but the compiler won't allow it nonetheless

具有唯一getter的私有变量可以由保存它的类在内部重新分配(但它在外部不可见,因此不能在持有它的类之外重新分配).此外,在类之外,引用是不可访问的,因此除了持有它的类之外,不能修改变量.

最终变量不能在任何地方重新分配,但如果它是公共的,则另一个类仍然可以访问引用并更改它指向的任何对象的值.

如果您不希望在初始化之后重新分配变量,请使用final和private.

使用final来做这样的事情:

public class User {

private final long registrationTimeMillis;

public User(/* various parameters probably would be here */) {

registrationTimeMillis = System.currentTimeMillis();

}

public long getRegistrationTimeMillis() {

return registrationTimeMillis;

}

}

我们不希望用户的注册时间会发生变化,所以在构建之后不允许它更改是有意义的.

对于像这样的事情,使用private而不使用setter:

public class VendingController() {

private int drinksStocked = 0;

private int drinksDispensed = 0;

public void dispenseDrink() {

drinksDispensed++;

}

public void stockDrinks(int numberOfDrinks) {

drinksStocked = getDrinksRemaining() + numberOfDrinks;

drinksDispensed = 0;

}

public int getDrinksRemaining() {

return drinksStocked - drinksDispensed;

}

}

除非调用allocateseDrink()或stockDrinks(int numberOfDrinks),否则我们不希望drinkDispensed的值发生变化.当自动售货机重新装满时,它仍然需要能够由自己的班级重新分配,所以我们不应该让它最终

关于使用public final,通常在Java中只对常量执行,并且还包括static关键字,因为常量不应该依赖于实例.

使用public static final时有意义的一个例子

public class UnitConversions {

public static final double CENTIMETERS_PER_INCH = 2.54;

}

然后可以将其用于如下方法中

public double convertFromCentimetersToInches(double centimeters) {

return centimeters / UnitConversions.CENTIMETERS_PER_INCH;

}

祝你好运OP和快乐的编码.

标签:java,final

来源: https://codeday.me/bug/20190728/1560639.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值