一 概述
我们通过static关键字来描述一个方法,这样的方法被称为静态方法。
二 静态方法与实例方法
与静态方法先比,实例方法的调用需要消耗更多的系统资源,这是因为实例方法需要维护一张类似虚拟函数导向表的结构,这样可以方便的实现对多态的支持。而对于一些工具类方法,我们并没有对其重载的必要,那么我们可以通过将方法声明为static,即静态方法,从而加速方法的调用。
我们在外边调用静态方法的时候,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式,而实例方法只能是后者,这样依赖静态方法是可以省去创建对象实例的操作。
同时静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员和实例方法。
三 代码示例
相同的方法,一个是静态方法,一个是实例方法,都执行10亿次
@Test
public void testStatic(){
long time = System.currentTimeMillis();
for (int i = 0; i < 1000000000; i++) {
MD5Utils.MD5("202202070800");
}
long timeT = System.currentTimeMillis() - time;
System.out.println("timeT = " + timeT);
long timeH = System.currentTimeMillis();
for (int i = 0; i < 1000000000; i++) {
md5Utils.MD5UnStatic("202202070800");
}
long four = System.currentTimeMillis() - timeH;
System.out.println("four = " + four);
}
结果
静态方法: timeT = 1225219
实例方法:four = 1168878
结果显示实例方法更加快,资料显示不同机器影响着结果,后续我多测试几次,然后再来总结。
四 回顾多态三要素
重写
继承
父类引用指向子类对象
参考:Java 多态 | 菜鸟教程 (runoob.com)https://www.runoob.com/java/java-polymorphism.html