static可以修饰属性、行为,但不能修饰构造方法。因为static代表了与对象无关,而构造方法最基本的作用就是产生对象。
static静态属性
static修饰属性称之为静态属性或类属性。
特点:1、全类所有对象共享一个值;
2、在访问修饰符允许的情况下,可以直接通过类名进行访问;
3、不是随着对象的产生而产生,而是在类的加载期(main方法运行之前),就已经产生到内存数据段的静态区了,以后每产生一个对象,其实都是该属性的这一个地方,而不像普通属性每个对象身上存一份。
(注:只有全类共享一个值的属性,才能定义成static。唯有常量属性可以直接加static, 常量属性的标准申明方式是 public static final。 )
static静态方法
static修饰方法被称之为静态方法或类方法。
特点:1、加static的方法,可以通过类名直接访问也可以通过对象名访问,不加static只能通过对象名访问;
2、不能在方法内部书写“this”关键字,因为直接用类名访问该方法的时候,没有当前对象;
3、不能在方法内部访问非static的属性或行为:因为不能确定非static的内容是属于哪个对象的;因为static修饰的方法在类加载的时候就先被加载了,所以它不知道非static的内容。
(注:只有调用时无需考虑是某个对象去执行的方法,才能定义成static。如:工具类的工具方法:工具类没有产生对象的必要,只需要完成某个功能即可,该类的哪个对象完成对调用者来说无所谓;工具方法在完成功能的时候,不会对对象的数据产生任何使用或影响。)
static静态初始化块
初始化块分为实例初始化块和静态初始化块。
实例初始化块是一个没有返回类型、方法名、参数列表的方法体,可以在里面书写任何语句,它和构造方法一样在产生对象的时候会自动被调用,所以它和构造方法在功能上是重复的,使用量极小。它和构造方法的执行顺序是首先产生一个对象,在堆中划分对象空间,然后在该空间划分属性,执行实例初始化块,再执行属性的赋值,最后执行构造方法中我们书写的代码。
实例初始化块的书写:
{
System.out.println(“实例初始化块”);
}
静态初始化块与对象无关,满足static的特征,在类的加载期时被加载,同时一个类只执行一次,所以它可以写一些运行前的准备工作,以此节约运行时间加快运行速度。
静态初始化块的书写:
static {
System.out.println(“静态初始化块”);
}