static的一点个人理解

public class XueXi {
String mingZi;
static int nianLing;

 public XueXi() {
	 System.out.println("构造函数");
 }
 
 
{
	System.out.println("我是代码块");
}

static {
	System.out.println("我是静态代码块");
}

}

//个人这么理解:
XueXi myXueXi = new XueXi();
XueXi myXueXi2 = new XueXi();
程序运行时 当用 XueXi这个类 声明这个 myXueXi 变量时,
就会首先 加载XueXi类 在堆中 为XueXi类开辟一块空间,在开辟空间的这时,
对于 static 修饰符的 是属于这个类的 同时会运行一下static代码块,非static代码块不会运行 , 以为 static 修饰的 才是真正属于 类的;
所以这时会 打印出 System.out.println(“我是静态代码块”);

new XueXi(); 然后执行到这 会先在 堆中开辟一块空间 开辟空间的时候 为确定空间大小,会先执行一下 类里面代码
所以这时会 打印出 System.out.println(“我是代码块”);
new XueXi() 最后会 调用 构造函数
所以这时会 打印出 System.out.println(“构造函数”);

XueXi myXueXi2 = new XueXi();
当再一次 XueXi myXueXi2 的时候 因为之前 XueXi 类 已经有在 堆中开辟空间了 已经存在了 这时 就不会再为 XueXi 开辟了 所以这时 就不会再出现
System.out.println(“我是静态代码块”);

new XueXi(); 这是再创建一个 XueXi对象 所以会 再为新的XueX对象开辟一块空间
所以这时会 打印出 System.out.println(“我是代码块”);
然后 打印出 System.out.println(“构造函数”);
当 新new出来对象 要访问 类中的 静态成员 或是 静态方法时;
正确的代码是
XueXi.static属性 XueXi.static方法
而不是 myXueXi2 .static属性 myXueXi2 .static方法

因为 static修饰的 属性 方法 是属于类的 而不是属于对象
对象可以 myXueXi2 .static属性 myXueXi2 .static方法 去使用
但是 它最终 也是 去类的内存空间中 调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值