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

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("张三")
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值