Static修饰符--简单讲解

来源:互联网 发布:虚拟centos7网络配置 编辑:程序博客网 时间:2024/06/05 17:29

    • Static修饰符
      • static修饰属性
      • static修饰方法
      • static静态代码块
      • 静态导入
      • static小结

Static修饰符

  • static修饰符可以用来成员变量,成员方法和代码块
    • 用static修饰的成员变量表示静态变量,可以直接通过类名来访问
    • 用static修饰的成员方法称为静态方法,可以直接通过类名来访问
    • 用static修饰的代码块称为静态代码块,当JVM加载类时,就会自动的执行该代码块。
  • 被static修饰的成员变量和成员方法表明归某个类所有。它不依赖于类的特定的实例.被这些类的实例所共享 ,会在类加载的时候,完成对属性或方法的一些初始化操作。

static修饰属性

  • 类的变量有两种,一种是被static修饰的变量,称为静态变量/类变量;另一种是没有static修饰的,称为实例变量,二者的的区别是
    • 对于实例变量,每创建一个对象,就会为实例变量分配一次内存.实例变量载内存中有多个拷贝,互不影响。
    • 静态变量在内存中只有一个拷贝.运行时JVM只为静态变量分配一次内存.在加载类的过程中完成静态变量的内存分配。
    • 在类的内部,可以在任何的方法中直接访问静态变量.在其他类中,可以通过类名+“.”的方法来访问,也可以通过创建一个对象,然后通过对象名来访问。
    • 如果类的所有实例中都包括一些相同的常量属性,可以把这样变量作出静态变量,从而节省内存空间。
      static修饰属性

注:static修饰属性注意事项一:

  • 只能修饰实例变量不能修饰局部变量
  • static修饰的属性为全类共有,可以通过类名.属性名的方式访问,每一个对象对类变量进行修改,其他对象也会体现出来。

static修饰方法

  • 成员方法分为静态方法成员方法.被static修饰的称为静态方法类方法.静态方法和静态变量一样,可以不用创建类的实例,而直接通过类名来访问。
  • 作为程序入口的main()方法是静态的:JVM只要加载了main()方法所属的类,就能执行main()方法,而不用创建这个类的实例。
  • 非静态方法无论属性和方法是否是静态的都可以访问:

         public class TestStaticMethod2 {       int a ;       static int b;       public static void test1(){}       public void test2(){}       public void test3(){            System.out.println(a);            System.out.println(b);            test1();            test2();       }    }
  • 静态方法只能访问静态属性和静态方法

    • 实例方法中可以访问到:所有
    • 静态方法可以访问:静态成员

       public class TestStaticMethod3 {    static int a= 10;    int b = 20;    public void test1(){}    public static void test2(){}    public static void test3(){              System.out.println(a);            //System.out.println(b); //错误            //test1(); //错误              test2();    }}
  • 静态方法中不能使用this关键字
  • 非静态方法只能覆盖非静态方法
  • 静态方法只能覆盖静态方法,但是没有多态

    public class TestStaticOverride {   public static void main(String args[]){       Super s = new Sub();       s.m();//等效于 Super.m()   }}class Super{      public static void m(){         System.out.println("this is super");      }}class Sub extends Super{      public static void m(){         System.out.println("this is sub");  } }

static静态代码块

  • 被static修饰的代码块称为静态代码块.JVM在加载类时会执行这些静态代码块.如果类中有多个静态块,JVM会按照他们在类中出现的顺序依次执行它们,每个静态块只会被执行一次.通常用于初始化静态变量
  • 静态块和静态方法一样,不能直接访问类的实例变量和实例方法

静态导入

  • 通过静态导入可以在使用一个类型静态成员的时候,不用书写类名,直接使用静态成员即可
  • 注意:静静态导入会降低程序的可读性,不要过多使用!

    import static java.lang.Math.*;//import static java.lang.Math.PI;import static java.lang.System.*;public class TestStatic {        public static void main(String args[]) {            System.out.println(PI);            System.out.println(abs(-1));            out.println(PI);    }}

static小结

  • static属性
    • 属于这个类所有
    • 通过“对象名.static属性名”、“类名.static属性名”访问
  • static方法
    • 通过“类名.static方法名”和“对象名.static方法名”访问
  • static代码块
    • 主要作用是实现static属性的初始化
    • 当类被载入的时候执行它,且只被执行一次
原创粉丝点击