java之final与static的区别

一、final关键字

  • final实例字段必须在构造对象时初始化。也就是说,必须在构造器执行完成之前,将字段赋予初值,否则将不能再修改这个字段。
  • 每创建一个实例,就会为实例变量分配一次内存

1、final修饰引用

  • 当引用为基本数据类型,则该引用的值在实例后不可以再改变
    如图,试图改变data的值将会报错。
    在这里插入图片描述
  • 当修饰的为对象时,则该对象变量不可以再指向另一个对象
    在这里插入图片描述

2、final修饰方法

  • 当final修饰方法时,则该方法将不可以被重写,若试图重写父类方法,
    则会报错。不过该方法任然可以继承给子类
  • 注:类的private方法会隐式地被指定为final方法。
    在这里插入图片描述

3、final修饰类

  • final修饰类,则该类不可以被继承,俗称“断绝子孙类”,
    但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
    在这里插入图片描述

二、static关键字

1、静态字段(类变量或静态变量)

  • static关键字修饰的字段与方法都会随着类的加载而分配和加载进
    内存,而非静态字段与方法只用在实例化对象时才会分配内存。并且
    static关键字修饰的字段与方法都只加载一次,类加载后就会存在,是
    优先于对象的存在;而非静态的每实例化一次对象都会加载一次。
  • 与final修饰不同的是,static关键字修饰的字段可以修改值,方法可以
    重写。
    在这里插入图片描述

2、静态方法(类方法)

  • static修饰方法,则该方法不可以访问非静态变量,只可以访问
    静态成员。
    在这里插入图片描述
  • 对于静态字段与静态方法,虽然可以使用对象来访问它们,这也是合法的,但是它们是属于类的,建议使用类名来方法这些字段与方法。

三、final与static的区别

1、是否可以修改值

  • 对于final来说,修饰的引用、方法和类都是“不可以改变的”,而static修饰则可以“改变”;

2、何时加载

  • 对于final修饰的引用、方法来说,会在每一次实例化对象时加载,而static
    修饰则会在类加载是就加载,且只加载一次,优先于对象存在。

四、静态常量

1、静态常量的定义

  • 同时用final与static来修饰引用,这些引用则称为静态常量

2、静态常量的特点

  • 不难看出,由于同时用final与static来修饰,则静态常量会随着类的加载而加载,且只加载一次;
  • 值不可以修改
  • 在类中,应当避免使用公共字段,然而,使用公共静态常量缺没有问题,因为其值不会被修改。
    在这里插入图片描述
  • 12
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值