学习脚步--七种修饰符的范围和使用


作用域

当前类

同一 package

子孙类

其他 package

public

protected

×

default

×

×

private

×

×

×

不写时默认为 default

final 修饰符

final 具有不可更改的意思,它可以修饰非抽象类非抽象成员方法和变量

final 修饰的类不能被继承,没有子类。 String

final 修饰的方法不能被子类的方法覆盖

final 修饰的变量表示常量,只能被赋值一次

final 不能修饰构造方法 ,因为方法覆盖这一概念仅适用于类的成员方法,而不适用于类的构造方法,父类的构造方法和子类的构造方法之间不存在覆盖关系,因此用 final 修饰构造方法是豪无意义的。

父类中用 private 修饰的方法不能被子类的方法覆盖,因此 private 类型的方法默认是 final 类型的

final

String  ,不让继承,封装实现的细节。

final 方法

在某些情况下,出于安全的原因,父类不允许子类覆盖某个方法,此时可以把这个方法声明为 finnal 类型。 java.lang.Object 类, getClass ()为 final 类型, equals ()不为 final 类型。

final 变量

final 修饰的变量表示取值不会改变的常量。

final 修饰符可以修饰静态变量,实例变量和局部变量,分别表示静态常量,实例常量和局部常量。

例如 出生日期,年龄的限制等。

final 变量都必须显示初始化,否则会导致编译错误。

final 变量只能被赋值一次。

在程序中使用 final 修饰符来定义常量的作用

提高程序的安全性,禁止非法修改取值固定并且不允许修改的数据

提高程序代码的可维护性。

static 关键字

static 修饰符可以用来修饰类的成员变量,成员方法和代码块

static 修饰的成员变量表示静态变量 ,可以直接通过类来访问

static 修饰的成员方法表示静态方法 ,可以直接通过类名来访问

static 修饰的程序代码块表示静态代码块 ,当 JAVA 虚拟机加载类时 ,就会执行该代码块

static 所修饰的成员变量和成员方法标明归某个类所有,它不依赖于类的特定实例,被类的所有实例共享 。只要这个类被加载, JAVA 虚拟机就能根据类名在运行时数据区的方法区定位到它们。

static 变量

类的成员变量有两种,一个是实例变量,没有被 static 修饰,一种是被 static 修饰过的变量,叫类变量或者静态变量。

静态变量和实例变量的 区别:

静态变量在内存中只有一个拷贝,运行时 JAVA 虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配。可以直接通过类名访问静态变量。

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

static 方法

成员方法分为静态方法和实例方法 。用 static 修饰的方法叫做静态方法,或者类方法。静态方法和静态变量一样,不需要创建类的实例,可以直接通过类名来访问。

因为静态方法不需要通过它所属的类的任何实例就会被调用,因此在静态方法中不能使用 this super 关键字,也不能直接访问所属类的实例变量和实例方法,但是可以直接访问所属类的静态变量和静态方法。在 static 方法内,不能直接访问非 static 变量或者方法。

static 代码块

      类中可以包含静态代码块,它不存在于任何方法体中。在 JAVA 虚拟机加载类时会执行这些静态代码块。如果类中包含多个静态块,那么 JAVA 虚拟机将按照他们在类中出现的顺序依次执行它,并且每个代码块只会被执行一次。

static abstract 永远不能放在一起用

abstract 修饰符与 final 修饰符连用

如果一个方法是静态的 ,它就必须自力更生,自己实现该方法 。如果一个方法是抽象 的,那么它就只表示类所具有的功能,但不会去实现它 ,在子类中 才会去实现它

abstract 修饰符

abstract 修饰符可以用来修饰类成员方法

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

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

abstract 语法规则:

抽象类可以没有抽象方法 ,但包括了抽象方法的类必须被定义为抽象类 。如果子类没有实现父类中所有的抽象方法,那么子类也必须被定义为抽象类

抽象类中可以有非抽象的构造方法 ,创建子类的实例时可能会调用这些构造方法。抽象类不能被实例化,然而可以创建一个引用变量,其类型是一个抽象类,并让它引用非抽象的子类的一个实例。

  抽象类及抽象方法不能被 final 修饰符修饰 。因为抽象类只允许创建子类,它的抽象方法才能被实现,并且只有它的具体子类才能被实例化,而用 final 修饰的类不允许拥有子类,用 final 修饰的方法不允许被子类方法覆盖,因此把 abstract 修饰符与 final 修饰符连用,会导致自相矛盾。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值