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

final修饰符

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

2.1final修饰属性

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

2.1.1修饰成员变量

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

2.1.2修饰形式参数

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

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

2.2final修饰方法

  1. public class Person{
  2. public final void add(){}
  3. private void go(){}//private final void go(){}
  4. }
  5. public class Student extends Person{
  6. //编译报错,不能覆盖final修饰的方法
  7. public void add(){}
  8. }

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

2.3final修饰类

  1. public final class Person{}
  2. //编译报错,final修饰的类不能被继承
  3. 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. js 实现光标控制与字符串查找

    转载请注明来源:https://www.cnblogs.com/hookjc/ 光标定位: <html> <head> <meta http-equiv="co ...

  2. webpack打包如何统一js和css中图片资源路径

    目前项目应用的是vue-cli,自行修改了部分配置.三个环境的情况跟你差不多,测试/生产环境的层级比你还深. 先说下修改了哪些配置 1-build/utils.js下的cssLoaders内的gene ...

  3. Python--列表简介

    Python--列表简介 目录 Python--列表简介 一.列表 1. 访问列表元素 2. 索引从0而不是1开始 3. 使用列表中的各个值 二.修改.添加和删除元素 1. 修改列表元素 2. 在列表 ...

  4. Redis 源码简洁剖析 10 - aeEventLoop 及事件

    aeEventLoop IO 事件处理 IO 事件创建 读事件处理 写事件处理 时间事件处理 时间事件定义 时间事件创建 时间事件回调函数 时间事件的触发处理 参考链接 Redis 源码简洁剖析系列 ...

  5. 总结haproxy各调度算法的实现方式及其应用场景

    一.静态算法 1.1 static-rr 基于权重的轮询调度,不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其它值)及后端服务器慢启动,其后端主机数量没有限制,相当于LVS中的 w ...

  6. netty系列之:JVM中的Reference count原来netty中也有

    目录 简介 ByteBuf和ReferenceCounted ByteBuf的基本使用 ByteBuf的回收 ByteBuf的衍生方法 ChannelHandler中的引用计数 内存泄露 总结 简介 ...

  7. 《PHP程序员面试笔试宝典》——如何回答快速估算类问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 有些大企业的面试官,总喜欢出一些快速估算类问题,对他们而言,这些问题只是手段,不是目的,能够得到一个满意的结果固然是他们 ...

  8. Solution -「AGC 034C」Tests

    \(\mathcal{Description}\)   Link.   给定非负整数序列 \(\{l_n\},\{r_n\},\{b_n\},X\),求最小的 \(s\),使得存在非负整数序列 \(\ ...

  9. dart系列之:集合使用最佳实践

    目录 简介 使用字面量创建集合 不要使用.length来判断集合是否为空 可遍历对象的遍历 List.from和iterable.toList where和whereType 避免使用cast 总结 ...

  10. jmeter重点(详细)

    之前,写过一篇文章:jmeter,学这些重点就可以了,今天就来把一些重点细节点说一下. 测试计划 可以理解为各种测试元件的容器 其中: 定义整个测试中使用的重复值(全局变量),一般定义服务器的ip.端 ...