final在java中的使用
我想知道他们之间有什么区别final在java中的使用,java,final,Java,Final,我想知道他们之间有什么区别 public final type attribute_name; 及 基本上,我想将属性设置为只读,这样在初始化后它就不能更改了。 我是将其设置为“公共最终版”,还是将其设置为“私有版”,并且仅通过get方法(没有设置方法)使其可访问?在构造函数退出之前,必须设置一个最终版字段。设置后,无法修改引用(无法重新分配值)。不能重新分配对的强调。这意味着,虽然引用不能更改,值本身可以更改 这是合法的: final List<Integer> list = n
public final type attribute_name;
及
基本上,我想将属性设置为只读,这样在初始化后它就不能更改了。我是将其设置为“公共最终版”,还是将其设置为“私有版”,并且仅通过get方法(没有设置方法)使其可访问?在构造函数退出之前,必须设置一个
最终版
字段。设置后,无法修改引用(无法重新分配值)。不能重新分配对的强调。这意味着,虽然引用不能更改,值本身可以更改
这是合法的:
final List<Integer> list = new List<Integer>();
list.add(5); // the value of list changes, but the reference doesn't
我们不期望用户的注册时间会改变,所以在构建之后不允许它改变是有意义的
使用不带setter的
private
进行如下操作:
public class User {
private final long registrationTimeMillis;
public User(/* various parameters probably would be here */) {
registrationTimeMillis = System.currentTimeMillis();
}
public long getRegistrationTimeMillis() {
return registrationTimeMillis;
}
}
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;
}
}
我们不希望dispensed
的值发生更改,除非调用dispenseDrink()
或stockDrinks(int numberOfDrinks)
。当自动售货机重新加满时,它仍然需要能够被它自己的类重新分配,所以我们不应该让它成为final
public class UnitConversions {
public static final double CENTIMETERS_PER_INCH = 2.54;
}
关于使用
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;
}
祝你好运和快乐的编码
当它不是
final
而是private
时,类本身可以更改值。final修饰符只允许一个字段被指定一次-之后不能更改,并且必须在对象构造期间(即在构造函数返回之前)将其设置为
如果希望将字段设置为只读,请使用信息隐藏的原则:将其设置为私有,并提供一个公共getter来返回字段(或为非基本类型提供字段的副本)
您应该仅对真常量使用
public final
。即使您的字段由于final
而不可更改,通常最好还是将其设置为private
正确的方法是在将来思考。什么能帮助你实现你的目标?也许以后你还想给这个变量一个值。如果我是你,我会创建一个get方法并保持变量私有
final
关键字:的完整文档取决于您希望从何处访问它。公共变量可以从项目和包中的任何类访问,而私有变量只能从变量所在的类访问
“final”运算符使其永久且只读。我们假设
类型是对对象的引用,而不是基元类型
public final type attribute\u name
意味着不能将attribute\u name
重新分配以引用其他内容。但是attribute\u name
可以用来调用更改其状态的方法
在private-type-attribute\u-name
中,只有类中的方法才能调用attribute\u-name
上的方法
所以,如果您希望它保持不变,请使用方法(2)。将public
方法限制为那些最终调用attribute\u name
上不修改其状态的方法。这取决于一些因素
如果这是一个以前已知且永远不会改变的实常数,则使用final
。在Java中,final
字段也可以在构造函数中初始化,因此如果在构造时知道您的值,那么您也可以使用final
如果在运行时设置了此值(一次或多次),则使用private
+getter
问题在于字段,而不是方法。这并不能回答OP的问题。问题更重要的是,使用get方法将其设置为公共最终或私有之间有什么区别。String
可能是一个误导性的例子,因为它是不可变的。重点是引用不能重新分配,但足够公平。我改变了那个例子,使用了一个long
在我之前刚刚到达那里;)重要的是OP不必在private
和getter之间进行选择,而是两者都要使用。
public double convertFromCentimetersToInches(double centimeters) {
return centimeters / UnitConversions.CENTIMETERS_PER_INCH;
}