static小结
static:静态的,用来修饰成员变量和函数,不能修饰构造函数;
静态函数:被static关键字修饰的函数就是静态函数;
静态函数的格式:将static关键字写在函数的返回值类型前面
静态函数的特点:
1、和类的对象无关,可以直接通过类名调用
2、只能调用静态函数和静态成员变量,不能使用和类的对象有关的成员(this关键字;super关键字;非静态成员变量;非静态函数;)
原因:非静态函数和非静态成员变量都必须依赖类的对象使用;
而静态函数使用都不需要有对象,所以在静态函数中不能直接调用非静态函数和非静态成员变量;
3、非静态函数可以调用静态函数和非静态函数,也可以使用静态成员变量和非静态成员变量;
原因:非静态函数只能通过类的对象使用;如果可以调用非静态函数,说明此时已经存在对象;
已经存在对象,说明类已经加载完毕;
类已经加载完毕,所以静态函数肯定可以使用;
4、构造函数不能是静态的
因为构造函数是在创建对象的时候用来给对象的成员变量赋值用的;如果构造函数可以是静态的,就不需要对象就能使用,就没有意义;
静态成员变量:被static修饰的成员变量就是静态成员变量;
静态成员变量的格式:将static关键字写在成员变量的数据类型前面;
静态成员变量的特点:
1、和类的对象无关,直接通过类名调用;
2、保存在方法区的静态区域,被该类的所有对象共享;
3、在类加载完成时就完成空间分配和赋值;
什么时候应该使用静态函数和静态成员变量?
不需要对象,和对象无关的时候,就需要定义为静态成员;
(静态成员变量又叫做类变量、类字段;静态函数又叫做类函数、类方法)
什么时候不能将函数定义为静态的?
如果一个函数中使用了非静态成员变量,就不能将其定义为静态的函数;
静态成员变量和非静态成员变量的区别:
1、从保存位置:
a) 静态成员变量:保存在方法区的静态区域
b) 非静态成员变量: 保存在堆内存的对象空间中
2、从书写格式上看:
a) 静态成员变量: 需要使用static关键字修饰,将static关键字直接写在数据类型前面;
b) 非静态成员变量: 不需要使用static关键字修饰;
3、从生命周期上看:
a) 静态成员变量: 类加载的时候就分配空间和赋值;直到这个类被卸载(或者整个程序结束);
b) 非静态成员变量: 创建对象的时候才分配空间和赋值;对象成为垃圾空间被回收的时候;
4、从使用方法上看:
a) 静态成员变量: 可以直接通过类名使用,和类的对象无关;
b) 非静态成员变量: 必须通过类的对象使用;
5、从修改后的影响范围上看:
a) 静态成员变量: 所有对象都收到影响;
b) 非静态成员变量: 只对这一个对象有影响;
本博客文章均已测试验证,欢迎评论、交流、点赞。
部分文章来源于网络,如有侵权请联系删除。
转载请注明原文链接:https://www.cnblogs.com/sueyyyy/p/9268827.html