静态成员函数为什么不可以调用非静态成员函数?
普通成员函数都有一个隐藏的this指针,而静态成员函数没有(静态只能访问静态,非静态可以访问静态)。
注:静态成员函数可以不需要类的实例就直接使用,非静态的成员函数很可能用到一些成员变量,而成员变量的创建和初始化是在创建了类的实例时在构造函数调用的时候才进行的。 如果允许静态成员函数调用非静态的成员函数,那么就很有可能使用到未创建也未初始化的成员变量,这是完全不符合逻辑的。所以不能这么调用。
静态属性和非静态属性的区别:
1、在内存中存放位置不同 所有带static修饰符的属性或者方法都存放在内存中的方法区 而非静态属性存放在内存中的堆区
2、出现时机不同 静态属性或方法在没创建对象之前就已经存在 而非静态属性在创建对象之后才存在
3、静态属性是在某个类中的所有对象是共享的
4、生命周期不同 静态属性在类消失之后才销毁 而非晶态属性在对象销毁之后才销毁
5、静态属性可以直接通过类名直接访问 ,非静态属性不能通过类直接访问只能通过对象访问
使用static的注意事项:
1、带有静态修饰符的方法只能访问静态属性
2、非静态方法即能访问静态属性也可以访问非静态属性
3、非静态方法不能定义静态变量
4、静态方法中不能使用this关键字
5、静态方法不能调用非静态方法反之可以