动态方法/实例方法
1).标识符:- 类开头
2).调用方式:(实例对象 函数)
3).实例方法在堆栈上。
静态方法/类方法
1).标识符:+ 类开头
2).调用方式:(类 函数)
3).静态方法在堆上分配内存。
静态方法和实例方法的区分及误区:
1).静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存(错误)。事实上,方法都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。
2).静态方法在堆上分配内存,实例方法在堆栈上(错误)。事实上,所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个区域是不可写的。
3).实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单。(错误)事实上,如果一个方法不访问某实例成员变量或者不改变实例状态,那么就应该写成静态方法。
如何使用
1).静态方法是静态绑定到子类,不是被继承。
2).一般使用频繁的方法用静态方法,用的少的方法用动态的。静态的速度快,占内存。动态的速度相对慢些,但调用完后,立即释放类,可以节省内存,可以根据自己的需要选择是用动态方法还是静态方法。
3).静态方法修改的是类的状态,而对象修改的是各个对象的状态。
4).类的实例调用是在类的生命周期中存在,当类没有了以后,对应的实例也就没有了,对应的方法也就没有了。静态类不然,只要你引用了那个静态类的命名空间,它就会一直存在,直到我们推出系统。
使用场景
1.如果需要访问或者修改某个实例的成员变量时,将该方法定义成实例方法。
2.类方法正好相反,它不需要访问或者修改某个实例的成员变量。
3.类方法一般用于实现一些工具方法,比如对某个对象进行扩展,或者实现单例。