static关键字的作用
只要是被static静态关键字修饰过的变量,方法等。都会存放在内存的静态区中,静态区中的声明周期与程序的声明周期一样,直到程序结束,才释放。静态区的变量是可以被本类共享,其他类不需要实例化就可以调用。
常用案例:
1.静态变量
2.静态方法
3.静态块
静态变量
静态变量在代码中如何实现呢?又有哪些小特点呢?让我们来看一段小代码
我在main函数里创建了俩个Pool类的实例,in 和zm 分别调用了一次in方法,那么最后输出的值将会是 : 6 ,因为第一次和第二次调用静态变量的时候都会生效。
package beifendadai;
public class Pool {
static int water = 0;
public void in() {
water +=3;
}
public static void main(String[] args) {
Pool in =new Pool();
Pool zm =new Pool();
in.in();
zm.in();
System.out.println(Pool.water);
}
}
补充一下,如果是多个类调用某一个类的常量final 时的情况下,也建议修改成静态方式方便调用。
下面看一下静态方法
静态方法
直接上代码
public class Pool {
static public void test() {
System.out.println("11111");
}
public static void main(String[] args) {
Pool.test();
}
}
是不是跟上面调用变量时的步骤是一样的,没错可以通过 类名.方法名的方式直接来调用静态方法。
静态代码块
在类的成员方法外,是static修饰的代码块,就可以理解为静态代码块,静态代码块在类的声明的时候就会被运用,所以是最适合最类的初始化的。
语法代码:
static {
System.out.println("hahaha");
}
需要注意的是 静态代码块与构造方法、成员方法是有先后的运行顺序的,看如下代码
package Test;
public class Dome {
static String name;
static {
System.out.println("静态方法: "+name);
}
Dome(String name){
System.out.println("构造方法 :"+name);
}
void zhangMo(String name) {
this.name=name;
System.out.println("成员方法: "+this.name);
}
public static void main(String[] args) {
Dome dome = new Dome("大飞");
dome.zhangMo("大飞");
}
}
下面是程序的输入结果:
静态方法: null
构造方法 :大飞
成员方法: 大飞
为了方便展示先后的运行顺序,将结果以顺序的形式展示出来,在构造方法前,static代码块里的方法就已经执行了。所有没有取到 name的值。
ps: 其实还有一个非静态代码块没有展示出来,非静态代码块也是在构造方法之前就已经执行了,是在声明类对象之后执行的。也就是new一个对象但是还没传参数值的时候~
以上是本人对static学习和使用的简单运用,有问题欢迎随时指正,我是张胖白,晚安~