static修饰符的作用

1.Static用来修饰 一个方法又或者一个成员变量,那么静态方法和普通方法,静态变量和成员变量之间又有什么区别呢?

 静态方法和普通方法调用方式的不同

   如果是两个静态方法,可以直接调用

   如果是两个普通方法,可以直接调用

   普通方法可以调用静态方法

   静态方法却只能访问静态成员

   普通方法 可以 对象.方法

   静态方法 则是 类.方法

  

  为什么被staic修饰的方法只能访问静态成员?

  因为静态方法在类加载的时候就随着一起加载了,此时其他成员和方法并没有初始化,换个理解 static 属于类,而普通成员和方法属于对象,对象不一定相同,因此static方法里不能用 super和this

  静态变量和成员变量的区别

  生命周期

      静态变量随类的加载而加载,随类的销毁而销毁

      成员变量随对象的加载而加载,随对象的销毁而销毁

  调用方式不同

      一个是类调用,一个是对象调用

  存储的位置不同

      静态变量存储在静态区,而成员变量保存在堆里

2.Static还可以修饰代码块

  static{

   代码..

  }

  静态代码块随类的加载而加载,而且类存在期间只加载一次

3.Static用来修饰内部类

  

  Static 修饰的内部了不需要先实例一个外部类,可以直接使用外部类.内部类

4.Static可以用来静态导包

  import static XXX.XXX.XXX.静态方法名  表示导入某个静态方法

  或者import static import static XXX.XXX.XXX.* 表示导入当前类的静态方法

  好处就是可以直接使用方法名,而不需要类.方法

 

 ----------------------------------------补充----------------------------------------------------------

关于static修饰符修饰的 方法 内部类 成员变量 代码块的加载顺序

  一定是按顺序加载,先加载父类,在加载子类

 

public abstract class Animal {
    static{
        System.out.println("父类的静态代码块");
    }
    
}

 

public class Test extends Animal{
    private static int s = run();
    static{
        System.out.println("子类的静态代码块");
    }
    static class A{
        static {
            System.out.println("子类的静态内部类的静态代码块");
        }
    }

     void sleep(){
         System.out.println("子类重写父类的方法");
     }
     static void eat(){
        System.out.println("静态的吃");
     }
     static int run(){
        System.out.println("静态的跑");
        eat();
        return 0;
     }
    public static void main(String[] args){
        new A();
    }
}

执行结果

按顺序加载,先加载父类,在加载子类

 

  

 

转载于:https://www.cnblogs.com/fjd-1004/p/11012879.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值