当前位置: 首页 > news >正文

final修饰符使用中遇到的一些问题

文章目录

  • final修饰符
  • 1. final不能用来修饰构造方法
  • 2. final修饰变量的一些注意问题
    • 2.1 final修饰成员变量
    • 2.2 final修饰引用类型
      • 2.2.1 演示代码中lombok链式编程介绍

final修饰符

final具有“不可改变”的含义,它可以修饰非抽象类、非抽象成员方法和变量。

  • 用final修饰的类不能被继承,没有子类
  • 用final修饰的方法不能被子类的方法覆盖(Override)
  • 用final修饰的变量表示常量,只能被赋值一次

1. final不能用来修饰构造方法

final不能用来修饰构造方法,因为“方法覆盖(Override)”仅适用于类的成员方法,而不适用于类的构造方法,父类的构造方法和子类的构造方法之间不存在覆盖(Override)关系,所以用final修饰构造方法是无意义的。

2. final修饰变量的一些注意问题

2.1 final修饰成员变量

final修饰成员变量,必须显示初始化,否则会产生编译错误

在这里插入图片描述

  1. final修饰的实例变量,可以在定义变量时候或者在构造方法中进行初始化
public class TestFinal1 {final int i=1;final int j;public TestFinal1(int j) {this.j = j;}
}
public class TestFinal1 {final int i;final int j;public TestFinal1(int i, int j) {this.i = i;this.j = j;}
}
  1. final修饰的静态变量,可以再变量定义时进行初始化,或者在静态代码块中初始化
public class TestFinal1 {static final int i=1;static final int j;static {j=2;}
}

2.2 final修饰引用类型

final修饰引用类型变量,那么该变量只能始终引用一个对象,但是对象的内容可以改变

@Data
@Accessors(chain = true)
public class Person {private String name;private int age;
}
public class TestFinal {public static void main(String[] args) {List<Person> personList = new ArrayList<Person>(){{add(new Person().setAge(25).setName("张三"));add(new Person().setAge(28).setName("李四"));add(new Person().setAge(34).setName("王五"));}};List<Person> newPersonList = new TestFinal().method(personList);System.out.println(newPersonList);}public List<Person> method(final List<Person> personList){personList.add(new Person().setAge(29).setName("朱六"));return personList;}
}

输出结果:

[Person(name=张三, age=25), Person(name=李四, age=28), Person(name=王五, age=34), Person(name=朱六, age=29)]

2.2.1 演示代码中lombok链式编程介绍

在实体上面添加注解@Accessors(chain = true),如:

@Data
@Accessors(chain = true)
public class Person {private String name;private int age;
}

那么就可以针对该实体进行如下链式编程操作

new Person().setAge(25).setName("张三")
http://www.lryc.cn/news/27124.html

相关文章:

  • 好记又实用的获取电脑型号方法
  • @Transactional配置详解
  • 性能测试面试题汇总
  • vue权限控制和动态路由
  • 利用正则表达式删掉代码中的所有注释-pycharm为例
  • 【java基础】内部类、局部内部类、匿名内部类、静态内部类
  • react renderProps学习记录
  • 关于tf.gather函数batch_dims参数用法的理解
  • 日常操作linux常用命令
  • 【Java集合框架】篇二:Collection接口方法
  • PHP入门指南:简单易学的语法和丰富的调试工具与安全性最佳实践
  • 前端面试题--HTML篇
  • SpringBoot集成ElasticSearch,实现模糊查询,批量CRUD,排序,分页,高亮
  • 常用Swagger注解汇总
  • 关于 TypeScript 声明文件
  • SpringBoot学习-原理篇
  • 目标检测YOLOv5数据集怎么找?
  • 安卓短信自动填充踩坑
  • 【抽象类和接口的区别】
  • 接口导出文件功能
  • 深圳大学计软《面向对象的程序设计》实验9 期中复习
  • python之异步编程
  • 为什么很多计算机专业大学生毕业后还会参加培训?
  • JUC并发编程之JMM_synchronized_volatile
  • hashCode 和 equals 的处理
  • 17. OPenGL实现旋转移动物体
  • 《SQL基础》14. 存储过程 · 存储函数
  • NFT Insider #87:The Sandbox 收购游戏开发工作室 Sviper,GHST 大迁徙即将拉开帷幕
  • html部分codewhy网课学习笔记
  • 电脑出问题了怎么重装系统修好