Java中的最后一个变量在什么时候不再被修改?
以这段代码为例:Java中的最后一个变量在什么时候不再被修改?,java,initialization,variable-assignment,final,Java,Initialization,Variable Assignment,Final,以这段代码为例: private final House house; public static void main(String[] args) { house = new House("Robinsons"); house.setColor("Red"); } 这是对最终变量的有效使用吗?一旦在技术上对其进行了初始化,但仍在构造函数中进行修改,则修改该变量是否合法?final对于变量,意味着在首次分配该变量后,无法重新分配该变量 假设您的代码已编译,则 house =
private final House house;
public static void main(String[] args)
{
house = new House("Robinsons");
house.setColor("Red");
}
这是对最终变量的有效使用吗?一旦在技术上对其进行了初始化,但仍在构造函数中进行修改,则修改该变量是否合法?
final
对于变量,意味着在首次分配该变量后,无法重新分配该变量
假设您的代码已编译,则
house = new House("Robinsons");
是一项任务,因此将首次分配house
这个
是一种不影响变量
house
的方法调用。它影响变量house
引用的对象 我想你遗漏了一些,这是完整的代码吗
public class House {
private final House house;
public static void main(String[] args)
{
house = new House("Robinsons");
house.setColor("Red");
}
public House(String houseName) {
// do something
}
public void setColor(String color) {
// do something
}
}
如果是这样的话,这会有很多问题
main
方法内部访问它,或者将House
设置为静态变量,我不建议这样做。或者在使用前在main
方法中声明一个实例final
变量赋值
目前来看,这不是final
的有效用法;默认的无参数构造函数无法在其构造期间为其赋值
更合适的用法是:
public class PersonsHome {
private final House house;
public PersonsHome(String houseName) {
house = new House(housename);
}
}
房屋
在施工结束时明确分配1,因此满足了最终
合同
1:我提到了默认的无参数构造函数;这只是创建的请将该代码放入IDE或
.java
文件中并尝试编译它…非静态变量不能从静态上下文中引用
,因此在代码中的任何一点上,对最终变量的那种操作都是有效的?@SaxSalute如果所指的操作类型是方法调用或字段访问,然后是的,只要变量在代码中的该点被明确初始化。@SAXSALLETE final意味着您不能将变量重新分配给新对象,但如果方法或字段访问在您的上下文中可见,您可以调用它们。final变量需要在声明时立即给定一个值。从技术上讲,这对于Java1.0是正确的。由于Java 1.1可以使用空白的最终变量,请参见
public class PersonsHome {
private final House house;
public PersonsHome(String houseName) {
house = new House(housename);
}
}