Java修饰符必须要弄懂的知识点

Java语言提供了很多修饰符,主要分为以下两类:

  • 访问修饰符

  • 非访问修饰符

修饰符用来定义类、方法或者变量,通常放在语句的最前端。


访问控制修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

  • public : 对所有类可见。使用对象:类、接口、变量、方法

  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

我们可以通过以下表来说明访问权限:
修饰符当前类同一包内子孙类(同一包)子孙类(不同包)其他包
protectedYYYY/N(说明N
defaultYYYNN
publicYYYYY
privateYNNNN

如果是默认的访问修饰符-可以使用default或者什么都不写


私有的访问修饰符-private

最严格的访问级别修饰符,被修饰的方法变量都只能被所属类访问,并且类和接口不能声明为private。这是面向对象的基本,合理暴露合理开放。在开发中使用private来隐藏类的实现细节和保护类的数据,因此声明为private的变量,必须在类中生成getter、setter方法,供外部类访问。


公有的访问修饰符public

被声明为public的类、方法、接口等能被任意类访问,只需要导包即可,并且由于面向对象的三大特性中的继承,类中所有的共有方法和变量都能够被其子类继承。


受保护的访问修饰符-protected

protected 需要从以下两个点来分析说明:

  • 子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;

  • 子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。

PS:在面向对象设计中,被定义为包含所有实体共性的class类型,被称为“基类”。

protected 可以修饰数据成员,构造方法,方法成员,不能修饰类(内部类除外)

接口及接口的成员变量和成员方法不能声明为 protected。


访问控制和继承

请注意以下方法继承的规则:

  • 父类中声明为 public 的方法在子类中也必须为 public。

  • 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。

  • 父类中声明为 private 的方法,不能够被子类继承。

protected 是最难理解的一种 Java 类成员访问权限修饰词,更多详细内容请查看 Java protected 关键字详解


非访问修饰符

为了实现一些其他的功能,Java 也提供了许多非访问修饰符。
static 修饰符,用来修饰类方法和类变量。
final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
class 修饰符用来声明是类。
abstract 修饰符,用来创建抽象类和抽象方法。
extends 修饰符用来声明继承某类。
interface 修饰符用来声明是接口。
implements 修饰符用来实现某接口。
synchronized (同步锁、线程)和 volatile(易失) 修饰符,主要用于线程的编程。
transient 修饰符 短暂的意思包含在定义变量的语句中,用来预处理类和变量的数据类型。
volatile 修饰符用来表示易失去,修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。

下面是修饰符的详细描述

static 修饰符

  • 静态变量:

    static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。

  • 静态方法:

    static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。


final 修饰符

  • final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。

  • 被 final 修饰的实例变量必须显式指定初始值

  • final 修饰符通常和 static 修饰符一起使用来创建类常量


abstract 修饰符

  • 抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充

  • 一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。(即若有抽象方法必为抽象类,抽象类不一定有抽象方法)

  • 抽象类可以包含抽象方法和非抽象方法


synchronized 修饰符

synchronized 关键字声明的方法同一时间只能被一个线程访问。


transient 修饰符

序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。

该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。


volatile 修饰符

  • volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。

  • 这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

  • 一个 volatile 对象引用可能是 null。


结尾语:记录于2023年7月19号15时40分,以上仅为个人在菜鸟教程—Java修饰符的学习过程中遇到的问题,还有记录的个人想法,有错误欢迎指出,感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stevedash

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值