static关键字的几种用法
- 修饰成员变量,和方法
- 修饰内部类
- 修饰代码块
- 静态导包
修饰成员变量和方法
static修饰的成员变量或方法属于类,不属于对象。所有该类的实例都共享一个变量或方法。放在内存的方法区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class JavaStatic {
private static int age;
private static void printName(){ System.out.println("Name"); }
public static void main(String[] args) { System.out.println(JavaStatic.age); JavaStatic.printName(); } }
|
静态内部类
静态内部类与非静态内部类之间存在一个最大的区别就是,非静态内部类 的创建需要依赖于外围类的创建,而静态内部内则不需要依赖于外围类的创建。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class JavaStatic {
private static int num=10;
private static class inner{ public void printNum(){ System.out.println(num); } }
public static void main(String[] args) { JavaStatic.inner inner=new JavaStatic.inner(); inner.printNum(); }
}
|
静态代码块
静态代码块,只在该类被加载的时候运行。所以不管创建多少对象,其静态代码块只执行一次。
执行的顺序是:静态代码块—>非静态代码块—>构造器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class JavaStatic {
{ System.out.println("非静态代码块"); }
static { System.out.println("静态代码块"); }
public JavaStatic(){ System.out.println("构造器"); } public static void main(String[] args) { JavaStatic javaStatic=new JavaStatic(); }
}
|
输出结果
静态导包(jdk1.5后引入)
使用import static 关键字进行导包,可以导入该包中的静态资源,可以直接调用其中的静态方法和静态成员变量,而不需要使用类名。
1 2 3 4 5 6 7 8 9 10
| import static java.lang.Math.*; public class JavaStatic { public static void main(String[] args) { System.out.println("直接调用其中的静态成员变量PI"+PI); System.out.println("直接调用其中的静态方法"+max(5,3)); }
}
|