【问题标题】:Differentiate "static" in Java and in C [closed]区分 Java 和 C 中的“静态”[关闭]
【发布时间】:2018-01-09 07:56:40
【问题描述】:

我同时学习 Java 和 C,当我尝试将这两种语言的一些共同特性联系起来时,我有时会有点困惑。我试图找出 Java 和 C 中“静态”用法的区别,希望有人能指出我的理解方式是否正确。我的逻辑有什么可以改进的吗(也想知道你如何区分这两种语言中“静态”的用法)?

所以在 C 中,当您希望某些特定变量只初始化一次时,使用“静态”。我认为仅此而已。

例如:

int main(void){
    for(int i=0;i<=5;i++){
        static int x=35; //x is only initialized once
        x++;
        printf("%d ",x); //"36 37 38 39 40 41 "will be printed out 
    }
    x++; //This is not allowed as x is not a global variable.
    return 0;
}

但在 Java 中,当您希望某些特定变量或方法可以通过保存变量或方法的类的名称而不是某些对象来访问或调用时,使用“静态”。而且我认为(通常,如果不总是?)您在驱动程序类中执行“ClassName.SomeVariables”或 ClassName.SomeMethods?

因此,“静态”在 C 和 Java 中的用法有很大不同吗?还有一个相关的问题:C 中的“静态”和 Java 中的特性如何实现?

提前致谢。 ^_^

【问题讨论】:

  • 单词在不同的语言中有不同的含义,仅此而已。例如。 “放屁”在荷兰语中意为“速度”。
  • 如果你认为你可以同时学习语言而不会感到困惑,那你就是在自找麻烦。
  • @Bathsheba - 想象一下外交事件 :)
  • “所以在 C 中,当你希望某些变量只初始化一次时,使用“静态”。我想就是这样。” - 不,这还不是全部。 static 在 C 中还有更多内容。
  • 将 Java 与 C++ 进行比较可能更有意义,其中静态的工作方式几乎相同。

标签: java c static


【解决方案1】:

C 中的静态变量

静态变量具有保留其值的属性,即使它们超出了它们的范围!因此,静态变量会在之前的作用域中保留它们之前的值,并且不会在新的作用域中再次初始化。

程序运行时静态变量保留在内存中。当声明变量的函数调用结束时,普通或自动变量将被销毁。

例如它用于跟踪函数被调用的次数。

例如下面的程序打印“1 2”

#include<stdio.h>
int fun()
{
  static int count = 0;
  count++;
  return count;
}

int main()
{
  printf("%d ", fun());
  printf("%d ", fun());
  return 0;
}

但下面的程序打印“1 1”

#include<stdio.h>
int fun()
{
  int count = 0;
  count++;
  return count;
}

int main()
{
  printf("%d ", fun());
  printf("%d ", fun());
  return 0;
}

Java 中的静态变量

在 java 中,静态变量是与类相关联的变量,而不是与该类的对象相关联的变量。

让我们看一个例子。为了使事情尽可能简单,我们将使用一个公共静态变量。如果您还没有遇到公众,请不要担心!在这些特定的例子中,实际上并没有什么区别。

public class Stuff {
    public static String name = "I'm a static variable";
}

现在我们可以在另一个类中访问这个类,

public class Application {

    public static void main(String[] args) {
        System.out.println(Stuff.name);
    }

}

您可以看到,我们可以愉快地访问 Stuff 类中的“name”实例变量,而无需实际创建 Stuff 类型的对象。

另一个用于跟踪现有类的对象数量的示例,

class VariableDemo
{
   static int count=0;
   public void increment()
   {
       count++;
   }
   public static void main(String args[])
   {
       VariableDemo obj1=new VariableDemo();
       VariableDemo obj2=new VariableDemo();
       obj1.increment();
       obj2.increment();
       System.out.println("Obj1: count is="+obj1.count);
       System.out.println("Obj2: count is="+obj2.count);
   }
}

输出:

Obj1: count is=2
Obj2: count is=2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2010-10-30
    相关资源
    最近更新 更多