Java基础知识之修饰符

本文详细介绍了Java语言中的各种修饰符,包括访问控制修饰符(public, protected, 默认, private)、抽象类与抽象方法(abstract)、最终类与最终方法(final)、静态成员(static)、同步方法(synchronized)、本地方法(native)、瞬态变量(transient)和易失性变量(volatile)。文中还阐述了这些修饰符如何应用于类、成员方法、构造方法和成员变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一下,Java语言中的修饰符。对于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(abstract必须被继承),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虚拟机将按照它们在类中出现的顺序依次执行它们。
类的构造方法用于初始化类的实例,而类的静态代码块则可用于初始化类,给类的静态变量赋值。
静态代码块不能访问类的实例变量和实例方法,而必须通过实例的引用来访问它们。

 

synchronized修饰符

synchronized修饰的方法只允许一个线程访问,运行该方法的线程将得到锁,想要其它线程运行该方法只能等方法运行完,或用wait()方法释放锁,在同一类中的多个synchronized方法 一同样不能被同时执行,只能等到一个方法访问结束后,另一个方法才能接着运行。

 

native修饰符

Native Method就是一个java调用非java代码的接口。

 

transient修饰符

用来标识一个成员变量在序列化子系统中应被忽略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值