> 文档中心 > Java中的final如何理解——详解

Java中的final如何理解——详解

目录

引言

final修饰类

final修饰方法 

final修饰变量 

final修饰局部变量 

final修饰成员变量 

final修饰变量注意点 


 

引言

🌈🌈🌈

        今天我们重点来讲解一下Java中的final关键字,首先我们可以通过字面意思理解final关键字——“最终,最后”,因此被final关键字修饰的类、方法、变量将被赋予最终的含义::修饰过后的类不能被子类继承;方法:修饰过后的方法不能被重写;变量:修饰过后的变量不能被二次修改。接下来对其详细地讲解:

 

final修饰类

❤️❤️❤️ final修饰的类,类不能被继承❤️❤️❤️

//未被final修饰的father类public class son extends father{}public class father{}//被final修饰的father类public class son extends father{//son无法继承father类,会出现报错!}public final class father{}

final修饰方法 

💜💜💜final修饰的方法,方法不能被重写💜💜💜

//未被final修饰的方法public class son extends father{//可以正常重写say()方法    @Override    public void say(){ System.out.println("可以给零花钱吗?"); }}public class father{    public void say(){ System.out.println("Hello!");    }}//被final修饰的方法public class son extends father{//由于say()被final修饰,所以无法重写,会报错!    @Override    public void say(){ System.out.println("可以给零花钱吗?"); }}public class father{    public final void say(){ System.out.println("Hello!");    }}

final修饰变量 

 💙💙💙​final修饰的变量,有且仅有一次机会赋值💙💙💙

首先应该明确,在Java中有以下两种变量

1、局部变量

2、成员变量                       

                     i>实例成员变量

                     ii>静态成员变量

🚀因此变量类型不同,final所造成的影响也会不同🚀

final修饰局部变量 

🐼第一种情况是在main函数中使用final对任意变量进行修饰:

//final未修饰变量double Pi = 3.1415;pi = 3.14;//final修饰变量final double Pi = 3.1415;//Pi二次赋值,会报错!pi = 3.14;

🦄第二种情况是在定义的函数中将final修饰的变量作为参数进行传递:

//未使用final对变量修饰test(3);public satic void test(int a){    a = 1;}//使用final对变量修饰test(3);public satic void test(final int a){//由于在传值的时候已经赋过值了,所以不能二次赋值    a = 1;}

final修饰成员变量 

🐾第一种情况是修饰静态成员变量(public satic final 修饰的也称为常量) 

public satic final String name = "石原里美";//由于final修饰name,所以不能对name二次赋值name = "工藤静香";

🦁第二种情况是修饰实例成员变量(由于实例对象属于每个对象,若值无法改变则毫无意义,基本不用)

public final String name = "石原里美";//由于final修饰,所以不能改变其值name = "工藤静香";

final修饰变量注意点 

  •  final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
  • final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的。
    class actress{    private String name;    public actress(String name){ this.name = name;    }    public getName(){ return name;    }    public setName(String name){ this.name = name;    }}actress a = new actress("石原里美");a = null;//第二次赋值所以报错System.out.prinyln("a.getName()");a.setName("工藤静香");//改变的是指针所指向的数据System.out.prinyln("a.getName()");//输出结果://石原里美//工藤静香

创作不易,给个三连吧!