作为 Codegym 大学课程一部分的导师授课片段。报名参加完整课程。


“你好,阿米戈!听说你已经掌握了很好的方法?”

“嗨,Rishi。是的,我已经成功破解了那个老师的诡计。我会说它还不错,但你会告诉我,‘不,不!你什么都没弄清楚。 '"

“你明明跟某些老师聊的太久了,估计是和迪亚哥聊的太多了。总之……我还是希望你对方法的理解足够好,毕竟今天我要教你一些有助于勾画方法的神奇词汇。” ‘势力范围’。”

“听起来很有趣。”

“其实,这一切都很简单。在每个方法之前,程序员可以指定所谓的访问修饰符。这些包括以下关键字:public, protected, private

“这些访问修饰符让您可以限制其他类对方法的访问。

“例如,如果您private在方法声明之前写关键字,则只能从声明它的同一个类中调用该方法。关键字public允许从任何类的任何方法访问标记的方法。

这样的修饰符一共有3个,但是一个方法的访问有4种。这是因为没有访问修饰符也意味着一些事情。这是一个完整的表格:

从...访问
修饰符 任何班级 儿童班 它的包装 它的班级
public 是的 是的 是的 是的
protected 是的 是的 是的
没有修改器 是的 是的
private 是的

“这里是访问修饰符的完整解释:

1.public修改器

可以从程序的任何地方public访问用修饰符标记的方法(或变量,或类)。这是最高程度的开放——没有限制。

2.private修改器

用修饰符标记的方法(或变量,或类)只能从声明它的同一个类中private访问。对于所有其他类,标记的方法(或变量)是不可见的。就好像它不存在一样。这是最高级别的限制——只有它自己的类。

3.无修饰符(默认修饰符)

如果一个方法(或变量)没有用任何修饰符标记,那么它被认为具有“默认修饰符”。具有该修饰符(即根本没有)的变量或方法对于声明它们的包中的所有类都是可见的。并且只对他们。这个修饰符有时也被称为package-private,暗示对变量和方法的访问是对它们的类​​所在的整个包开放的。

4.protected修改器

如果方法用修饰符标记protected,则可以从同一个类、同一个包和后代(继承声明该​​方法的类的类)访问它。我们将在 Java Core 探索中更详细地分析这个主题。”

“很有趣,但我不确定我是否可以立即将这些修改器放在所有正确的地方。

“您会逐渐到达那里。无需提前担心。在完成 Java 语法任务之前,您可以在所有public方法(以及类和实例变量)上使用修饰符。您将需要当我们开始积极学习 OOP 时其他修饰符。”

“你能更详细地解释一下为什么需要访问修饰符吗?”

“对于同时由数十名和数百名程序员编写的大型项目,它们变得必不可少。

“有时会有这样的情况,当一个程序员想要将一个过大的方法拆分成多个部分并将部分代码移动到辅助方法中。但与此同时,他或她又不希望其他程序员调用这些辅助方法,因为相应的代码可能无法正常工作。”

“所以他们想出了这些访问修饰符。如果你用private这个词标记一个辅助方法,那么除了你的类之外没有任何代码可以看到你的辅助方法。”

“我想我明白。”

static关键词

“还有另一个有趣的关键字。它是static。不出所料,它使方法成为静态的。”

“这意味着什么?”

“稍后我会告诉你更多关于它的信息。别担心。现在,只要试着记住一些关于静态方法的事实。

事实 1.静态方法不附加到任何对象,而是属于声明它的类。要调用静态方法,您需要编写:

ClassName.MethodName()

静态方法的例子:

班级名称 静态方法名
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

如果从其类中调用静态方法,则可以省略静态方法名称之前的类名。这就是为什么您不需要在调用的每个静态方法的名称之前写上的原因。Solution

事实 2.静态方法无法访问其自身类的非静态方法。静态方法只能访问静态方法。结果,我们声明了我们想要从main静态方法调用的所有方法。”

“这是为什么?”

“当你开始学习 OOP 并了解静态方法的工作原理时,你会自己回答这个问题。在那之前,请相信我。

throws关键词

“您可能在方法声明中看到了另一个关键字——关键字throws。与访问修饰符和static关键字不同,此关键字位于方法参数之后:

public static Type name(parameters) throws Exception
{
  method body
}

“这是什么意思?”

“我必须再次告诉你,当我们学习异常时(第 15 级),你将在稍后了解它的真正用途。

但是从表面上看,我们可以说用关键字标记的方法可以抛出错误(异常),这意味着该类(以及继承它的类)throws的实例。Exception如果一个类中可能出现几种不同类型的错误,那么您需要列出每一种错误,并用逗号分隔。”

“听起来神秘莫测!我得等14级了。”

主要方法

“现在让我们仔细看看 main 方法。您已经了解声明方法的行,其中包含所有修饰符,将影响如何从其他类和方法调用此方法。此外,它会影响类型result 该方法将返回并指示在运行时可能出现的错误。

“这样的一行称为方法声明,一般格式如下:

access modifier static Type name(parameters) throws exceptions
方法声明的一般格式

哪里access modifiers被替换为public, protected, private, 或什么都没有;

如果方法是静态的,则static出现关键字(非静态方法不存在)

Type是返回值的类型(void如果没有结果)

“现在你对方法声明中所有这些词的含义有了更好的理解main

public static void main(String[] args) throws Exception
声明main方法

“好吧,现在我意识到可以从任何类访问该main()方法,如关键字所示public。该方法是静态的,因此可以显式调用它Solution.main()。”

“该main()方法返回什么结果?”

“一点都没有!结果类型是void。它有点像一个空类型,一个占位符。”

main()括号里是什么?”

“嗯……事实证明,该main方法采用参数(!)。它们作为字符串数组传入。”

“没错。参数名称args在我们的脑海中暗示了‘参数’。当程序启动时,你可以向它传递参数——一个字符串数组。它们将包含在方法args的数组中main()。”

“哇哦!我第一次看到的时候还纳闷呢,后来就习惯了,不假思索就开始写参数表了。”

“我们都去过那里。最后,方法Exception中可能会出现未处理的错误(或其后代)main()。我们知道这要归功于throws Exception声明的一部分。”

“谢谢你,Rishi。我不是什么都明白,但这很有趣。”

“不客气。我敢肯定,你会逐渐理解所有这些微妙之处。”