我学过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中调用静态成员。还有其他吗?
答案 0 :(得分:2)
是。请注意,它并未说明非静态方法无法访问静态类成员,这是您的代码所执行的操作。它说静态方法不能访问非静态类成员(或方法)。反过来了。
对于完全相同的,潜在的,根本原因,C ++也是如此。
答案 1 :(得分:0)
就像Sam Varshavchik提到的那样,静态方法无法访问非静态类成员"。
对于您的其他问题, C ++中的静态与之间的区别
。C ++支持静态局部变量。 Java没有。
Ex:在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();
}
}