final和static的区别

来源:互联网 发布:php用户注册系统源码 编辑:程序博客网 时间:2024/06/07 15:30

今天在学Android时,遇到final static int a=1 这样的语法,就想深入了解下final和static的区别,因为字面上两个都是最终静态的意思。

static

tatic是静态修饰关键字,可以修饰变量和程序块以及类方法:当你定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地

址而不会重新分配内存;修饰一个程序块的时候(也就是直接将代码写在static{...}中)时候,虚拟机就会优先加载静态块中代码,这主要用于系统初始化;当修饰一个

类方法时候你就可以直接通过类来调用而不需要新建对象。


final

final可以修饰变量、方法及类,当你定义一个final变量时,jvm会将其分配到常量池中,程序不可改变其值;当你定义一个方法时,改方法在子类中将不能被重写;当你修饰一个类时,该类不能被继承。


sataic表示这个变量是这个类的全体对象所共享的,一旦通过其中某个对象的引用去改变这个变量则其他对象再次引用这个变量时,得到的值也随之改变,因为所

有的对象引用的其实是同一个内存地址的东西。而final则表示一旦定义了这个变量的值就不能再改变了,就是常量了。final和static表达的含义不同,二者并不冲突。


所以总结final和static同时修饰一个变量时,static表示变量的“家”(即地址)不会变,final表示“家”里面的“东西”不会变(即变量值)

0 0