Java教程

Java-16 final关键字

本文主要是介绍Java-16 final关键字,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.final关键字是最终的意思,可以修饰类,局部变量,成员变量,成员方法

  1.1 修饰类:被修饰的类不能被继承,就是说这个类不能有任何的子类,也就是太监类,只能继承父类,不能被继承

    格式:publi final class 类名称{}

    注意:一个类如果为final类,那么其中所有的成员方法都不能被覆盖重写(因为没有子类)

final class He{
    public void methon(){
        System.out.println("方法块执行");
    }
}
/*  报错
class You extends He{
    
}
*/

  1.2 修饰成员方法:当final用来修饰成员方法时,这个方法就是最终方法,不能被覆盖重写

    格式:修饰符 final 返回值类型 方法名称(形参){}

class Fu{
    public final void methon(){
        System.out.println("父类方法执行");
    }
}

class Son extends Fu{
    public void methon(){
        System.out.println("子类方法执行");
    }
}

//Error:(20, 17) java: com.shujia.day1.day3.Son中的methon()无法覆盖com.shujia.day1.day3.Fu中的methon()
  被覆盖的方法为final

  1.3 修饰局部变量:一旦使用final修饰局部变量,那么这个变量就不能进行更改,一旦赋值,终生不变

//当final修饰局部变量,对于基本类型来说,不可变的是变量中的值不可变
//                     对于引用类型来说,不可变的是变量中的地址值不可变
public class FinalDemo{
    public static void main(String[] args) {
        int num1=20;
        System.out.println(num1);//20
        num1=23;
        System.out.println(num1);//23
        //正确写法
        final int num2 =20;
        System.out.println(num2);//20
//        num2=30;报错
//        num2=20;报错
        //正确写法
        final int num3;
        num3=40;
        System.out.println(num3);
       //final修饰引用数据类型
        FinalDemo6 fin = new FinalDemo6("张三");
        System.out.println(fin);//com.shujia.day1.day3.FinalDemo6@4554617c
        System.out.println(fin.name);//张三
        fin=new FinalDemo6("李四");
        System.out.println(fin);//com.shujia.day1.day3.FinalDemo6@74a14482
        System.out.println(fin.name);//李四
        System.out.println("=========================");
        final FinalDemo6 fin2 = new FinalDemo6("王五");
        System.out.println(fin2);//com.shujia.day1.day3.FinalDemo6@1540e19d
        System.out.println(fin2.name);//王五
//        fin2=new FinalDemo6("老王");错误写法,final修饰不能改变地址、
        fin2.name="老王";
        System.out.println(fin2);//com.shujia.day1.day3.FinalDemo6@1540e19d
        System.out.println(fin2.name);//老王

    }
}

  1.4 final关键字修饰成员变量:如果使用final修饰成员变量,那么这个变量也是照样看不可变,不会再给默认值,必须手动赋值

/*
使用final修饰成员变量,那么这个变量也是照样看不可变,不会再给默认值,必须手动赋值,两种方法,二者选其一
1.直接赋值
2.构造方法赋值,必须保证所有重载的构造方法都要对final修饰的成员变量进行赋值
 */
class Person{
//    构造方法赋值
    private final String name;
//    private final String name="张三"; //直接赋值
    public Person(String name) {
        this.name = name;
    }

    public Person() {
        name="张三";
    }

    public String getName() {
        return name;
    }
     //使用构造方法赋值,需要删除setter方法,不能对final修饰的成员变量重新赋值
//    public void setName(String name) {
//        this.name = name;
//    }
}

  

这篇关于Java-16 final关键字的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!