看到有人去面试Java碰到问static的问题,到网上找了几个类似的问题,特此记录

继承与static

public class Test extends Y {
	Test(String str) {
		super(str);
		// TODO Auto-generated constructor stub
	}

	Y y = new Y("Test");
	static {
		System.out.println("tttt");
	}

	public static void main(String[] args) {
		new Z("mian");
	}
}

class Y {
	static {
		System.out.println("t");
	}

	Y(String str) {
		System.out.println("Y - " + str);
	}
}

class Z extends Test {
	Y y = new Y("Z");
	static {
		System.out.println("tt");
	}

	Z(String str) {
		super(str);
		System.out.println("Z");
	}
}




输出结果是:

大概的Java载入顺序为:

main--->父类 --- >static--->父类属性--->父构造函数--->自己属性--->自己构造函数




为什么要用static?

方便在没有创建对象的情况下来进行调用(方法/变量)。


静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的

static变量

  static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响


参考:

http://www.cnblogs.com/dolphin0520/p/3799052.html

http://blog.sina.com.cn/s/blog_70b845780100n9zz.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值