【问题标题】:Usage patterns for private, static, final, public, abstract keywords in javajava中private、static、final、public、abstract关键字的使用模式
【发布时间】:2011-07-02 06:41:31
【问题描述】:

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

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

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

提前致谢, 安东尼

【问题讨论】:

  • 这就是我认为你刚刚阅读了一篇关于如何在 10 天内学​​习 Java 的文章/书籍。就像 abstract 不是关键字一样,private 和 public 一起出现 static 不会像你说的那样做。实际上我只是感到困惑,我认为您需要多阅读一些内容并就特定事物提出特定问题。
  • @Grammin abstract isn't a keyword?你需要做一些灵魂探索,或者只是更多地阅读自己。 en.wikipedia.org/wiki/List_of_Java_keywords
  • @Richard 是的,那是我的错误,我现在在 c++ 世界中,对那个错误感到抱歉。话虽如此,我的观点仍然有效
  • 官方教程是学习java的好资源,《Trails Covers the Basics》第二部分应该对一些人有所帮助download.oracle.com/javase/tutorial
  • 顺便说一句,我不喜欢“冗长”标签。不是说java不冗长,而是因为这些关键字。

标签: java keyword verbosity


【解决方案1】:

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

  • private 应该在给定类之外不使用某些东西时使用
    • 用于方法和字段 - 仅在同一类中使用时
    • 对于类 - 仅在嵌套类中使用时,在同一类中使用时
  • protected 应在以下情况下使用
    • 用于方法和字段 - 当您需要让它们仅可供子类访问时
    • 对于类 - 再次只有嵌套类,子类可以访问
  • public 用于所有其他类都可以访问某些内容时

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 是的,我来自 Python,其中大多数文件只在一个文件中包含所有源代码。我不打算在 Java 中构建巨大的项目,现在只是将它用于小任务,而且由于我没有经验,当它们被分成 100 个不同的文件时,很难跟踪所有类。这个问题主要是为了帮助更好地理解我的python知识并将其映射到java的工作原理。
    【解决方案3】:

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

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

    我建议阅读 Java 教程:

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

    【讨论】:

      【解决方案4】:

      privatepublicprotected都用于声明变量类的Scope

      static 表示被定义的事物是类的成员,而不是类实例的对象。

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

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

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

      【讨论】:

        【解决方案5】:

        private 方法是一种在其引入范围之外的任何其他对象都无法访问的方法。

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

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

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

        abstract 方法没有主体,它们只有方法签名。如果常规类扩展了抽象类,则该类必须实现抽象父类的所有抽象方法或必须声明也是抽象的

        【讨论】:

          【解决方案6】:

          为了了解这些关键字的使用时间/原因/位置,您必须掌握面向对象编程和 Java 的一些关键概念。我建议调查EncapsulationPolymorphism

          另外,我认为“公开”是隐含的,所以它不是必需的,但它是一种很好的做法。

          【讨论】:

          • 在 Java 中,在大多数(或者可能是所有?)情况下,“包”可见性是默认的
          猜你喜欢
          • 2012-12-30
          • 2013-05-19
          • 2020-03-10
          • 2022-08-22
          • 2010-11-13
          • 1970-01-01
          • 2014-09-24
          • 2015-07-28
          • 1970-01-01
          相关资源
          最近更新 更多