实例方法和类方法的定义
在方法声明时,方法类型前面不加关键字static修饰的是实例方法,加关键字static修饰的是类方法,也称为静态方法。
例如:
class Main { int a; float max(float b,float c) { //实例方法 …… } static float max(float d,float e) { //类方法 …… } }
实例方法和类方法的区别
1. 对象调用实例方法:
当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,只有该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。
注意:
当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址,也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。
实例方法中不仅可以操作实例变量,还可以操作类变量。当对象调用实例方法时,该方法中出现的实例变量和类变量都是分配给该对象的变量,只不过类变量和其他所有的对象共享而已。
2. 类名调用类方法:
对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址,从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。类方法的入口地址直到程序退出才被取消。
注意:
实例方法不能通过类名调用,只能由对象来调用。而且因为在类创建对象之前,实例成员变量还没有分配内存,所以类方法不可以操作实例变量。
3. 类方法的设计原则:
如果一个方法不需要操作类中的任何实例变量,就可以满足程序的需要,就可以考虑将这样的方法设计为一个static方法。
对于static方法,不必创建对象就可以用类名直接调用它,如果创建对象会导致类中的实例变量被分配内存空间。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程