static、final与abstract(day06-13.10.18)

来源:互联网 发布:瑞安网络问政 编辑:程序博客网 时间:2024/06/07 01:30

static:静态变量修饰的属性、方法及代码块均属于类。

1.静态属性

静态修饰的成员变量属于类级别,在类加载过程中分配,所有类与类的实例共享一个变量,相当于全局变量,一般使用类名访问静态属性(与实例变量不同)。

2.静态方法

静态方法是属于类的方法,可以通过类来访问,是全体类公有的工具方法,静态方法与类的实例无关,在静态方法中不能使用this,或者说静态方法值只能访问静态变量。

3.静态代码区

类加载期间运行的代码,由于类只加载一次,因此静态代码区代码只执行一次。静态代码区一般用来在类加载后,初始化一些静态资源的使用,如加载配置文件。

总结:静态方法属于类,非静态方法属于对象,静态方法使用的属性是静态的,常用来做工具方法。

final:

1.final修饰的类,不能再被继承

在实际项目中,原则上不允许使用final类,如Sping等,这些代码经常动态代理(动态继承),使用final类可能造成这些框架的工作问题

2.final修饰的方法,不允许被覆盖

实际柴发项目中,原则上不允许使用final方法

3.final修饰的变量,初始化后,不允许修改

a:fianl局部变量

b:fianl方法参数

c:final成员变量

4.final static:JAVA使用final static修饰的变量作为常量,一般要求常量名第一个为大写字母

abstract:

若一个类为抽象类且全部方法为抽象方法,可用做接口。包括抽象方法的类一定为抽象类。

1.抽象方法:只有行为的概念,无具体行为的实现,使用abstract关键词修饰,且无方法体。

2.抽象类:含抽象方法的类,一定为抽象类。

抽象方法与抽象类适合做系统分析与设计工具。抽象类不可直接创建实例,可引用变量。抽象类只能被继承,一个具体类继承一个抽象类,必须实现所有的抽象方法。

在测试“若一个类为抽象类且全部方法为抽象方法,可用做接口”时,出现错误:The type man cannot be a superinterface of student; a superinterface must be an interface。解决方法:接口要定义成interface,不可定义成class