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属性的初始化
    • 当类被载入的时候执行它,且只被执行一次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦修的木鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值