zoukankan      html  css  js  c++  java
  • 关于java中的static

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

           类的静态成员一般可以分为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用来修饰成员变量和成员方法,可简单理解为“全局常量”!
         对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
         对于方法,表示不可覆盖,并且可以通过类名直接访问。


     

             

  • 相关阅读:
    JavaScript Hoisting
    关于性能工具
    JavaScript 新旧替换五:函数嵌套
    JavaScript 新旧替换四:继承
    JavaScript 新旧替换三:参数转换
    JavaScript 新旧替换二:赋值和取值
    test
    这么多数组方法,你掌握了么?
    问问自己,你真的会用防抖和节流么????
    防抖、节流、闭包的真谛所在
  • 原文地址:https://www.cnblogs.com/chenssy/p/2589975.html
Copyright © 2011-2022 走看看