2016-03-08 110 views
3

我学习了C++,现在正在学习Java。在C++中,我们可以在非静态/实例成员函数中使用静态成员。但是,在学习Java的我发现这一点:Java的静态成员和C++的静态成员之间的区别

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中调用静态成员。任何其他?

+1

'我可以说,在Java也非静态/实例成员函数可以访问同一类的静态成员'是的,你可以吗?。你所引用的这段话并不矛盾,所以目前还不清楚为什么你一开始就怀疑这个提议。 –

+0

@IgorTandetnik:谢谢,所以java和C++的静态成员之间没有其他区别(接受调用的方式)? – Infinity

+0

这个问题是基于对引用文本的误解。投票结束。 – Galik

回答

2

是的。请注意,它并没有说非静态方法不能访问静态类成员,这就是你的代码所做的。它表示静态方法不能访问非静态类成员(或方法)。这是相反的方式。

对于完全相同的基本原因,C++也是如此。

0

像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(); 
    } 
} 
+0

C++中的所有嵌套类都等同于Java中的静态内部类。 C++ 11 lambda表达式与Java中的非静态内部类相当,它们以捕获本地变量的方式。 –

+0

@SamVarshavchik好吧,我不知道C++ Lambda。但是Java中的静态内部类与C++内部类很不相同。 AFAIK,C++内部类可以访问外部类的私有变量,但是由于只允许访问静态变量,所以Java中不支持这些变量。 所以我会说C++的内部类有点类似于Java的内部类而不是Java的静态类。你会同意吗? –

+0

@Infinity,如果这被回答。你能接受答案并解决问题吗? –