java 静态变量 与 非静态变量

一、创建一个类的对象时(new 类名)时,该类的.class文件会被加载到一段内存中。

 

1.先将该类的.class文件会被加载到一段内存,初始化static属性和方法,为他们分配空间,以后一直在内存中,即使这个对象被销毁。(这就是不建议使用static属性和方法的原因之一)

2.copy其中非static属性和方法,为他们初始化,分配空间,然后才可以使用,因为非static的属性和方法是跟随对象的,所以当对象被回收时,属于该对象的属性和方法也被回收,再new的时候再生成。

 

 

二、执行某类的静态方法时(类名.方法名),该类不会被加载到内存中,也不会自动调用构造方法(构造 方法只在实例化的时候才调用),既然没有创建对象就不会存在对象的内存地址,得出结论类中的静态变量和静态方法的地址是单独的,和类的对象没关系。

 

public class t1 {
	public static String str0 = "str0";
	public static String str1 = "str1";
	public t1() {
		System.out.println("类被实例化");
	}
	public static void printf(){
		System.out.println("print some thing...");
	}
	/**
	 * 调用T1.str0 T1.printf() 都不会调用构造函数。
	 */

}

   类中得静态变量和静态方法在整个程序结束时按序销毁,类的静态变量属于全局,在整个应用程序都可以使用。

 

  静态方法也和静态变量一样占用内存吗?

 

  不管是静态方法还是实例方法,方法最终在运行时都只占用一份内存,因为它保存的是程序的代码,只有类的数据才会有   多份。

  方法静态动态都是个字节码,占的内存都差不多;真正占内存的是对象(主要是属性字段),特别是在静态成员上定义的   是一个集合,然后又往里面放很多东西的话。因为这样的内存不会被主动释放。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值