谈一谈对static和this的理解

static 几点要注意的 :

1.在静态方法中是没有this关键字的

2.静态方法只能访问静态的成员变量和静态的成方法


关于第一点,在java中每个类中的非静态方法都有一个隐含的形参,那就是this指针,this指针就是在对象实例化后,保存了实例化对象的地址。


我们发现赋值失败,原因是什么?

我用C++将地址全打印出来,这样可以看的更清楚。


我们可以看到,当构造函数内形参名和类内变量名相同时,会把类内变量屏蔽掉

形参num,name,age的地址和this指向对象的num,name,age地址不同。也就是被相同变量名屏蔽掉了。

再看下面这张图


当变量没被屏蔽时,num,name,age在形参中没有,所以自动指向类内变量。因此地址相同。

对this还有一点,this指向的是首地址,在这个类内也就对应num的地址。也是类内非静态函数内的隐含形式参数。当对象调用时,自动将指向对象的this指针传入函数。

静态函数为什么没有this指针?

静态随着类的加载而加载到静态区,而this指针只有在对象创建后才存在并且绑定在该对象上。静态比对象创建要早,那么当调用静态方法的时候,对象还没有创建出来,那么自然就没有this指针。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

关于static,

static定义的变量或者方法,存在静态区,是每个对象共有的。

静态方法只能访问静态变量,而不能访问非静态成员。原因同上。静态区变量和方法比非静态区变量和方法生成的早,那么当静态方法调用非静态变量或方法时,非静态变量或方法还没有生成,不存才,因此无法找到,即无法访问。

反过来,如果非静态方法访问静态成员或者方法就没有问题了。

静态区的特点:

1.随着类的加载而加载

2.优先于对象创建

3.在非静态成员函数中可以通过 类名.变量  类名.方法 

4.静态只能访问静态


最后附上实例一个


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值