博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

java 中访问修饰符

Posted on 2009-09-04 16:30  zhuxinyu  阅读(1911)  评论(0编辑  收藏  举报
以下修饰符连用,会导致错误吗?
abstract 与 private
abstract 与 final
abstract 与 static。


final 变量的特征:
1. final 修饰符可以修饰静态变量,实例变量和局部变量,分别表示静态常量,实例常量和局部常量。

2. final 变量必须显示进行初始化,否则编译会出错。对于final类型的实例变量,可以在定义变量时,或是在构造方法中进行初始化;对于final类型的静态变量,可以在定义变量时进行初始化,或是在静态代码块中初始化

3. final 变量只能赋一次值。

在程序中通过final修饰符来定义常量,有如下作用:
1. 提高程序的安全性,禁止非法修改取值固定并且不允许改变的数据
2. 提高程序代码的可维护性。
3. 提高程序代码的可读性。

static变量的特征:
1. 静态static变量: 在内存中只有只有一个拷贝,能被所有实例共享可作为实力之间进行交流的共享数据,运行java虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态 变量的内存分配。可以直接通过类名访问静态变量。(对于实力变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互补影 响)如果一个类的所有实例都包含一个相同的常量属性,可把这个属性定义为静态常量

2. 静态static方法: 静态方法不需要通过它的所属的类的任何实例就会被调用,因此静态方法中不能使用 this 关键字,也不能访问类的实例变量和实例方法,但是可以访问所属类的静态变量和静态方法。但是在实例方法中可以直接访问所属类的静态变量,静态方法。实例变 量,实例方法。 静态方法必须被实现,它表示某个类所特有的功能,它不依赖于类的具体实例,也不依赖于它的子类。所以必须提供实现,换句话说,就是,一个静态方法不能被定 义为抽象方法 如 : static abstract void method();

3. 静态static块: 当类被加载时,静态代码块只能被执行一次, 类中不同的静态代码块按他们在类中出现的顺序被依次执行。

abstract 修饰符:
1. 用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化,即不能创建抽象类本身的实例。没有用abstract修饰的类称为具体类,具体类可以被实例化。

2. 用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。 没有用abstract修饰的方法称为具体方法,具体方法具有方法体。

abstract 修饰符需要遵守的语法规则:
a. 抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。 如果子类没有实现父类中所有的抽象方法,那么子类也必须被定义为抽象类,否则编译出错
b. 没有抽象构造方法,也没有抽象静态方法。
c. 抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法
d. 抽象类及抽象方法不能被final 修饰符修饰。 abstract 修饰符与final修饰符不能连用。因为抽象类只有允许创建其子类,它的抽象方法才能被实现,并且只有它的具体子类才能被实例化,而用final修饰的类 不允许拥有子类,用final修饰的方法不允许被子类方法覆盖,因此把 abstract 修饰符与final修饰符连用,会自相矛盾。


最上面的所有搭配都会出错