static关键字总结
使用一个类要开辟栈内存及堆内存,在堆内存中保存对象的属性,每个对象都有自己的属性。
- static 可以实现属性的共享。所以static修饰的属性也叫做全局属性、静态属性。
- static可以实现方法的类名调用。所以static修饰的方法也叫做类方法。
定义为static的方法,通常因为不希望通过实例化对象进行调用,有两种原因 :
- 本类没有提供普通属性,这样产生实例化对象没有意义。
- 本类无法直接进行对象实例化,只能够利用static 操作。
注意:
static 不能调用任何非static 的内容。因为所有的属性和方法必须在对象开辟堆内存之后才能调用,而static在类加载,为实例化时就可以被类名所调用的。
static 代码块,最先执行,且只执行一次;普通代码块有隔绝作用,可以使用相同变量;构造代码块先于构造器执行;
public class StaticTest { public static int count=0; { System.out.println("构造代码块"+count); } public StaticTest() { count++; System.out.println("构造方法"+count); } static{ System.out.println("静态代码块"+count); } public static void main(String[] args) { { int x= 10; System.out.println("普通代码块x="+x); } int x= 20; System.out.println("代码块外部x="+x); StaticTest st0 = new StaticTest(); StaticTest st1 = new StaticTest(); StaticTest st2 = new StaticTest(); } }
运行结果如下:
静态代码块0
普通代码块x=10
代码块外部x=20
构造代码块0
构造方法1
构造代码块1
构造方法2
构造代码块2
构造方法3
static静态导入:
import static 包.类.*
静态导入之后,可以直接使用,而不用类.静态方法()的形式;
/** * 静态导入包,直接引入pi */ import static java.lang.Math.PI; import static java.lang.Math.random; public class Person { public static void main(String[] args) { System.out.println(Math.random()); System.out.println(PI); System.out.println(random()); } public void run(){ System.out.println("run"); } }