JAVA的final与static

static

static是静态的意思,也是全局的意思。static定义的东西,属于全局,与类相关,不与具体实例相关,是类实例之间共享的。

1. 被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个对象来

2. 被static修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要new出一个对象来

static与非static的区别:

在内存中存放的位置不同:所有static修饰的属性和方法都放在内存的方法区(内存的方法区相当于常驻内存,如果一个方法或者变量声明为static,可以节约内存,不必要为每个对象实例化的时候分配内存)里,而非静态的都堆放在堆内存中

生命周期不同:静态在类消失后被销毁,非静态在对象销毁后销毁。

final

final关键字有三个东西可以修饰,修饰非抽象类,修饰非抽象方法,修饰引用。

在类的声明中使用final:

使用了final的类不能再派生子类,就是不可以被继承,简称为断子绝孙类。类中的所有方法都不能被重写。有一些java的面试题问,String可不可以被继承,答案是不可以。因为java.lang.String是一个final类。这可以保证String对象方法的调用确实运行的是String类的方法,而不是经其子类重写后的方法。

在方法的声明中使用final:

被定义为final的方法不能被重写,这个方法成为最终方法,但是该方法仍然可以被继承。如果定义类为final,是所有的方法都不能被重写。而我们只需要类中的几个方法不可以被重写,就在方法前面加上final,而且被定义为final的方法执行效率高。final不能修饰构造方法。

在修饰引用中使用final:

如果引用为基本数据类型,这样变量就是常量了,在程序中这样的变量不可以被修改,修改编译器会报错,而且执行效率比普通的变量要高。final的变量如果没有赋予初值的话,其他方法就必须给他赋值,但只能赋值一次。

如果引用为引用数据类型,比如对象,数组,则该对象、数组本身可以修改,但是指向该对象或数组的地址的引用不能修改。

如果引用的是类的成员变量,则必须当场赋值,否则编译会报错。

static和final一起用:final与static final的区别是:final在一个对象类唯一,static final在多个对象中都唯一;一个既是static又是final的域只占据一段不能改变的存储空间,只有一份。

参考:static和final的区别 - 简书 (jianshu.com)​
理解Java中的final和static关键字 - 邴越 - 博客园 (cnblogs.com)static和final的区别 - 简书 (jianshu.com)​

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值