12

我知道除了抽象之外所有这些都做了什么。我目前正在通过我认为是中学水平的教育自学java(我的高中在一个糟糕的社区,所以我被淘汰了)......

但是这些关键字的使用模式到底是什么?我什么时候用什么?我什么时候省略它们?将“public”放在我的类前面会使每个使用它的类都需要一个新文件,如果我想创建一个单一的源文件,我可以省略它吗?

我查找的每一点信息都准确地解释了它们的作用,只是没有清楚地说明我应该何时/为什么/在哪里使用它们。

在此先感谢,安东尼

4

6 回答 6

40

来源告诉这些关键字的含义是什么,因为它们的使用时间/原因/位置由此而来。例如,我的解释有“何时”这个词,但它们直接来自关键字的语义。

  • private应该在给定类之外不使用某些东西时使用
    • 对于方法和字段 - 当它们仅在同一类中使用时
    • 对于类 - 仅在嵌套类中使用时,在同一个类中使用
  • protected应该在什么时候使用
    • 用于方法和字段 - 当您需要使它们仅可供子类访问时
    • 对于类——同样只有嵌套类,子类可以访问
  • public当其他所有类都可以访问某些东西时使用

以上三个是“可见性修饰符”。当您想将某些方法/字段/类的使用限制为一组对象并将它们隐藏在其他对象中时,可以使用它们。还有另一个可见性修饰符 - 默认值(当没有其他修饰符时)。当您希望您的类/方法/字段只能被同一包中的类访问时使用它。

  • static当您不需要类的实例(即对象)来使用它时使用它:
    • 对于字段 - 当您想要一个全局字段时
    • 对于方法 - 当您需要不依赖于对象状态的实用函数时
    • 对于嵌套类 - 当您想要在没有封闭类实例的情况下访问它们时。
  • abstract当您不想在当前类中提供实现时:
    • on methods - 当子类必须提供实际的实现,但你想在这个类中调用这些方法(不管它们是如何实现的)。
    • on classes - 表示该类可能有抽象方法。
  • final- 当你不想改变的时候。
    • 在字段上,当您只想分配一次值时。当您想将局部变量传递给内部类时,它很有用 - 您必须将其声明为 final。
    • 关于类和方法 - 当您不希望子类能够扩展/覆盖它们时。
于 2011-02-22T20:08:59.983 回答
10

对于初学者,这是我的经验法则:

  1. Public:所有类都应该是公共的(这不是很正确,但非常接近)。对于方法,请考虑您的电视机:您希望对电视机做的事情是“公开的”。
  2. 私有:实现细节应该是私有的。想想你的电视机:如果电视的同等功能应该是私有的,那么功能就是私有的,因为用户可能会永久性地弄乱电视,触电等等。
  3. 受保护:暂时忽略它。
  4. 摘要:我在学习 Java 时读到的最好的例子就是思考“鸟”。鸟是抽象的,因此会有一个“抽象”的飞行方法。个别鸟类知道如何飞行(除非它们是企鹅 - 然后它们会抛出 UnsupportedOperationException)。

我强烈建议您抵制使用单一源文件的冲动。尽量让方法短于一屏,类短于 300 行。

于 2011-02-22T20:07:41.757 回答
6

Bozho 已经很好地涵盖了关键字的用途,但我要补充一点,如果您根本不声明作用域,您的作用域将变为包私有,这意味着与该类位于同一包中的任何人都可以使用该类/方法. 基本上,它比 更宽松private,但比 just 更宽松protected,因为它protected允许从包外部访问。

有关此处“无修饰符”访问的信息:

我建议阅读 Java 教程:

如果您想探索更多 Java,还可以查看书中的问题:

于 2011-02-22T20:11:59.537 回答
2

private,public并且protected都用于声明变量的类的作用域

static意味着被定义的事物是类的成员,而不是类实例的对象。

abstract表示类不能直接创建,只能被子类使用。抽象方法可以在抽象类中定义,这意味着任何子类都必须定义与定义的签名匹配的方法。

final意味着变量只能在创建时被分配一次。最终类/方法不能分别被继承/覆盖。

不要将所有内容都放在一个大文件中。使用像 Eclipse 这样的 IDE,它将使处理每个文件具有一个类的代码变得容易。它使您可以更好地组织代码和封装代码,这样您就不会陷入无所不知的境地。这将导致错误,因为很容易意外地使用为不同目的而创建的东西。

于 2011-02-22T20:07:09.967 回答
1

private方法是不能被引入范围之外的任何其他对象访问的方法。

方法static是属于类而不是类的实例的方法。类的每个实例都可以访问该方法,但实例中定义的方法只能由类的该成员访问。

final关键字在多个上下文中用于定义只能分配一次的实体。

成员对public所有其他类可见。这意味着任何其他类都可以访问public字段或方法。

方法没有主体,abstract只有方法签名

于 2019-09-03T14:24:58.223 回答
0

为了理解这些关键字的使用时间/原因/位置,您必须掌握面向对象编程和 Java 的一些关键概念。我建议研究封装多态性

同样在我的脑海中,我相信“公共”是隐含的,所以它不是必需的,但它是一种很好的做法。

于 2011-02-22T20:05:57.067 回答