实例方法和类方法的定义

在方法声明时,方法类型前面不加关键字static修饰的是实例方法,加关键字static修饰的是类方法,也称为静态方法。


例如:

class Main {
    int a;
    float max(float b,float c) { //实例方法
        ……
    }
    static float max(float d,float e) { //类方法
        ……
    }
}


实例方法和类方法的区别

1. 对象调用实例方法:

当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,只有该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。


注意:

当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址,也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。


实例方法中不仅可以操作实例变量,还可以操作类变量。当对象调用实例方法时,该方法中出现的实例变量和类变量都是分配给该对象的变量,只不过类变量和其他所有的对象共享而已。


2. 类名调用类方法:

对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址,从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。类方法的入口地址直到程序退出才被取消。


注意:

实例方法不能通过类名调用,只能由对象来调用。而且因为在类创建对象之前,实例成员变量还没有分配内存,所以类方法不可以操作实例变量。


3. 类方法的设计原则:

如果一个方法不需要操作类中的任何实例变量,就可以满足程序的需要,就可以考虑将这样的方法设计为一个static方法。

对于static方法,不必创建对象就可以用类名直接调用它,如果创建对象会导致类中的实例变量被分配内存空间。


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)