实例方法和类方法的定义
在方法声明时,方法类型前面不加关键字static修饰的是实例方法,加关键字static修饰的是类方法,也称为静态方法。
例如:
classMain{inta;floatmax(floatb,floatc){//实例方法……}staticfloatmax(floatd,floate){//类方法……}}
实例方法和类方法的区别
1. 对象调用实例方法:
当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,只有该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。
注意:
当我们创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址,也就是说,方法的入口地址被所有的对象共享,当所有的对象都不存在时,方法的入口地址才被取消。
实例方法中不仅可以操作实例变量,还可以操作类变量。当对象调用实例方法时,该方法中出现的实例变量和类变量都是分配给该对象的变量,只不过类变量和其他所有的对象共享而已。
2. 类名调用类方法:
对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址,从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。类方法的入口地址直到程序退出才被取消。
注意:
实例方法不能通过类名调用,只能由对象来调用。而且因为在类创建对象之前,实例成员变量还没有分配内存,所以类方法不可以操作实例变量。
3. 类方法的设计原则:
如果一个方法不需要操作类中的任何实例变量,就可以满足程序的需要,就可以考虑将这样的方法设计为一个static方法。
对于static方法,不必创建对象就可以用类名直接调用它,如果创建对象会导致类中的实例变量被分配内存空间。