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

原文地址:https://www.cnblogs.com/sueyyyy/p/9268827.html