java中private,static,final,public,abstract关键字的使用模式

时间:2011-02-22 19:59:45

标签: java keyword verbosity

除了抽象之外,我知道所有这些所做的事情。我目前正在用自己认为的中学教育(我的高中是在一个糟糕的社区,因此我被选中)教自己java ...

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

我查阅的每一点信息都准确地解释了这些信息的作用,但没有清楚地说明何时/为何/我应该使用它们。

提前致谢, 安东尼

6 个答案:

答案 0 :(得分:36)

来源告诉我们这些关键字的含义是什么,因为它们的使用时间/原因/地点就是这样。例如,我的解释有“when”这个词,但它们直接来自关键词的语义。

    当在某个类之外没有使用某些东西时,应该使用
  • private
    • 用于方法和字段 - 仅在同一类中使用时
    • for classes - 仅在嵌套类上使用,在同一个类中使用
  • protected时应该使用
    • 表示方法和字段 - 当您需要仅对子类进行访问时
    • for classes - 再次只有嵌套类,可以通过子类
    • 访问
  • public用于每个其他类都可以访问的内容时

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

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

答案 1 :(得分:10)

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

  1. 公开:所有类都应该是公开的(这不是真的,但它非常接近)。对于方法,请考虑一下您的电视机:您期望对电视进行的操作是“公开的”。
  2. 私有:实施细节应该是私有的。想想你的电视机:如果电视的同类物品应该是私人的,那么功能就是私密的,因为用户可以永久地弄乱电视,触电等等。
  3. 受保护:暂时忽略这一点。
  4. 摘要:我在学习Java时读到的最好的例子是思考“鸟”。 Bird是抽象的,因此将采用“抽象”飞行方法。个别鸟类知道如何飞行(除非它们是企鹅 - 然后它们抛出UnsupportedOperationException)。
  5. 我强烈建议你反对使用一个单片源文件的冲动。尽量保持方法短于一个屏幕,并且类别短于300行。

答案 2 :(得分:6)

Bozho很好地介绍了这些关键字的用法,但我要补充一点,如果你根本没有声明一个范围,你的范围就变成了包私有,这意味着与该类相同的包中的任何人都可以使用类/方法。基本上,它比private更宽松,但更不宽容,而只是protected,因为protected允许从包外部进行访问。

有关'无修饰符'访问权限的信息:

我建议您阅读Java教程:

如果你想更多地探索Java,还要看一下书中的问题:

答案 3 :(得分:2)

privatepublicprotected都用于声明变量类的Scope

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

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

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

远离将所有内容放在一个大文件中。使用像Eclipse这样的IDE,它可以很容易地处理每个文件有一个类的代码。它允许您更好地组织代码并封装代码,这样您就不会在一切都知道所有事情的情况下结束。这将导致错误,因为它更容易意外地使用创建的东西来实现不同的目的。

答案 4 :(得分:1)

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

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

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

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

abstract方法没有主体,它们仅具有方法签名。如果常规类扩展了抽象类,则该类必须必须实现抽象父类的所有抽象方法,或者必须也被宣布为抽象

答案 5 :(得分:0)

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

同样在我的头脑中,我相信'公开'是隐含的,所以它不是必需的,但是它的良好做法就是把它放在那里。