Static的作用:用来修饰要使用类名来访问的变量或者方法

比如Integer里面的MAX_VALUE变量,String里面的substring方法等,都是可以直接 《类名.方法()或者类名.变量》来访问的,此时需要使用static来修饰。

类里面main()函数和类的构造器皆是static方法。

 Static修饰的方法或者变量与没有用static修饰的方法和变量之间的调用关系为:使用static修饰的方法可以调用使用static修饰的方法和变量,不能调用非静态(非static修饰)的方法和变量;非静态方法可以调用非静态方法和变量,也可以调用静态方法和变量。Static修饰的方法里面不能调用this方法,这是因为它存在不依附于任何对象,因此谈不上this。

使用static可以写静态代码块,好处在于可以优化程序性能,原因在于static代码块会在类被加载的时候执行,且只执行一次,因此可以用于一些只需被执行一次的操作上。

Static方法或者变量在内存中有唯一的副本,无论新建多少个对象,static方法和变量都只有一个,也就是多个对象共享同样的static方法修饰的变量或者方法,而非静态方法和变量在不同的对象中有不同的副本,互不影响。Static的这个特性是影响类并行运行的原因所在,所以如果程序要并行化,则需要考虑哪些方法和变量需要static修饰,哪些不需要。也是由于这个特性,上段中描述的static代码块只会执行一次的具体意义是,无论new多少次类的对象,类里面的static代码块只会执行一次,执行次序按照定义顺序来。