现在的位置: 首页 > 综合 > 正文

Java静态变量和静态方法

2018年06月05日 ⁄ 综合 ⁄ 共 1244字 ⁄ 字号 评论关闭

静态成员包括静态数据成员和静态成员方法。

静态成员属于整个类而不是属于某个对象,它被该类的所有对象共享。

访问静态成员时一般通过类名访问,也可以通过对象访问。

静态成员也受访问权限的约束。

静态数据成员在使用之前应尽量初始化。

静态成员方法不能操作非静态成员。

静态成员方法没有this引用。

下面通过一个案例来深入体会静态变量和静态方法

父类:

public class A {

	//定义一个静态变量a
	static int a = 1;
	//定义一个静态变量b
	static int b = 2;
	
	/**
	 * 静态成员方法printA()
	 */
	public static void printA(){
		
		System.out.println("来自A中的a=" + a);
	}
	
	/**
	 * 静态成员方法printB()
	 */
	public static void printB(){
		System.out.println("来自A中的b=" + b);
	}
	
}

子类:

public class B extends A {

	//定义一个静态成员变量a
	static int a = 3;
	//定义一个静态成员变量b
	static int b = 4;
	
	/**
	 * 定义一个静态成员方法
	 */
	public static void printB(){
		
		System.out.println("来自B中的b=" + b);
	}
}

测试类:

public class TestStatic {

	public static void main(String[] args) {
		//因为类B中没有定义printA()方法所以它会自动调用它父类的方法,输出1
		B.printA();
		//类B中定义了printB()方法,所以会调用类B中的printB(),输出4
		B.printB();
		//因为子类自己就有静态变量a,所以会调用B中的变量,输出3
		System.out.println(B.a);
	}

}

总结:

1.静态变量与静态方法说继承关系式不确切的,静态方法与静态变量是属于类的方法和变量。而子类也属于超类,比如说Faculty extends Person,则Faculty也是一个Person,所以子类能够调用父类的静态方法和变量。注意:此时子类调用的其实就是超类的静态方法和变量,而不是继承自超类的静态方法和变量。但是如果子类中有同名的静态方法与变量,这时候调用的就是子类本身的。因为子类的静态变量和静态方法会隐藏父类的静态方法和变量。

2.如果子类中没有定义同名的变量和方法,那么调用"子类名.静态方法/变量"其实调用的就是父类的方法和变量。

3.如果子类中自定义了同名的静态变量,而没有定义与父类同名静态方法,则调用"子类名.静态方法"时,会调用父类的静态方法,静态变量中的静态变量也是父类的,如上述程序中的B.printA();其实调用的是父类的printA()方法,方法中的变量也是父类的。

4.如果子类中已经定义了与父类同名的静态变量,也定义了与父类同名的静态方法,这时候调用"子类名.静态方法"时,完全与父类无关,里面的静态变量也是子类的,如上述程序中的B.printB();

抱歉!评论已关闭.