JoJo撒哇滴卡
我的理解是,如果不用static方法,那么在调用的时候,是对象引用.f。如果使用static方法,就是类名.f。前者会把对象引用作为参数传递给方法,等价于f(参数1,参数2,...,对象引用),f方法内部会对对象引用,也就是this,指向的对象进行某些操作。但是并不是每个方法都需要对象引用指向的对象进行操作,这时候用static方法就更合适,节约一点堆内存,何乐不为。
KOJJ
1.静态方法:整个类所共有的东西,就像一个家族都姓一个姓,
java类可以直接用类名点静态方法名调用
2.实例方法:是类创建的对象特有的,就像你们家有多少钱,你叔叔家有多少钱
java类要new创建对象点方法名调用
静态方法属于类,和对象无关,也就是说不需要实例化可以直接使用。静态方法更像是工具类提供的工具方法,对给定参数执行固定操作,平时用的系统方法可以直接使用的就是静态方法,而scanner一类就需要自己来实例化才能使用
1 支持main函数这种机制,当然你也可以设想一个语言,没有main函数,而是你通过一个类启动,程序启动时booter默认建立这个类的一个唯一实例,然后调用其run方法,也是可以的,或者说你也可以将整个jvm的运行看做是一个唯一的对象,形式问题
2 有些东东其实并不适合用面向对象的方式搞,比如开平方,Math.sqrt(x),你可以弄成x.sqrt()这种形式,但是如果要加一个开立方方法,是不是要将所有可能输入的x都加上这个方法,那对现有库的入侵性太强,不如做成函数,把x作为输入,然后函数内部再根据x提供的接口来实现这个功能
3 和类绑定,这样每次调用就不需要new对象。Scala里面就没有静态这个概念,但是可与用object来代替混在新时代
静态方法是属于类的,普通方法是属于对象的,外部调用静态方法可以直接用类名.方法名方式,不需要创建对象,而调用普通方法需要对象.方法名的方式,我认为这样设计的目的是程序能够更方便的调用方法,如果程序在多个地方多次调用共同的方法,就不用new很多对象了,多用于工具类。
不爱写代码的码农
最简单的一个思考:如果你每次都要有NEW一个对象然后才能调用方法,你想想反复调用的情况下你是不是写多了很多代码?
静态方法的存在说得简单点就是为了让人方法编程的。
其实从另一个角度看,别人写好的API肯定不希望由你来创建对象,而是提供接口方法给你调用就行了。