我是Java的新手,我来自C ++背景。
我认为Java中的final
就像C ++中的const
一样,但我猜不是。
在C ++中以const
身份启动的对象,只能调用const
方法,不能更改对象中的字段。
但是在下面的代码中,我可以在pet
中分配值。即pet.id = new ObjectId(newPetId);
。
private void addPet() {
progressBar.setVisibility(View.VISIBLE);
final Pet pet;
try {
// Locally add and save pet.
pet = getPetFromUserInput();
} catch (InvalidInputException e) {
progressBar.setVisibility(View.GONE);
return;
}
pet.id = new ObjectId(); // Modify field member directly.
pet.updateName("MyPet"); // Call non-final method.
}
答案 0 :(得分:3)
在评论中引用Erik的答案,我找到了对C ++程序员的简单解释。
Java中的 Pet pet;
与C ++中的Pet* pet;
类似。
final Pet pet;
与C ++中的Pet * const pet;
类似,它使指针const
而不是值本身。
请注意,Java和C ++之间存在细微差别。
在C ++中,你必须在声明一个const
变量时分配一个值,但是在Java中,它允许你稍后但只能执行一次。
答案 1 :(得分:0)
在Java中,关键字“final”只是意味着一旦初始化,就无法更改变量的值。 例如,
final int x = 0;`
//You can't do this!!!
int x=5
它与该变量调用方法无关。
答案 2 :(得分:0)
在java中,“final”表示这个
1.如果你在课前使用“final”,那就意味着没有机会为该课程创建子类。
public final class Person {
void getName() {
}
}
然后你不能这样创造。
public class Man extends Person{
}
"The type Man cannot subclass the final class Person" will be shown
如果您在方法之前写下“final”,那么
public class Person {
final void getName() {
}
}
然后你可以为这个Person类创建子类,但你不能覆盖子类中的getName()。
public class Man extends Person{
@Override
void getName() {
// TODO Auto-generated method stub
super.getName();
}
}
"Cannot override the final method from Person" will be shown.
exammple:
public class Person {
public final String name;
void getName() {
}
}
然后在子类中,您无法修改该值。
public class Man extends Person{
public void getName() {
name = "child";
}
}
"The final field Person.name cannot be assigned" will be shown
所有这些都将在编译时自行显示。
希望这会对你有所帮助。