JavaRush /Java 博客 /Random-ZH /修饰符或如何在 Java 世界中施展魔法
Petr Gorskin
第 22 级
Москва

修饰符或如何在 Java 世界中施展魔法

已在 Random-ZH 群组中发布
银河日好,同志们!这是我的第一篇星际手稿,由于我是一名工程师,所以一些概念的解释可以用外星语言来完成。
修饰符或如何在 Java 世界中施展魔法 - 1
简介 在我看来,Java 就像一条有门(包)的无尽走廊。每扇门后面都有可用空间和一个文件柜,其中存储了大量带有创建对象的说明(类)的魔法卷轴。每个卷轴都描述了一组特征(变量)和能力(方法)——对类本身或在其基础上组装的对象执行的操作(字段)。在这个阶段,让我们把自己想象成巫师,并尝试创建一个全新的指令(类)。所以: 修饰符或如何在 Java 世界中施展魔法 - 2让我们喝下智慧的灵丹妙药(学习基础知识)并开始编写说明。 访问和非访问修饰符 让我们想象一下,任何指令和在其基础上创建的对象,以及其特征和能力,最初都会被神奇地迷住,即 他们将被分配特定的修饰符集。让我们尝试创建一个关于可能的魔法的指南。
  1. 描述类、对象或字段的可访问性的访问修饰符是必需的:如果没有访问修饰符,JVM(这是通用魔法的来源)会自动为包分配一个默认标识符。

    从第二个修饰符开始,有非访问修饰符,它们不是强制性的,也可能相互冲突(但首先要注意的是)。

  2. Static修饰符指示类、对象或字段是静态的。但是这是什么意思?基本上我们会在田间尝试。

    静态变量称为类变量,对于该类的所有实例都是唯一的。可以调用静态方法,而无需创建声明它们的对象。静态类用于将一个类嵌套到另一个类中,内部类与外部类之间的交互原理类似于方法(这是单独讨论的主题)。也可以用作对象内的单独块。

  3. Final修饰符有效地向变量表明它是常量。对于方法 - 它们在继承过程中不能被覆盖,但对于类,这表明它不能从中继承(不可变)。

    static 和final 修饰符适用于类、对象和字段。但是,有些修饰符仅适用于其中的某些修饰符(甚至仅适用于其中的一部分,因为变量和方法都是字段,但并非所有修饰符都适用于两者)。打个比方,只有靴子和手套可以附魔速度(让它们移动得更快),但帽子附魔速度是没有意义的(宇宙监督委员会(编译器)不会允许)。

  4. Abstract 修饰符仅适用于方法和类。抽象方法是没有实现(主体)的方法。

    如果一个类被标记为抽象,则它要么包含抽象方法,要么被用来阻止创建该类的实例。如果我们打个比方,在说明的中间你可以看到标题“为对象着色”,之后就没有任何说明了。那些。使用此指令,您可以创建一个对象,也可以为它着色,但此特定指令没有说明如何操作(根据此对象编写您自己的创建红色对象的指令,并描述如何为其着色)。

在多线程环境中工作时,可以使用特殊修饰符:
  1. Synchronized 修饰符仅用于方法。它的存在表明一次只有一个线程可以执行它。也可以用作对象内的单独代码块(指定同步对象)。

  2. volatile修饰符-仅用于变量。建议用于可以被多个线程同时使用的变量。具有此类修饰符的变量每次更改时都会立即从处理器缓存复制到主内存,从而允许并行线程接收最新值。

    值得注意的是,易失性适用于只有一个线程可以写入变量,而其余线程只能读取变量的情况。对于其他情况,最好将synchronized修饰符添加到写入易失性变量的方法中。

  3. Transient修饰符–仅适用于变量。这个修饰符标记了序列化对象时需要跳过的变量(这是一个非常聪明的过程,原则上,您可以自己阅读它......)*

    * - 我在第 17 级写了这篇文章,直到那时,序列化作为一个过程还没有被描述过,所以我建议你在必要时自己研究一下,而不是复制粘贴。

冲突修饰符 对 除了修饰符对各种类、对象和字段的适用性之外,还存在冲突对的概念。假设用力量附魔头盔会使其变重,同时您又想将其附魔变轻。一个与另一个不适合。
  1. Final和Volatile - 当谈到变量时,我们不能同时说它是final(常量)并且多个线程有能力改变它......毕竟,它是常量,并且在任何时候线程都可以读取它,但没有一个线程可以改变常量(通用监督委员会不会允许)。
  2. Final 和 Abstract - 类和方法不能同时是抽象的(这在大多数情况下意味着需要澄清它们的实现)和 Final,即 不可变的。事实证明,说明书说明了如何用任何材料(抽象部分)制造一个良好耐用的头盔,但为此其中不能有任何孔(最终强制部分,无法更改)。
  3. 抽象和静态- 抽象方法不能同时是静态的或同步的。静态抽象方法没有任何意义,因为它不仅不执行任何操作,而且还属于整个类 - 结果是一个无用的东西。
  4. 抽象和同步- 将工作与不执行任何操作的方法同步有什么意义?
总结 那么,修饰符的描述就结束了,所有的冲突都已经解决了,现在你可以用备忘单 - 结界图来巩固结果: 修饰符或如何在 Java 世界中施展魔法 - 3总之,我想说写这篇文章是我的愿望的实现研究修饰符。体验是否成功,由你来判断。我正在等待您改进/纠正它的建议,也许我们将一起将其制作成一本对初学者 Java 玩家非常有用的手册。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION