final和static的区别
2015-11-06 23:45
302 查看
今天在学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表示“家”里面的“东西”不会变(即变量值)
static
tatic是静态修饰关键字,可以修饰变量和程序块以及类方法:当你定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地
址而不会重新分配内存;修饰一个程序块的时候(也就是直接将代码写在static{...}中)时候,虚拟机就会优先加载静态块中代码,这主要用于系统初始化;当修饰一个
类方法时候你就可以直接通过类来调用而不需要新建对象。
final
final可以修饰变量、方法及类,当你定义一个final变量时,jvm会将其分配到常量池中,程序不可改变其值;当你定义一个方法时,改方法在子类中将不能被重写;当你修饰一个类时,该类不能被继承。
sataic表示这个变量是这个类的全体对象所共享的,一旦通过其中某个对象的引用去改变这个变量则其他对象再次引用这个变量时,得到的值也随之改变,因为所
有的对象引用的其实是同一个内存地址的东西。而final则表示一旦定义了这个变量的值就不能再改变了,就是常量了。final和static表达的含义不同,二者并不冲突。
所以总结final和static同时修饰一个变量时,static表示变量的“家”(即地址)不会变,final表示“家”里面的“东西”不会变(即变量值)
相关文章推荐
- Hadoop 检查文件系统命令
- JSP数据交互(一)
- 未曾长夜痛哭者,不足与语人生(文/十三)
- 阿里巴巴全现金收购优酷土豆
- 阿里巴巴全现金收购优酷土豆
- nfs服务器的简单搭建过程-记录方法
- CAAnimation动画/CAAnimation Group
- Spring mvc之JSR303框架实现数据格式化,数据验证,资源国际化
- HTTP对外接口,如何增加签名机制
- 关于瑞典城市Idre城市天气未获取到的问题
- 转: Div与table的区别
- PostgreSQL、Oracle/MySQL和SQL Server的MVCC实现原理方式
- Android中RelativeLayout各个属性介绍
- Android源码的差分升级
- 高分辨力雷达
- HBase基本概念
- 利用三次实数相乘实现两复数相乘
- 内存对齐问题
- Macbook Pro配置PHP开发环境
- X64 HOOK IDT