美味可口的static修饰符
食前指南
static静态修饰符,他所修饰的方法和变量都存在于方法区/堆中(java版本差异,感兴趣的人看我的《令人放心食用的JVM指南》),生命周期是程序开始时创建,程序结束时释放。static可用来修饰类、方法、变量和常量。当有数据需要被共享给所有对象使用时,那么久可以使用static修饰。
前菜.小开胃口static类
类中只有内部类太能被static修饰,也就是所谓的静态内部类。
静态内部类才能声明静态的成员变量和方法,普通内部类则不行。
静态内部类不需要外部引用,而且能够调用外部类的所有静态的成员变量和方法。
静态内部类的使用和普通的类一样,可以被单独初始化。
汤.鲜美甘醇的static变量
静态变量和成员变量都是属于静态存储方式,而局部变量则属于动态存储方式,如果局部变量加上static那么它就会变成静态存储方式。
局部变量的生命周期是当该函数或者该代码块调用完之后销毁,但是如果变成静态局部变量,那么在调用完函数或代码块之后,它依旧存在,但是无法使用。
成员变量和静态成员变量都是静态存储方式,他们的生命周期是一样的,只有他们的作用域是不同,简单说一个依赖对象,另一个能直接使用。
主食.丰富多汁的static代码块
静态代码块在虚拟机加载类的时候就开始执行了,并且只会执行一次。
静态代码块不依赖于对象,所以每次创建对象的时候并不会让它重复执行。
代码块都是在虚拟机加载类并且在该类的构造方法之前执行。
静态代码块比代码块更快执行。
在继承时首先执行父类的静态再执行子类静态,然后走父类代码块到构造方法,再到子类的代码块和构造方法。
甜品.香醇滋味的staic方法
引用在《Java编程思想》的一段话:
“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
说白了就是不依赖于对象就能访问该方法。
静态方法中不能访问非静态的成员变量和方法。
就餐心得
静态数据成员,它是存在于方法区/堆中,它在内存中是属于线程共享的区域,所以被所有对象共享,因此任何一个对象对静态数据成员的修改都会影响到其他所有的对象。
厨师长语录:
如果再就餐时遇到不满意的地方,请在下方留言,我不一定会看,看了也不一定会回复,因为我每天都要加班。