static
当某个事物是动态时,就意味着该 字段 或办法 不依赖于任何特定的对象实例。即便咱们从未创立过该类的对象,也能够调用其 静态方法 或拜访其 动态字段 ,这样就不须要 实例化新对象,产生开销。。
相同,对于一般的 非动态字段 和办法 ,咱们必须要先创立一个 对象 并应用该对象来拜访 字段 或办法 ,因为 非动态字段和办法 必须与 特定对象 关联。
static 变量和办法
class Util {
public final int num = 100;
public static int staticNum = 100;
public int getAbs(int num) {return Math.abs(num);
}
public static int getSum(int a, int b) {
// 谬误,不能静态方法不能拜访非动态变量。System.out.println(c);
// 谬误,不能静态方法不能拜访非动态变量。getAbs(-10);
return a + b;
}
}
class Main {public static void main(String[] args) {
// 正确,通过类拜访静态方法
System.out.println(Util.getSum(1, 2));
// 正确,通过类拜访动态变量
System.out.println(Util.staticNum);
// 正告,通过类的实例调用静态方法,相当于 Util.getSum(1, 2)。// 此处尽管不会保留,但可能会产生一系列问题,不举荐应用、System.out.println(new Util().getSum(1, 2));
}
}
当应用 static
润饰的某个 办法 | 变量 时候,咱们称其为 静态方法 | 变量。
静态方法 | 变量 不属于任何 对象 ,因而不能够通过this
关键字调用该 办法 | 变量 ,只能够通过 类名 来拜访。
在 静态方法中 不能拜访该类的 非动态成员变量 和非动态成员办法 ,因为类的 非动态成员变量 和非动态成员办法 都必须依赖 具体的对象 才可能被调用。
static 代码块
class Test {
static {System.out.println("static block!");
}
public Test() {System.out.println("constructor!");
}
}
public class Main {public static void main(String[] args) {
/**
* 运行后果
* static block!* constructor!* constructor!*/
new Test();
new Test();}
}
动态代码块 只会在 类加载 的时候只会 执行一次 ,接下的 类加载 都不会执行。因而 初始化操作 能够放到 动态代码块 中执行,能够大大晋升效率。