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方法 去使用
但是 它最终 也是 去类的内存空间中 调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值