Java关键字Static和final 总结

public class JavaKey { public final int a; public static int b; private static int c; public JavaKey() { a = 1;// 未初始化会出现编译错误。 } public void testStaticFunction() { System.out.println(JavaKey.b); System.out.println(b); System.out.println(JavaKey.c); System.out.println(c); } public static void showStatic(){ //System.out.println(a);//编译错误,不可接触非static的变量,即实例变量。和每个对象相关的。 System.out.println("This is parent's static function"); } public void showOverride(){ System.out.println("This is parent's override function"); } public static void main(String[] args) { JavaKey k = new JavaKey(); k.testStaticFunction(); System.out.println(k.a); System.out.println(k.b);// 因为是同一个类的静态函数,所以可以访问,即使是private System.out.println(k.c);// 调用的是整个类,所有实例共享的一个变量。 System.out.println(JavaKey.b); System.out.println(JavaKey.c); System.out.println(b); System.out.println(c); } }

 


 

public class TestStatic extends JavaKey {
	// @override
	public static void showStatic() {
		System.out.println("This is child's static function");
	}

	public  void showOverride(){
		System.out.println("This is child's override function");
	}
	public static void main(String[] args) {
		JavaKey k = new JavaKey();

		k.testStaticFunction();
		System.out.println(k.a);
		System.out.println(k.b);// 调用的是整个类,所有实例共享的一个变量。
		// System.out.println(k.c);//private的,所以不可见。
		System.out.println(JavaKey.b);
		// System.out.println(JavaKey.c);

		k.showStatic();//parent
		k.showOverride();//parent
		
		k=new TestStatic();
		k.showStatic();//parent!!!而静态方法是在编译时确定的,即使随后将k修改为了子类。
		k.showOverride();//child!!!区别啊!
		//多态性,运行时动态决定调用子类的方法。
		
		TestStatic t=new TestStatic();
		t.showStatic();//child!!!,同上面对比
		t.showOverride();//child
		
		JavaKey.showStatic();//parent
		TestStatic.showStatic();//child
		
				
	}
}

 

Final class

public final class FinalClass {

	int a;//final的成员变量不是final。
	
	//没有机会被重载,因为final类不能被继承
	public void function()
	{
		System.out.println("I am a function in final class");
		System.out.println("a="+a);//default是0
	}
	public static void main(String[] args) {
		FinalClass f=new FinalClass();
		f.function();

	}
	
	//final类不能被继承,所以成员函数默认是final的
    /*class Subclass extends FinalClass{
		
	}*/
}



总结

1:static是静态的,在编译时便确定。

      可用类型.静态成员/静态方法().或者实例名.也可用实例名.成员/方法。

 

1.1:Java不支持abstract同static同用在方法上,static意味着和类相关,abstract意味方法要子类实现(二者无逻辑上的冲突吧)。

static方法不可被重载的,而abstract方法需要子类重载。

2.1:Abstract类,可以有static成员或者方法。通过类名.成员/方法。

 

2:final是指“不可修改”.

     若是变量则必须初始化,有且仅有一次。

     方法,不可被override;

     类不可被继承--〉类的成员不可被override。因此不能同abstract同用, 因为虚类必须被继承。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值