Java的静态成员与C ++的静态成员之间的区别

时间:2016-03-08 13:31:15

标签: java c++ class static

我学过C ++,现在我正在学习Java。在C ++中,我们可以在非静态/实例成员函数中使用静态成员。但是在学习Java时我发现了这个:

enter image description here

我编写了一个程序来检查“非静态函数是否可以访问静态成员”。并且下面的程序没有问题:

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中调用静态成员。还有其他吗?

2 个答案:

答案 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();  
  }  
}