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共同使用

就是静态常量。






0 0
原创粉丝点击