为什么Java方法中不允许像C/C++;功能?
在C和C++中,您可以执行以下操作:为什么Java方法中不允许像C/C++;功能?,java,c++,c,variables,Java,C++,C,Variables,在C和C++中,您可以执行以下操作: void foo() { static int i = 0; ++i; } 但是,在Java中,您会得到一个“参数的非法修饰符”错误: public void foo() { static int i =0; ++i; } 我并不是在寻找为什么或者为什么这不是一个好主意/坏主意的原因。我只是好奇为什么这在C/C++中是合法的,而不是JavaJava是一种功能贫乏的语言。它不愿意添加除最简单的功能集之外的其他功能,这些功能集将允许
void foo()
{
static int i = 0;
++i;
}
但是,在Java中,您会得到一个“参数的非法修饰符”
错误:
public void foo()
{
static int i =0;
++i;
}
我并不是在寻找为什么或者为什么这不是一个好主意/坏主意的原因。我只是好奇为什么这在C/C++中是合法的,而不是JavaJava是一种功能贫乏的语言。它不愿意添加除最简单的功能集之外的其他功能,这些功能集将允许您编写好的程序。这意味着许多模糊的特性,甚至一些在其他语言中可用的非常有用的特性,在Java中都不可用,因为通常有另一种方法来做同样的事情,或者有更好的方法,或者他们已经决定,如果没有这一功能,你会更好 在本例中,我怀疑这是因为您可以将字段放在方法之外,并执行大致相同的操作
顺便说一句:Java确实有方法本地命名类,这些类很少使用,如果它们是最简单的,Java也不需要这些类 Java是一种功能较差的语言。它不愿意添加除最简单的功能集之外的其他功能,这些功能集将允许您编写好的程序。这意味着许多模糊的特性,甚至一些在其他语言中可用的非常有用的特性,在Java中都不可用,因为通常有另一种方法来做同样的事情,或者有更好的方法,或者他们已经决定,如果没有这一功能,你会更好 在本例中,我怀疑这是因为您可以将字段放在方法之外,并执行大致相同的操作
顺便说一句:Java确实有方法本地命名类,这些类很少使用,如果它们是最简单的,Java也不需要这些类 < P>代码> static < /COD>函数范围变量在C++中是有用的,以避免“静态初始化顺序Fasaso”。这在Java中是不必要的,因为它已经很好地指定了静态初始化的顺序 我想最好避免这些变量,因为它会导致混乱的行为:
some_code();
static int x = something();
some_code();
其中something()
仅在第一次调用时被调用,而其他指令在您使用此函数时随时被调用
默认情况下,没有实现特征。
< >代码>静态< /COD>函数范围变量在C++中是有用的,以避免“静态初始化顺序Fasaso”。这在Java中是不必要的,因为它已经很好地指定了静态初始化的顺序 我想最好避免这些变量,因为它会导致混乱的行为:some_code();
static int x = something();
some_code();
其中something()
仅在第一次调用时被调用,而其他指令在您使用此函数时随时被调用
另外,默认情况下不会实现功能。因为它们是不同的语言&James Gosling不像Bjarne Stroustrup那样喜欢
static
。为什么不呢?这意味着什么?因为这就是语言的定义。请记住,这种语言是由确信enum
没有用处的人设计的。@bn。所以,总的来说,这不是一个询问设计决策理论的好地方。绝大多数会员都不是任何语言的设计师,很少有人会问。也有例外,特别是C#感谢Eric Lippert的贡献;以及一些维护人员是活动成员的库。但总的来说,你可能得到的答案是或多或少有根据的猜测,或者“因为有人打了那个电话而不是另一个”。@fge甚至不接近static
。为什么不呢?这意味着什么?因为这就是语言的定义。请记住,这种语言是由确信enum
没有用处的人设计的。@bn。所以,总的来说,这不是一个询问设计决策理论的好地方。绝大多数会员都不是任何语言的设计师,很少有人会问。也有例外,特别是C#感谢Eric Lippert的贡献;以及一些库,其维护人员是活动成员。但总的来说,你可能得到的答案是或多或少有根据的猜测,或者“因为有人打了那个电话而不是另一个”。@fge甚至不接近