我已经学习了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语言中调用静态成员的方式不同。还有其他的吗?
发布于 2016-03-08 21:33:37
是。注意,它并不是说非静态方法不能访问静态类成员,而这正是您的代码所做的。它说明静态方法不能访问非静态类成员(或方法)。情况正好相反。
出于完全相同的、潜在的、根本的原因,C++也是如此。
发布于 2016-03-08 21:46:17
就像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();
}
} https://stackoverflow.com/questions/35868806
复制相似问题