java private 函数_关于Java:公共方法和私有方法

我正在检查StringTokenizer.java班,有几个问题浮现在我的脑海中。

我注意到其他类使用的公共方法调用了一些私有方法,这些方法完成了所有的工作。现在,我知道了ood的一个原则是尽可能多地进行私有化,并隐藏所有实现细节。但我不确定我是否完全理解这背后的逻辑。

我理解,将字段设为私有字段非常重要,以防止在其中存储无效值(这只是许多原因之一)。然而,当涉及到私有方法时,我不知道它们为什么如此重要。

例如,在StringTokenizer类的情况下,我们不能将所有实现代码都放在公共方法中吗?因为这些方法的API(即调用这些公共方法的规则)将保持不变,所以它对使用这些方法的类有何不同?我能想到为什么私有方法有用的唯一原因是它可以帮助您编写重复的代码。例如,如果所有公共方法都做了相同的事情,那么您可以声明一个私有方法,该方法执行此任务,并且可以由公共方法使用。

另一个问题是,用私有方法而不是公共方法编写实现的好处是什么?

下面是一个小例子:

public class Sum{

private int sum(int a, int b){

return a+b;

}

public int getSum(int a, int b){

return sum(a,b);

}

}

对…

public class Sum{

public int getSum(int a, int b){

return a+b;

}

}

第一个样本如何更有益?

为了添加一些内容,可以安全地更改私有方法,因为您可以确信,只有从自己的类调用私有方法,没有外部类能够调用私有方法(它们甚至看不到)。

因此,拥有一个私有方法总是很好的,因为您知道更改它没有问题,即使您可以安全地向该方法添加更多参数。

现在考虑一个公共方法,任何人都可以调用该方法,因此如果添加/删除一个参数,您还需要更改对该方法的所有调用。

我不明白你的意思。请原谅我错过了什么。Iyou说:"所以拥有一个私有方法总是很好的,因为你知道改变它是没有问题的,即使你可以安全地为这个方法添加更多的参数。"但是面向客户机的公共API仍然是相同的。因此,您可以在公共方法中编写所有逻辑,或者在公共方法中调用函数,或者执行查看公共API的客户机没有观察到的任何操作。实现中的代码仍然可以在任何时间点进行更改,这与更改私有函数的合同/实现一样有效。

@在这个特殊的例子中,是的,它是相同的API,但是你仍然不能保证它在将来会保持不变。根据我自己的经验,我可以从"噢,让我们直接公开它,如果将来我们需要它私有化,我们会改变它"的想法中建议您,最终会发生的是,这种方法从未成为私有化的,所以最好在开始时有一点过度的架构,而不是在以后做一个巨大的重构。

如果一个公共方法调用了您"没有问题"更改的私有方法,那么公共方法是否也不会中断?如果是这样的话,"安全地改变"的任何东西都没有真正的区别;无论你改变什么,都必须经过测试——公开/私有化不会给你任何额外的安全保障。

The only reason I could think of why private methods are useful is because it helps you from writing duplicate code.

除了合并重复的代码(通常表示为"不要重复自己"或"dry"),使用私有方法还可以帮助您构造和记录代码。如果你发现自己写的方法可以做很多事情,你可能会考虑把它分成几个私人的方法。这样做可能会使每个逻辑块的输入和输出更加清晰(粒度更细)。此外,描述性方法名称可以帮助补充代码文档。

是的,我同意你的看法。我想问的问题是,与公共方法相比,用私有方法编写实现代码有什么好处?如果我们将所有代码放在公共方法中,这会有什么区别?本质上,我们仍然以相同的方式调用公共方法,并且我们仍然希望它返回与以前相同的结果。

@用户600194保持代码私有隐藏了实现细节,并允许实现在不中断API使用者的情况下进行更改。隐藏/封装的级别通常是任意的(有时是反复无常的)。

声明方法private的目的是

隐藏实现详细信息

不将该方法列为公共API

确保代码背后的逻辑不会在外部使用/误用

大多数时候,方法的执行依赖于它之前运行的其他方法;然后,您还可以确保控制使用方法的正确顺序。

对方法使用private,除非您希望在类上下文之外安全地使用方法。

公共方法通常是实现该类的其他类想要使用的代码。私有方法在类外部通常没有那么有用,或者(单独)不服务于类要实现的目标。

假设您在您的IDE中选择,并且您实现了一个类A。类A只设计用于做一件事情,比如说文档生成。当然,您将在类A中有一些数学和字节操作方法,这些方法是进行文档生成所必需的,但是试图使用类A的人不需要这些其他方法,因为他们只需要一个文档。因此,我们将这些方法设置为私有的,以便为我们类的任何未来用户保持简单的操作。

当用Java或任何其他面向对象语言编写干净代码时,通常最干净的最可读代码由简短简洁的方法组成。通常情况下,一个方法中的逻辑可以更好地用单独的方法调用来表示,以使代码更干净、更易于维护。

考虑到这一点,我们可以设想这样的情况:您有许多方法来执行任务以实现一个目标。想想一个只有一个复杂目的的类。该单一目标的入口点可能只需要一个起点(一个公共方法),但需要许多其他方法,这些方法是复杂操作的一部分(许多私有帮助方法)。

使用私有方法,我们能够隐藏逻辑,而逻辑不是也不应该从类本身之外的任何地方访问。

在公共类中使用私有方法的一个优点也是一个很好的理由是为了安全和防止bug。声明为私有的方法只能由它们所属的类访问。这意味着您的私有方法不能意外地从程序内的其他地方调用,从而减少错误和其他并发症。如果您声明您的方法是公开的,那么整个问题都可以访问它,并可能导致复杂的情况。

您可能有许多方法处理某个数据块,而您不希望程序的任何其他部分能够干扰这些数据块。通过私有方法和/或变量使用数据封装有助于防止这种情况的发生,并使代码更易于跟踪和记录。

在以下情况下,将函数设为私有会给您带来优势:

使函数私有化使JVM编译器可以选择嵌入函数,从而提高应用程序性能

如果类是可继承的,并且您从子类扩展它,那么如果您想从子类隐藏函数,那么您可以这样做(您可以扩展StringTokenizer)。

如果一段代码必须在多个函数中使用,则可以在专用实用程序方法中移动该代码。

您的3不是私有的优势;共享代码可以是公共的,也可以是私有的。

好的,为了进一步解释我的观点,假设您有一组算法实现函数(全部公开)。现在,如果您的不同API需要计算两个数字平方和的平方根,那么最好将此逻辑移动到一个以两个数字为输入的私有函数中。公开这样一个函数可能没有多大意义,因为您的类正在为不同的算法问题提供解决方案。使这样一个函数成为公共函数可能会破坏该类的定义。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值