java中static关键字

如上图,int[] num=new int[]{12,34,2,18};

  其中引用变量存放在栈空间中,相当于一个指针,指向了存放了在堆空间中new出来的ine[].同样在堆空间中还有一块区域,叫做静态域,static修饰的变量就存放在这里。

那么static是什么?

  我们知道在栈中存放的变量有局部变量和对象的引用,这是有生命周期的,例如局部变量只存在方法体内部,方法执行完了,其内部的局部变量就会有个出栈过程,垃圾回收。这样就出现了一个问题,如果我们希望某个局部变量可以被保存到下一次被调用怎么办?首先想到的是定义一个全局变量,但是这样的话,能操控这个变量的就不仅仅是这个方法了。我们需要一个变量,能在全局有用,但是只在其内部可以调用,对外是隐匿的。static就来了。

  在java编程思想中有一句话:“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”也就是说在static修饰的方法内部只能调用静态方法,只要是被static修饰后的变量或者方法就不需要通过new对象的方式进行访问了,可以直接类名+方法(或者变量进行访问)。类的静态成员函数是属于整个类而非类的对象,它没有this指针, 这就导致了它仅能访问类的静态数据和静态成员函数。

  

  在继承关系中,还可以在子类中定义一个与父类相同的静态变量,消除父类的影响。(注:为何不产生冲突?)

注意:

  1.Java中的static是不允许用来修饰局部变量,不管是不是static修饰过的方法,都不允许static修饰局部变量。

  3.静态代码块的使用,来优化程序性能,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次;

  3.static内部类不可访问外部类的非static成员。普通内部类中的方法不能用static修饰,用static修饰过的内部类中的方法可以用static修饰。

  4.java中对于静态成员变量不需要初始化。但是在main方法里面,定义的静态变量必须初始化,或者说所有的变量必须有值,否则编译不通过。

static的优势:

  节省内存,当定义为static的成员变量,是为整个类所有的,它只存在堆中的静态域,它更新一次,该类所有的对象存取的值也会更新。

 

posted @ 2019-07-16 09:22  修仙小华  阅读(218)  评论(0编辑  收藏  举报