修饰符-final

Java是由C/C++泛生的,其也保留了C/C++的部分特性,如关键字。在C/C++中,关键字有着特殊的含义。

final修饰符

在编程中,一般会存在一些变量或方法,程序员不让其数据“发生改变”,如数学计算要用到的圆周率,在编程时我们会给它一个固定值,但为了日后不被后其他人修改,就会用final来修饰这个“变量”,而被final修饰的“变量”称为常量

2.1final修饰属性

final成员变量表示常量,只能被赋值一次,赋值后值不再改变。

2.1.1修饰成员变量

public class Person{
    static final int age;
    final int num;
    final TestBoston test= new TestBoston();
    static{
        age = 10;
    }
    public Person(){
        this.num = 0;
    }
    public Person(int num){
        this.num = num;
    }
    public void setNum(int num){
        this.num = num;//编译报错,因为类中所有构造器已经对num赋过值
    }
    public void goTestBost(TestBoston test){
        this.test.setHost("ko");
        int num = this.test.getNum();
        this.test = test;//编译报错,不能修改引用变量指向的内存地址
    }
}
public static void main(String[] args){
    Person per1 = new Person();
    Person per2 = new Person(12);
    
    per1.num = 23;//编译报错,不能再次赋值,已经通过无参构造器赋过值了
    per2.num = 13;//编译报错,不能再次赋值,已经通过有参构造器赋过值了
}
  • 当使用final修饰成员变量时,必须对其显示初始化,要么在声明变量时给予初始值,要么在类的所有构造函数中对这个final变量赋初始值;
  • static final同时修饰的成员变量,要么在声明变量时给予初始值,要么在类中的静态代码块中赋值
  • 被final修饰的引用对象不能修改其指向的内存地址

2.1.2修饰形式参数

//假设main函数调用add方法,给num1、num2分别传参24,25
public int add(final int num1, final int num2){
    num1 = num2++;//编译报错,不能再次赋值,再调用方法时已经给num1、num2赋过值了
    return num1+num2;
}

final修饰的形式参数,只能在调用方法时对其传参,不能方法中重新给他赋值(num2++也是在给形参赋值)

2.2final修饰方法

public class Person{
    public final void add(){}
    private void go(){}//private final void go(){} 
}
public class Student extends Person{
    //编译报错,不能覆盖final修饰的方法
    public void add(){}
}

用final修饰的方法可以被继承,但是不能被子类的重写;private方法都会隐式地指定为是final的,由于无法在类外使用private方法,所以也就无法覆盖它

2.3final修饰类

public final class Person{}
//编译报错,final修饰的类不能被继承
public class Student extends Person{} 

用final修饰的类不能被继承,没有子类

final关键字主要用法总结

  1. 用于修饰成员变量或局部变量,被修饰的变量称为常量,只能被赋值一次且它的值无法被改变;对于成员变量来讲,必须在声明时或所有构造器中对它赋值;对于静态变量来讲,必须在声明时或静态代码块中对它赋值
  2. 用于修饰形式参数,调用方法时对其传参后的生存期里不能再被改变
  3. 修饰方法,表示该方法无法被重写;修饰类,表示该类无法被继承;

posted @   hello_12153_98  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示