java学习面向对象之static内存图解

上一节当中描述了static的用法,以及成员变量和静态变量的区别。但是static除了可以修饰成员变量使之成为静态变量外,他还可以同时修饰函数,使之成为静态函数,我们来看一个例子:

 

class StaticDemo
{
	
	String name;
	int a ;
	static String xiangmu="xiangmu";

	/**
	*这个方法被static关键词修饰之后,就变成了静态方法,这里我们需要注意的一点就是static声明的方法当中,只能够调用
	*静态变量,因为他是在类没有被初始化为对象之前而存在的,所以这个静态方法当中不能使用this或者super之类的关键词
	*
	*/
	StaticDemo(String name,int a)
	{
		this.name = name;
		this.a 	  = a;
	}

	static void saySelf()
	{
		/**
		*这种方法是不能够使用的,为什么?因为这个时候this可能还没有初始化呢,记住静态变量还有静态方法是先于实例化对象
		*之前而存在的!!!
		*/
		//!!!!System.out.print(this.name);//此时我们如果编译的话会提示我们说静态上下文当中不能够引用非静态变量的编译错误
		System.out.print(xiangmu);//这里的xiangmu这个变量准确的说是忽略了项目前面的一个StaticDemo,因为这个是类变量由类直接调用

	}

	void saySelfSecond()
	{

		System.out.print(name+"............."+a);

	}

}

class StaticDemoShow
{
	
	public static void main(String[] args) {
		
		StaticDemo sd = new StaticDemo("static1",10);
		sd.saySelfSecond();
		System.out.print(StaticDemo.xiangmu); 
		StaticDemo.saySelf();

	}

}

那么我们就参照上面的例子画一个内存图来理解一下:

 这样从上到下,我们的内存图就加载好了,只是有一点不明白,System.out.print这个需要进栈么?

转载于:https://www.cnblogs.com/sunchuanzhen/p/3330995.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值