您的位置:首页 > 编程语言 > Java开发

Java基础知识二(修饰符)

2017-12-29 10:54 281 查看
Java语言中的修饰符。

修饰符成员方法构造方法成员变量局部变量
abstractYY___
static_Y_Y_
publicYYYY_
protected_YYY_
private_YYY_
synchronized_Y___
native_Y___
transient___Y_
volatile___Y_
finalYY_YY
访问控制修饰符

(1)面向对象的基本思想之一是封装实现细节并且公开接口。Java语言采用访问控制修饰符来控制类及方法和变量的访问权限,从而只向使用者暴露接口,但隐藏实现细节。

A)public:对外公开。

B)protected:向子类及同一个包中的类公开。

C)默认:向同一包中的类公开。

D)private:只有类本身可以访问,不对外公开。

(2)顶层类只可处于公开或默认访问级别。

(3)成员变量、成员方法和构造方法可以处于4个访问级别中的一个。

(4)访问级别仅仅使用于类及类的成员,而不适用于局部变量。
abstract类

(1)abstract类可以用来修饰类和成员方法。

(2)用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化。没有用abstract修饰的类成为具体类,具体类可以被实例化。

(3)用abstract修饰的方法表示抽象方法,抽象方法没有方法体。

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

(2)没有抽象构造方法,也没有抽象静态方法。

(3)抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法。

(4)抽象类不能被实例化,然后可以创建一个引用变量,其类型是一个抽象类,并让它引用非抽象的子类的一个实例。

(5)abstract与final(abstrac
4000
t必须被继承),private(abstract必须被继承),static(staic方法必须被实现)不能连用。

(6)抽象类一个重要特征是不允许实例化,原因:

A)从语义上,抽象类表示从一些具体类中抽象出来的模型,在自然界中并不存在其本身的实例。

B)从语法上,抽象类中可以包含抽象方法,而抽象方法是没有方法体的。
final修饰符

(1)final可以修饰非抽象类、非抽象成员方法和变量。

(2)用final修饰的类不能被继承,没有子类。

(3)用final修饰的方法不能被子类的方法覆盖。

(4)用final修饰的变量表示常量,其具有以下特征:

A)final修饰符可以修饰静态变量,实例变量和局部变量。

B)final变量必须显示初始化,对于final类型的实例变量,可以在定义变量时,或者在构造方法中进行初始化,对于final型的静态变量,只能在定义变量时进行初始化。

C)final变量只能赋值一次。

D)如果将引用类型的变量用final修饰,那么该变量始终只能引用一个对象,但可以改变对象的内容。

(5)private类型的方法默认是final类型的。

(6)final不能用来修饰构造方法,因为“方法覆盖”这一概念仅适用于类的成员方法。
static修饰符

(1)static修饰符可以用来修饰类的成员变量、成员方法和代码块。

static变量

(1)在类的内部,可以在任何方法内直接访问静态变量;在其他类中,可以通过某个类的类名来访问它的静态变量。
static方法

(1)静态方法可访问的内容

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

静态方法中也不能使用super关键字。

(2)实例方法可访问的内容

直接访问所属类的静态变量、静态方法、实例变量和实例方法。

(3)静态方法必须被实现

(4)作为程序入口的main()方法是静态的

把main()方法定义为静态方法,可以使得Java虚拟机只要加载了main()所属的类就能执行main方法,而无需先创建这个类的实例。

(5)方法的字节码都位于方法区

不管实例方法,还是静态方法,它们的字节码都位于方法区内。Java编译器把Java方法的源程序代码编译成二进制的编码,称为字节码。Java虚拟机的解析器能够解析这种字节码。
static代码块

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

类的构造方法用于初始化类的实例,而类的静态代码块则可用于初始化类,给类的静态变量赋值。

静态代码块不能访问类的实例变量和实例方法,而必须通过实例的引用来访问它们。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息