十七、Java基础之final

一、final修饰的类无法被继承

  1.final的意思就是:最终的,最后的

例1:

final class A{}
class B extends A{}//无法从最终com.study.final关键字详解.A进行继承

二、final修饰的方法无法被继承

例2

public class Test01 {

    public final void m1(){}

}

class Test02 extends Test01{

    //方法覆盖
   // public void m1(){}//com.study.final关键字详解.Test02中的m1()无法覆盖com.study.final关键字详解.Test01中的m1()被覆盖的方法为final
}

三、final修饰的局部变量,一旦赋值,不可改变

例3:

class A{

    public void m1(){
        //声明
        final int i;

        //第一次赋值
        i=100;

        //final定义的变量,不能重复赋值
        //i=200;//可能已分配变量i
    }
}

四、final修饰的成员变量必须“显示的”初始化

例4:

class A{
    //final修改的成员变量必须手动初始化
    //final int i;
    final int i=100;

    //final修饰的成员变量,在构造方法调用结束之前,赋值即可
    final int k;

    //constructor
    A(){
        k=100;
    }
}

五、final修饰的成员变量一般与static联用,被称作“常量”,java语言中规定所有的常量必须大写

例5:

class MyMath{
    //常量。java规范中要求所有的的常量“大写”
    //常量,值不可再改变的变量
    public static final int PL=100;
}

 六、深入final

1.抽象类不能被final修饰
2.抽象方法不能被final修饰
public /*final*/ abstract class Test02 {//Error:(7, 23) java: 非法的修饰符组合: abstract和final
    public /*final*/ abstract void m1();
}

   3.final修饰的引用类型,该引用不可再重新指向其他的java对象。但是final修饰的引用,该引用指向的对象的属性是可以修改的

public class Test02{
    public static void main(String[] args){
        final Customer c=new Customer("lucy",12);
        //c是final的,无法重新赋值
        //c=new Customer("lack",13);//Error

        c.name="李四";
        c.age=14;
        System.out.println(c.name);//李四
        System.out.println(c.age);//14

    }
}

class Customer{
    String name;
    int age;

    Customer(String name,int age){
        this.name=name;
        this.age=age;
    }
}
原文地址:https://www.cnblogs.com/chushujin/p/10090315.html