final和static关键字

1、final关键字的用法

 

 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。

 
final类不能被继承,没有子类,final类中的方法默认是final的。 如String类
final方法不能被子类的方法覆盖,但可以被继承。 (如果private修饰方法,则该方法不能被子类继承)
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 
final不能用于修饰构造方法。 
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。

 

 

2、static关键字的用法

static变量 

 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:  对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。  

对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

 

static方法 

 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法 (就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!  因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

调用一个静态方法就是“类名.方法名”,不用先创建实例。一般来说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的

声明为static的方法有以下几条限制: 

· 它们仅能调用其他的static 方法。 

· 它们只能访问static数据。 

· 它们不能以任何方式引用this 或super。

 

静态类

         通常一个普通类不允许声明为静态的,只有一个内部类才可以。这时这个声明为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类

 

posted @ 2013-12-26 15:46  ajiaju  阅读(139)  评论(0编辑  收藏  举报