static修饰类,变量和方法,代码块

先来简单说下被static修饰后的效果,被static修饰后的类或者变量,方法,代码块,编译器会在栈内存为它分配一个空间,这个空间大小不会因为类创建多少实例而已改变,也就是说,被static修饰后,它只与类对应,所有类对象对应static变量的操作其实就是操作同一个,上一个对象操作改变了其大小,下一个对象对他引用就是当前的最新值。

当然所有的静态方法、代码块也只能调用静态变量,可以理解为,只能使用同一个内存空间里的资源,因为这个空间不会随着类实例创建而已改变,而普通变量会随着实例的创建而开辟新的空间,这就是动态变量了,他只能在类初始化实例之后创建,而被static修饰的确实在类初始化之后,创建实例之前就执行的,执行顺序跟代码的顺序一样,并且支持向前引用。

那什么时候会进行类初始化呢?就是在该类第一次创建对象实例的时候,或者第一次访问static区的方法或变量的时候,加载器才会历遍类进行加载。,每次先加载的是父类的static字段,再是子类的static字段,如果父类还有父类,就是爷爷类先加载,当然有老祖宗类就以此类推了,毕竟要尊敬长辈,让它们先来~


static修饰

 static不能修饰普通类,只能修饰内部类,称为静态内部类。普通内部类的调用要先获取类对象,才能调用他的内部类构造方法。而静态内部类可以直接用类名调用创建对象。

static修饰变量

称静态变量,也叫类变量,就是创建一个与类对应的变量,可以说是全局只有一个,所有对象共享同一个静态变量。

static修饰方法

称静态方法,静态方法只能调用静态变量,为什么呢?因为前文所说的,在类初始化时,编译器只开辟一次空间来作为静态区域,而且静态方法会在类初始化后就执行了,也就是这个类还未实例化,这个静态方法就执行完毕,静态变量也早就放好了初始值,此时普通的变量是还未创建的,所以是调用不到的,故只能调用已经创建好的静态变量。

static修饰代码块

称静态代码块,跟普通代码块的区别,就是执行时间,这个的执行时机是在类实例化之前,执行顺序就是普通的代码顺序;而普通代码块的执行时间是在类实例时类构造函数中先执行,然后在执行构造函数里面的代码块。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值