static可以用来修饰方法和属性,当然代码块也是可以的。
1.static方法是类中的一个成员方法,属于整个类,即使不用创建任何对象也可以直接调用!
static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是属于整个类!
2.静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。
3.静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存.
4.实例方法是通过对象名调用的,静态方法与类关联而不是与对象名关联
那么问题来了,static方法是否可以继承?
来试下面代码:
package init;
publicclassTestFather {
staticStringm="123";
publicstaticvoidsay() {
System.out.println("parent");
}
package init;
public classTestChild extendsTestFather{
public static void say() {
System.out.println("son");
}
}
package init;
public class Test {
public static void main(String[] args) {
TestChild a = new TestChild();
TestFather p = a;
System.out.println(a.m);
p.say();
}
}
结果:
123
parent
说明两个问题:
1.子类对象是可以调用静态属性和方法的;
2.子类对于父类的静态方法进行重写失败;
同时还可以发现编译器对于调用代码有提示:
更改为类名调用,且皆指向父类;
证明:上面代码中调用的static方法和属性实际上都是父类的方法和属性,子类并未真正继承过来。
这个从加载类的初始化顺序上也可以得到验证:静态属性和方法只加载一次,而非static的方法和属性每次对象初始化都会被加载。
结论:
****如果某个方法是静态的,他的行为就不具备多态性!!!!!!!!!!!
static属性和方法都是不可以被继承的,而是调用。