在C / C ++中,我们使用静态局部变量维护方法的状态。 但为什么它不支持Java?
是的,我可以用一个静态字段用于此目的。 但是,是不是有点怪创建一个领域保持只有一个方法的状态呢?
在C / C ++中,我们使用静态局部变量维护方法的状态。 但为什么它不支持Java?
是的,我可以用一个静态字段用于此目的。 但是,是不是有点怪创建一个领域保持只有一个方法的状态呢?
你已经找到了解决方案。
Java的下降了一些从C ++的复杂性,这是其中之一。
作用域为函数的静态变量做坏事。你在并发(如strtok的是著名的讨厌一个与并行线程使用,正是这种原因)。
在一般情况下,你要的是有状态的对象。 有问题的功能,那么应该有一个对象级的变量。 然后,您可以创建各自保持状态的实例。
更容易理解/维护/等。
如果你真的需要保持状态,作为一个单身,那么静态字段都是它。
Java语言规范似乎并没有捍卫对应于C变量遗漏static
变量。
在类中的方法隐藏状态从Java的角度观察时,有一些缺点。 一般功能级静态变量的存在是不是那种你要揭露该功能之外执行的细节。
但该方法的状态实际上是类的状态的一部分,和方法级静态变量都必须序列化/反序列化的对象持久化的任何时间。 这可能听起来普通,从C背景的,所以我会注意的几个常见的例子。
如果当对象被持久化的变量的值是值得保存,然后有一个很好的机会,这个类之外的代码需要引用该值。 突然间,这意味着定义访问级别 - 是一个公共方法静态变量自动公开? 或将程序员必须声明是这样呢?
我们还必须考虑可扩展性。 将派生类需要实现同样的静态变量? 或者会有从基类中的函数的变量的引用?
它更可能会使用一个静态局部变量的C法是在Java类一个很好的候选人。 它有状态,希望存在一个单一的目的。 几乎没有缺点封装功能集成到一个对象,它使瞬变值(例如,局部变量)和更长期的状态之间的清晰分离。
一些其他的答案中说明为什么您可能不希望都没有了。 但你也可以从历史的角度问为什么。
要回答这个问题,你必须开始明白为什么ç确实有静态局部变量。 C具有比Java和C ++少得多的手段来限制变量的范围,对静态数据的唯一选项是“里面的文件”和“无处不在”。 因此,这提供了一个额外层,限制范围。
C ++的一个重要方面是具有相容性,因此它被允许在C ++中为好。 不过,这并不需要本地静态范围尽可能多的了,因为还有很多其他的手段来限制静态数据的范围。 使用不(现代)C ++受欢迎。
Java的仅仅花费了很多C / C ++的灵感,它不担心向后兼容,因此它可以被排除在外。
也许是因为方法不是Java对象; 所以保持其状态就像你说的做没有太大意义,我想你必须创建在该字节代码的新概念; 使用对象作为托尼K.说。
实例方法是由类的实例(对象)调用。 一成不变的东西属于一种不这就是为什么局部变量不是static.Instance变量是静态的,他们也可以在类加载的静态块的时候初始化的对象。 在这里输入图像描述
有关更多信息,请访问: - https://www.youtube.com/watch?v=GGay1K5-Kcs&t=119s