JavaDay12——final关键字
程序员文章站
2022-06-07 16:08:02
...
final关键字注意事项:
1.final修饰的类无法被继承
2.final修饰的方法无法被覆盖(但仍然能正常被调用)
3.final修饰的变量只能赋值一次。(包括引用变量)
4.final修饰的引用一旦指向某个对象,则不能再重新指向其他对象,但该对象内部的数据依然可以修改
5.final修饰的实例变量必须手动初始化,不可用系统默认值(简称:sun公司不背锅!)
6.final修饰的实例变量一般和static联用,称为常量
1.final修饰的类无法被继承
执行结果:
程序:
public class FinalTest {
public static void main(String[] args) {
System.out.println("main方法开始执行");
}
}
//1.final修饰的类无法被继承
final class FinalA{
int x=24;
}
//java: 无法从最终FinalA进行继承
class FinalB extends FinalA
{
int y=25;
}
2.final修饰的方法无法被覆盖(但仍然能正常被调用)
执行结果:
程序:
public class FinalTest {
public static void main(String[] args) {
System.out.println("main方法开始执行");
}
}
//2.final修饰的方法无法被覆盖(但仍然能正常被调用)
class FinalC{
public final void doSome(){
System.out.println("输出CCCCCC");
}
}
//java: FinalD中的doSome()无法覆盖FinalC中的doSome()
// 被覆盖的方法为final
class FinalD extends FinalC
{
public void doSome(){
System.out.println("输出DDDDDD");//方法覆盖
}
}
3.final修饰的变量只能赋值一次。(包括引用变量)
执行结果:
程序:
public class FinalTest {
public static void main(String[] args) {
System.out.println("main方法开始执行");
}
}
class FinalE{
final int c1=10;//首次赋值
public FinalE() {
this.c1=20; //java: 无法为最终变量c1分配值
}
}
4.final修饰的引用一旦指向某个对象,则不能再重新指向其他对象,但该对象内部的数据依然可以修改
执行结果:
程序:
public class FinalTest {
public static void main(String[] args) {
System.out.println("main方法开始执行");
final FinalF u=new FinalF(5);//首次为u变量赋值,该值是User对象在堆内存中的地址
u=new FinalF(); //错误:java: 无法为最终变量u分配值
System.out.println(u.x);//输出:5
/*执行这一段要注释掉上一行*/
/*下面两句证明:final修饰的引用,对象内部的数据依然可以修改*/
//u.x=10; //即使u被final修饰,仍可为引用u中的x重新赋值
//System.out.println(u.x);//输出:10,(x被修改成功)
}
}
//4.final修饰的引用一旦指向某个对象,则不能再重新指向其他对象,但该对象内部的数据依然可以修改
class FinalF{
int x;
public FinalF(){
}
public FinalF(int x){
this.x=x;
}
}
5.final修饰的实例变量必须手动初始化,不可用系统默认值(简称:sun公司不背锅!)
执行结果:
程序:
public class FinalTest {
public static void main(String[] args) {
System.out.println("main方法开始执行");
}
}
//5.final修饰的实例变量必须手动初始化,不可用系统默认值(简称:sun公司不背锅!)
class FinalF{
int x;
//被final修饰的y必须手动赋值
final int y;//错误:java: 可能尚未初始化变量y
public FinalF(){
}
public FinalF(int x){
this.x=x;
}
}
6.final修饰的实例变量一般和static联用,称为常量
执行结果:
程序:
public class FinalTest {
public static void main(String[] args) {
System.out.println("main方法开始执行");
FinalF u=new FinalF(5);//首次为u变量赋值,该值是User对象在堆内存中的地址
System.out.println(u.PI);//输出常量PI,
}
}
//6.final修饰的实例变量一般和static联用,称为常量
class FinalF{
int x;
//常量:public static final.....
public static final double PI=3.1415926535;
public FinalF(){
}
public FinalF(int x){
this.x=x;
}
}