之前对这个了解很少,最近看了毕老师的视频,感觉讲的很详细,把自己的笔记分享给大家。哈哈,大神就不要看了,如果有跟我一样的小白,可以一起看看。:lol
static:
用于修饰成员(成员变量、成员函数),被修饰的成员叫作,静态的成员变量或者类变量。
当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。格式:类名.静态成员
特点:
1、随着类的加载而加载(也就是说,静态会随着类的消失而消失,说明它的生命周期最长。)
2、优先于对象存在。
明确一点:静态先存在。对象后存在。
3、被所有对象所共享。
4、可以直接被类名所调用。
实例变量(成员变量)和类变量的区别:
1、存放位置:
类变量随着类的加载而存在于方法区(共享区、数据区)中。
实例变量随着对象的建立而存在于堆内存中。
2、生命周期。
静态变量随着类加载而加载,成员变量随着对象建立而存在。静态变量生命周期最长。
静态使用注意事项:
1、静态方法只能访问静态成员
2、非静态方法既可以访问静态也可以访问非静态。
3、静态方法中不可以定义this、super关键字。
4、主函数是静态的。(因为主函数需要随着类的加载而存在,以便jvm找到它,并作为程序的入口)
静态有利有弊
利处:对对象的共享数据进行单独空间的存储,节省内存空间。没有必要每个对象中都存储一份。
可以直接被类名调用。不用需要实例化对象。
弊端:生命周期过长。
访问出现局限性。(静态虽好,只能访问静态)
什么时候使用静态?
当对象中出现共享数据时, 该数据被静态所修饰。
对象中的特有数据要定义成非静态存在于堆内存中。
当一个功能被很多对象调用时,可以将此功能封装成一个静态的函数,并且放在一个特定的类中,以便不需要实例化对象就可以使用该方法。(为了更加严谨,可以使用private对该类的构造函数进行私有化。)
什么时候定义静态函数?
当功能内部没有访问到非静态数据(对象的特有数据 ),那么该功能可以定义成静态的。
静态代码块
优先于主函数执行。随着类的加载而执行。
只执行一次(因为类只会被加载到内存中一次)
|