神奇的标记:static

神奇标记 static

   昨天,复习HelloWord程序中的关键字:static。

 

      开始复习的时候,并没有开始就拿出资料,而是,先想了想目前对static的理解。

 

 

      1. 知道哪些东西?

 

       首先 【static】单词解释为:静态的 ,是一个Java关键字;并且可以用来修饰属性、方法、代码块、内部类。

 

       属性 :被static修饰的属性,称为静态变量或者类属性,在内存中只存在一份;可以通过类作为调用者进行调用,也可以通过对象作为调用者进行调用,两者访问的是同一块资源。与类的生命周期范围相同,类创建时,初始化类属性,类销毁、类属性被销毁。

 

      方法 :与属性相同,方法被称为静态方法或类方法,也可以通过类、对象作为调用者进行调用。也是在类创建时,初始化,类销毁时,进行销毁。

 

      代码块: 被修饰的代码块,称为静态块,在类加载的时候被执行 可以调用静态变量和静态方法, 代码块的执行顺序从上往下执行。

 

      内部类: 被修饰的内部类,称为静态内部类,静态内部类的成员定义与普通类定义相同。唯独区别的是内部类中不管是静态、还是非静态的方法,都只能访问外部类的静态属性、静态方法。

 

      2. 不知道哪些?

      理了好一会儿,就理了这么多,最后还是有很多不清楚:

  • static到底是什么?

       想了好久static到底是什么呢?它到底要干什么呢? 为什么被它修饰的资源都跟类扯上关系了, 又想了想类的特性以及生命周期。突然好像知道了些什么。static就是一个标记,标记这个资源是属于该类的。那么以下的几个问题就不难解释了。

  • 为什么静态属性在内存中只有一份?

      静态类,被static标记过(即,属于这个类,与类的生命周期相同),类在加载的时候,会初始化静态属性,因为类只会加载一次,所以只会在内存中存在一份。

  • 为什么类和类的所有对象会共享类属性、方法呢?

     类属性、方法都属于类,并且可以通过类作为调用者进行调用。类的所有对象通过类进行创建,对象必定包含对该类的引用,对象里该类引用与类是指向的是同一块地址,所以为什么对象也可以作为调用者去调用类的资源,其实觉得应该写成:“对象.类名.类属性\类方法”更直观些。

  • 为什么静态方法不能调用非静态方法?

      原因就是类与对象的生命周期不同,类加载时初始化类资源(包括:静态属性、方法、代码块、内部类),而非静态方法是属于某个对象的,对象从创建、初始化、销毁,都要在类初始化之后完成的,所以在类初始化的时候调用,初始化之后的资源肯定是找不到的。

  • 为什么静态内部类中的非静态方法,不能调用外部类的非静态成员呢?

     了解了第二个问题,解决这个就容易点了。静态内部类是属于这个类的,必定包含该类的引用,所以可以很方便的去访问类资源,但是该类的引用以及内部类中都没有,对外部类对象的引用,所以就有了这个问题。

 

 

以上都为个人观点,希望对大家有所帮助,如有问题或不足请指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值