欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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修饰的类无法被继承

执行结果:
JavaDay12——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修饰的方法无法被覆盖(但仍然能正常被调用)

执行结果:
JavaDay12——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修饰的变量只能赋值一次。(包括引用变量)

执行结果:
JavaDay12——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修饰的引用一旦指向某个对象,则不能再重新指向其他对象,但该对象内部的数据依然可以修改

执行结果:
JavaDay12——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公司不背锅!)

执行结果:
JavaDay12——final关键字

程序:

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联用,称为常量

执行结果:
JavaDay12——final关键字

程序:

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;
    }
}