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++的静态成员之间的区别[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

java static注意事项

Java中静态成员与实例成员的使用方法和区别

静态成员和非静态成员的区别?

c# 静态成员和实例成员的区别

C++ 中static 和final的区别是啥

c++中静态成员变量和静态成员函数(笔试经历)