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. 修饰方法,表示该方法无法被重写;修饰类,表示该类无法被继承;

修饰符-final的更多相关文章

  1. java 非访问修饰符 final 的用法

    final 修饰符,用来修饰类.方法和变量 final修饰的类不能被继承 举例,String类是final类,不可以被继承: final修饰的方法不能被重写 只是不能重写,也就是不能被子类修改,但是可 ...

  2. Java修饰符final总结

    final 的意思是最终的,不可改变的. final可以用来修饰 a.类. b.方法(包括类方法和对象方法). c.变量(包括成员变量.局部变量). 1. final修饰类: 用final修饰的类不能 ...

  3. final(最终、修饰符)

    /* final(最终.修饰符) final关键字的用法: 1. final关键字修饰一个基本类型的变量时,该变量不能重新赋值,第一次的值为最终的. 2. fianl关键字修饰一个引用类型变量时,该变 ...

  4. java 中间 final修饰符

    修饰符final:它是一个常数,我不同意改变 ,可以修改 变数,办法 ,分类 final修改变量:是final成常量,一旦赋值不能改变 常量能够在初始化时直接赋值.也能够在构造方法里赋值.仅仅能在这两 ...

  5. java修饰符public final static abstract transient

    JAVA 修饰符public final static abstract transient  关键字: public final static abstract ...  1.public prot ...

  6. private static final 修饰符

    java修饰符分类修饰符字段修饰符方法修饰符根据功能同主要分下几种 1.权限访问修饰符 public,protected,default,private,四种级别修饰符都用来修饰类.方法和字段 包外 ...

  7. 类成员(static)和final修饰符

    在Java类里只能包含成员变量.方法.构造器.初始化块.内部类(包括接口.枚举)5种成员,类成员是用static来修饰的,其属于整个类. 当使用实例来访问类成员时,实际上依然是委托给该类来访问类成员, ...

  8. final修饰符:

    知识点: 1.final关键字用于修饰类.变量和方法 2.有点类似C#里的 sealed 关键字,用于表示它修饰的方法.变量和类不可以再被改变 3.final修饰变量时,表示该变量一旦获取了初始值,就 ...

  9. java中static和final修饰符

    static和final修饰符 一.static修饰符 static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. ...

随机推荐

  1. Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources failed.

    说明 今天发现这个错误,然后整体检查了一下代码,没有发现任何错误,最后没法只有来一步一步排查. 解决 确定pom文件是否有问题 如上图,有红色波浪线,代表错误,请检查并解决,还有版本是否冲突,最好把不 ...

  2. 微信h5下拉隐藏网页,还有取消页面滑动

    需求: 网页下拉太丑了,如下 度娘了一下, 发现一篇相关文档 基本解决了问题 https://juejin.cn/post/6844903940190896135#heading-2 加入如下代码即可 ...

  3. webpack热更新 同时导出文件到本地

    webpack 配置热更新后,文件配置导出到本地 安装 npm i webpack-dev-server-output --save-dev 引入 const WebpackDevServerOutp ...

  4. NSArray文件读写

    1.NSArray数据写入到文件中 NSArray *arr = @[@"lnj", @"lmj", @"jjj", @"xcq& ...

  5. DNS域名解析之正向解析

    DNS域名解析之正向解析 1.DNS介绍 2.DNS正向解析实验 1.DNS定义:DNS是"域名系统"的英文缩写.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地 ...

  6. Docker磁盘空间分析与清理

    首先使用du命令逐层分析docker磁盘的使用情况: (base) [root@openvino docker]# du -h --max-depth=1 | sort 0 ./containerd ...

  7. 使用haproxy的ACL实现基于文件后缀名的动静分离

    一.环境准备 二.实现proxy [root@localhost ~]# yum -y install haproxy #创建子配置 [root@localhost ~]# mkdir /etc/ha ...

  8. IP分组和分片

    本文讨论两个问题①IP数据报的首部②IP数据报的分片 TCP/IP模型分为五层,从上到下依次是应用层.传输层.网络层.数据链路层和物理层. IP数据报是网络层的概念. IP数据报的首部 版本号:0~3 ...

  9. 关于es update异常 ScriptException[dynamic scripting for [groovy] disabled]

    你需要在elasticsearch.yml中配置 script.disable_dynamic: false 然后别忘了重启.

  10. Solution -「CF 804F」Fake bullions

    \(\mathcal{Description}\)   Link.   给定 \(n\) 个点的竞赛图,第 \(i\) 个点代表了 \(s_i\) 个人,每个人(0-based)可能有真金条.此后在 ...