24static 和final关键字之final

final是最终的意思,它是一个关键字也是一个修饰符

它可以修饰 数据、方法、类

1.final修饰数据

final修饰的是基本数据类型的时候,就是最终值不能发生改变(final修饰的数据可以先声明,再去赋值,只能赋值一次)

    final int i=2;
        //i=4;//语句错误,final修饰变量的数据不能改变---最终值
        final int j; //final修饰的数据可以先声明,再去赋值,只能赋值一次
        j=6;

final修饰引用数据类型

final修饰引用数据类型,最终值就是引用的地址,地址值不能改变

final int[] arr= {1,2,3};
        //元素值赋值,这个时候数组中的值是可以改变,那么final修饰的就不是数组元素的值
        arr[2]=6;  
        arr[0]=5; 
        //arr=new int[5];//此语句错误,地址值发生改变。
        //arr.length=5;//此语句错误,数组长度也是最终值。

final修饰成员变量的值

在创建对象前就要赋值(构造方法和构造代码块任选其一且只能赋值一次)

class A{
    final int i;
    {
        i=4; //构造代码块中赋值
    }
    public A() {
        //i=5; //构造代码块和构造函数赋值两者取其一
    }
}

static 和final共同修饰(最终静态):在类加载之前就要赋值且只要赋值一次

class A{
    static final int i;
    static 
    {
        i=4;
    }
    {
        
    }
    public A() {
    
    }
}

2.final修饰方法

final 修饰方法那么这个方法可以重载和重写吗

可以重载

可以继承但是不能重写

class A{
    //重载
    public final void m() {}
    public final void m(int i) {}
    
}
class B extends A{
    //注解判断是否可以重载
    @Override
    //public final void m() {} //重载报错了
}

3.final修饰类

final修饰的类不能被继承,但是可以继承别的类

final class A{
    //属性
    String name;
    //方法
    public void m() {}
    //无参构造
    public A() {
        
    }
    
}
/*class B extends A{ //不能继承最终类A
    
}*/

猜你喜欢

转载自www.cnblogs.com/xuwangqi/p/11098655.html