关于类方法的三个问题

1.为什么类方法不能操作实例变量?

1 类方法在该类被加载到内存时,就分配了相应的入口地址(类方法是属于类的,随着类的加载而被分配内存)
2当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,只有当该类创建对象后,类中的实例方法才分配入口地址(非静态成员(方法和变量)是属于类的对象,只有对象实例化后才存在,然后通过类的对象去访问)
Summary:
之所以类方法不能操作实例变量,是因为当实例变量不存在的时候类方法就存在了。或者说,类方法在执行时可能还不存在任何对象,所以也就不存在任何实例变量,因此没法使用

2.为什么类方法中不能直接调用自己类内的实例方法?

1无论调用成员变量还是方法,都需要主调(主语调用者),其格式为:主调。方法/成员变量。如果方法名/变量名是static修饰的,默认前缀为类名;没有static修饰的,默认前缀为this。
2类方法是属于类本身而不是类的对象,在类方法里调用实例方法/变量,那么this就代表这个类本身(矛盾点:实例方法/变量属于类的对象,而非类),自然找不到想调用的实例方法/变量,因为他们在对象中。
Summary:
类方法不能直接调用自己类内的实例方法。若想调用,则须创建一个对象,将对象名作为主调,即通过指定的对象去调用实例方法。

3.为什么this不能出现在类方法中?

this代表的是调用这个函数的对象的引用,而类方法是属于类的,不属于对象,类方法成功加载后,对象还不一定存在

猜你喜欢

转载自blog.csdn.net/weixin_51418247/article/details/115093928