21.final关键字

  1.  关于Java语言中的final关键字:
    1. final是一个关键字,表示最终的,不可变的。
    2. final修饰的类无法被继承
    3. final修饰的方法无法被覆盖
    4. final修饰的变量“一旦”赋值之后,不可重新赋值。【不可二次赋值】
  2. final修饰的实例变量
    1. 实例变量有默认值 + final修饰的变量一旦赋值不能重新赋值【从JVM的角度考虑,只要是final修饰的成员变量JVM不给赋默认值了,因为如果给final修的成员变量赋一个默认值以后都不能改变了,就只能用这个默认值,没有意义。程序员赋的值可以是默认值,但是也必须手动完成赋值,以防忘了赋默认值,不手动赋值编译报错】。
    2. 综合考虑,Java语言最终规定实例变量最终使用final修饰之后,必须手动赋值,不能采用系统默认值。【因为被final修饰的实例变量系统给他赋上默认值之后,他这一辈子也就是个默认值了,用户也不能改变它的值了,但多数情况下,不是要使用变量的默认值(如果一个变量只能使用他的默认值,那么变量存在意义就没有了),而是要使用用户给他规定的具有特殊意义的值,所以Java语言规定final修饰的实例变量必须手动赋值】。

public class People {

    final int age;

    //final int age = 20;//修改方案1

    public Animal(int age) {//修改方案2

        //final修饰的成员变量系统就不再构造方法中为其赋默认值,没有“this.age = 0;”这样的语句

        this.age = age;

    }

}

    1. 综合考虑2:使用final修饰的实例变量系统不会为它赋默认值,需要手动赋值。
    2. final修饰实例变量不能使用set方法,因为实例变量在构造方法中完成初始化,一但初始化后,就不能在重新赋值。所以不能有get方法。
  1. final修饰的引用
    1. final修饰的引用,一旦指向某个对象之后,就不能在指向其他对象,那么被指向的对象也就无法被垃圾回收器回收。
    2. final修饰的引用虽然指向某个对象之后就不能在指向其他对象了,但是所指向的对象内部的内存是可以被修改的。

class Chinese {

    //需求:每一个中国人的国籍都是中国,而且国籍不会发上改变,为了防止国籍被修改,建议加final修饰

    //static final修饰的成员变量被成为常量,必须声明时初始化并且不可被改变。

    //final修饰的变量是不可变的,变量中又包括实例变量,实例变量可以在构造方法中初始化,各个对象的该属性是可以不一样的,但是每个对象该属性一旦赋值就不能再更改了。

    //但是如果各个对象该属性都一样可以用static来修饰,所有类对象共用一份,且不可以被修改,可以用static final修饰的该实例变量,称为“常量”

//常量名一般全部大写,多个单词之间用下划线分割

    public static final String GUO_JI = "中国";

}

Java中的常量

Java 中的术语 static 和 final 具有不同的含义。final 关键字意味着无法更改某些内容。static 关键字意味着类级别的范围。当你在 Java 中组合 static final 时,你创建了一个对类来说是全局的且无法更改的变量。其他平台的开发人员会认为这种创建等同于全局常量变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛英豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值