你也曾几何时this跟static傻傻分不清

本文探讨了this和static在Java中的作用区别,包括this通过对象调用成员变量,static通过类直接调用。静态方法中可以间接访问非静态变量,通过创建对象或传参实现。理解了构造函数静态特性有助于解答两者限制。
摘要由CSDN通过智能技术生成

static与this的那点渊源没搞懂

理解两者的作用:
this:代表的是当前类的对象,一方面用来调用当前类中的全局变量,另一方面提供给当前类的构造函数调用其他构造函数来使用;
static:形容类本身的,两种使用形式:一种是修饰静态变量,另一种是修饰静态代码块。有无需创建对象即可使用类名直接调用的特点。
------升华之后,不再只是简单记忆性理解-------
简单点讲两者其实可以看作是调用一个类属性的两种不同方式,this是通过对象方式调用,static通过类本身去调用,static不需要对象存在而实现调用目的,两者目的都是为了操作成员属性,实现最终效果也是一样的。

静态方法中能实现调用非静态成员变量吗?

答案是可以实现的,当然直接像隐式的method();显式的this.method()调用方式是肯定不行了,
间接实现方式:
通过在一个静态方法中创建当前类的对象,或者通过参数列表传入当前对象的方式,依旧都可以在静态方法中调用那些非静态变量.这种间接的方式是可以的,当然实际应用中也不会这么做的。
说到这,不知道大家是不是跟我有同样的疑问,静态方法中为什么可以创建对象,产生这个疑问的原因是创建对象的过程免不了去调用构造方法,构造方法也是方法,是没有使用static修饰的。
通过翻阅书籍才知道,其实构造函数也是一种静态方法,在初始化加载这些成员变量的时候,静态变量的加载顺序更优先于非静态成员的加载顺序,其次再是构造函数的加载,至于为什么暂时就不再作过多研究。
尽管还不是很清楚this底层是怎么实现初始化对象的,大胆猜测一下,this的实现八九不离十其实就是一个非静态方法,更确切的讲应该是工厂模式,这才决定了两者不能同时使用。至于为什么static中不能调用非静态方法,当时有的老师是这样解释的:
因为在Java之初都是使用static来声明和实现方法的,后来随着Java版本升级之后,才有了非static的方法声明方式,前者不知后者,后者知道前者
本人尝试寻找过具体原因,其主要方向还是觉得跟初始化加载顺序有关,这个猜测的有效性,希望随着以后的不断学习能够找到答案。暂时就约定大于配置吧!
如果发现有错误的地方,还需要各位能够帮我纠正,在学习的道路上让我们一起携手进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值