Java的静态成员和C++的静态成员之间的区别[关闭]
Posted
技术标签:
【中文标题】Java的静态成员和C++的静态成员之间的区别[关闭]【英文标题】:Difference between static members of Java and static members of C++ [closed] 【发布时间】:2016-03-08 13:31:15 【问题描述】:我学习过 C++,现在我正在学习 Java。在 C++ 中,我们可以在非静态/实例成员函数中使用静态成员。但是在学习 Java 时,我发现了这一点:
我写了一个程序来检查“非静态函数是否可以访问静态成员”。下面的程序没有问题:
public class Animal
static int CountOfAnimal;
public Animal()
CountOfAnimal++;
public int showCount()
CountOfAnimal++;
return CountOfAnimal;
public static void main(String []args)
new Animal();
new Animal();
Animal C = new Animal();
System.out.println("Total animals are : " + C.showCount());
那么,我可以说在 Java 中非静态/实例成员函数也可以访问同一类的静态成员吗?
另外,我想知道Java和C++中的静态成员(方法和变量)除了调用成员的方式有什么不同吗?
我知道的一个区别是在 C++ 中调用静态成员和在 Java 中调用静态成员的方式。还有其他的吗?
【问题讨论】:
can I say that in Java also the non-static/instance member functions can access static members of same class?
是的,你可以。您引用的这段话与此没有任何矛盾,所以不清楚您为什么一开始就怀疑这个命题。
@IgorTandetnik :谢谢,所以java和c++的静态成员没有其他区别(接受调用方式)?
这个问题是基于对引用文本的误解。投票结束。
【参考方案1】:
是的。请注意,它并不是说非静态方法不能访问静态类成员,这是您的代码所做的。它说静态方法不能访问非静态类成员(或方法)。反之亦然。
这对于 C++ 也是如此,其根本原因完全相同。
【讨论】:
【参考方案2】:就像 Sam Varshavchik 提到的“静态方法无法访问非静态类成员”。
对于您的另一个问题,C++ 和 Java 中的静态有什么区别。
C++ 支持静态局部变量。 Java 没有。
例如:在 C++ 中完全有效,但在 Java 中出错。
static int fun()
static int abc = 1;
Java 支持静态块/静态类。 C++ 没有
例如:
static
System.out.println("Static block called");
class TestOuter1
static int data=30;
static class Inner
void msg()System.out.println("data is "+data);
public static void main(String args[])
TestOuter1.Inner obj=new TestOuter1.Inner();
obj.msg();
【讨论】:
C++ 中的所有嵌套类都等价于 Java 中的静态内部类。 C++11 lambdas 在某种程度上等同于 Java 中的非静态内部类,它们捕获局部变量的方式。 @SamVarshavchik 好的,我不知道 C++ Lambda。但是 java 中的静态内部类与 C++ 内部类有很大的不同。 AFAIK,C++ 内部类可以访问外部类的私有变量,但是在 Java 中不支持,因为只允许访问静态变量。所以我会说 C++ 的内部类有点类似于 Java 的内部类,而不是 Java 的静态类。你同意吗? @Infinity,如果这个问题得到了回答。你能接受答案并结束问题吗?以上是关于Java的静态成员和C++的静态成员之间的区别[关闭]的主要内容,如果未能解决你的问题,请参考以下文章