关于java中的static

java

      静态成员是一组比较特殊的成员,它不属于某个特定的类实例。它独立于该类。也就是说它不依赖类特定的实例,而被类的所有实例共享。

       类的静态成员一般可以分为3种:静态成员变量,静态方法,静态代码块。它们都具有以下几个特点:

            1、在类加载的时候,就进行创建和初始化或执行代码;

            2、它们对于一个类来说,都只有一份;

            3、类的所有实例都可以访问到它们;

     1)、静态成员变量

          按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫做静态变量;另一种是没有被static修饰的变量,叫做实例变量。两者的区别在于:

           静态变量在内存中只有一个拷贝,JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配。在访问中一般都是直接通过类名来访问,不建议通过对象来访问。因为静态成员是属于类所有。静态成员变量会在类加载以后进行创建和初始化操作。

         对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。         

     2)、静态方法

           静态方法指的是用static关键字修饰的方法,他可以被对象访问,也可以直接由类名来访问。对于静态方法,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法,只能访问所属类的静态成员变量和静态方法。因为static方法独立于任何实例,因此static方法必须要被实现,而不能是抽象的abstract。

      3)、静态代码块

          静态代码块,是采用static修饰,用大括号“{......}”围起来的代码,这些代码可以使用静态成员变量和静态方法,它们也是在类加载的时候被调用。如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。    

 1 public class StaticTest {

2

3 static int a ; //静态成员变量

4 static void testMethod(){ //静态方法

5 System.out.println("static method.....");

6 }

7

8 static{ //静态代码段

9 System.out.println("static code");

10 }

11 public static void main(String[] args) {

12 System.out.println(a);

13 StaticTest sTest = new StaticTest();

14 sTest.testMethod(); //通过对象来访问静态方法

15 }

16 }


     执行得结果如下:

   static code
   0
   static method.....


    分析:

      在StaticTest类中,包含一个静态成员变量a,一个testMethod()静态方法以及一段静态代码块。当执行以上代码的时候,JVM会加载StaticTest类到内存中,然后创建a变量并进行初始化,再执行static代码块。在main()方法中,创建一个staticTest类的实例对象。通过该实例对象来访问静态方法testMethod()。

     对于static和final一块用表示什么
     static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
     对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
     对于方法,表示不可覆盖,并且可以通过类名直接访问。


 

         

以上是 关于java中的static 的全部内容, 来源链接: utcz.com/z/389574.html

回到顶部