java 中final 和 static
来源:互联网 发布:一元欢乐购源码 编辑:程序博客网 时间:2024/05/22 06:52
文章出处:http://blog.csdn.net/shift_wwx
一、final
根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
1、final 类
final 类是不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final属性。
在设计的时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就可以设计为final类。
2、final 方法
如果一个类不允许其子类覆盖某个方法,就可以将此方法声明为final属性。
这样设计有两点好处:
1)这样把固定的方法锁定,防止任何继承类修改它的意义和实现
2)高效。编译器在遇到final方法的时候会转入内嵌机制,大大提高了执行效率。
3、final 变量
用final 修饰的变量就表示常量。
设计分两种:
1)在定义的时候赋初值,这样的变量是不允许修改的。
2)在定义的时候不赋初值,称为final空白。这个变量在对象初始化的时候一定要初始化,这样定义有个好处,可以根据不同的对象,传入不同的final值。
4、final参数
函数参数定为final,在函数体中只能够读取,不能够修改。
二、static
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。
public 修饰的static,类所有的实例都可以共享一个static,也可以通过类名直接使用。
private修饰的static,只能通过方法来共享使用,不能通过类名直接使用。
1、static 变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
两者的区别是:
1) 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
2) 对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
2、static 方法
static 方法是共享的静态方法,是必须要实现的,不能是抽象的(abstract)。
因为是所有实例都可以调用,所以,方法里面不能出现this、super等关键字。而且,static方法中不能访问非static的变量或方法。
3、static 代码块
static{
......
}
satic 代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些static 代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会执行一次。
三、static final共同使用
就是静态常量。
- java中static和final
- java中final和static
- java 中final 和 static
- java中static 和 final
- java中final和static
- Java中final和static
- java中static和final
- java中static和final
- JAVA中Static和Final
- Java中static 和final的区别
- Java中static 和final的区别
- java中static和final的理解
- java中final和static总结
- java中final和static使用总结
- java中final和static(拿来主义)
- Java中static 和final的区别
- java中final和static关键字总结
- Java中static 和final的区别
- js 传递function并调用function
- UILabel实现文本自适应方法(ios7)
- hbm主键生成策略错误
- 如何使用java synchronized进行线程同步
- 第一次写android博客,现在还是一个小白
- java 中final 和 static
- shell学习第五天--基本的I/O重定向
- C#初写第一篇
- 软件设计命名规范
- java.security.cert.CertificateException: Selenium 自动化的时候调用API 执行操作引起的关于https的问题
- 导入项目报错
- windows Oracle EM 安装配置
- 程序员面试宝典 实现正确匹配(即数组中某值与B中某值相等) P93
- Centos 上开启防火墙 PPTPD 无法访问其他客户端