Java中类方法与实例方法的区别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java中类⽅法与实例⽅法的区别
⼀. 实例⽅法
当类的字节码⽂件加载到内存中时,类的实例⽅法并没有被分配⼊⼝地址,只有当该类的对象创建以后,实例⽅法才分配了⼊⼝地址。
从⽽实例⽅法可以被类创建的所有对象调⽤,还有⼀点需要注意,当我们创建第⼀个类的对象时,实例⽅法的⼊⼝地址会完成分配,当后续在创建对象时,不会再分配新的⼊⼝地址,也可以说,该类的所有对象共享实例⽅法的⼊⼝地址,当该类的所有对象被销毁,⼊⼝地址才会消失。
⼆. 类⽅法
当类的字节码⽂件加载到内存,类⽅法的⼊⼝地址就会分配完成,所以类⽅法不仅可以被该类的对象调⽤,也可以直接通过类名完成调⽤。
类⽅法的⼊⼝地址只有程序退出时消失。
因为类⽅法的⼊⼝地址的分配要早于实例⽅法的⼊⼝地址分配时间,所有在定义类⽅法和实例⽅法是有以下规则需要遵循:
1. 在类⽅法中不能引⽤实例变量
实例变量的定义类似实例⽅法,没有⽤static修饰的变量,实例变量的创建与实例⽅法的创建相同,也是在类的对象创建时完成,所以在类⽅法中是不能引⽤实例变量的,因为这个时候实例变量还没有分配内存地址。
2. 在类⽅法中不能使⽤super和this关键字
这是因为super和this都指向的是⽗类和本类的对象,⽽在类⽅法中调⽤的时候,这些指代的对象有可能都还没有创建。
3. 类⽅法中不能直接调⽤实例⽅法(mian⽅法中,怎么可以⽤对象调⽤实例⽅法)其他的类⽅法也可以调⽤实例⽅法))
静态⽅法不能直接调⽤实例⽅法和变量,但可以间接调⽤(即在静态⽅法中创建类的实例,然后调⽤)
原因同1。
与类⽅法相⽐,实例⽅法的定义就没有什么限制了:
1. 实例⽅法可以引⽤类变量和实例变量
2. 实例⽅法可以使⽤super和this关键字
3. 实例⽅法中可以调⽤类⽅法
(1)实例⽅法可以直接访问实例变量,调⽤实例⽅法;
(2)实例⽅法可以直接访问类变量,调⽤类⽅法。
但不推荐这么做,原因是不清晰,容易把类变量误认为是实例变量,把类⽅法误认为是实例⽅法(借助IDE,它会给出警告信息。
);
(3)类⽅法可以直接调⽤类变量和类⽅法;
(4)类⽅法不能直接调⽤实例变量和实例⽅法;
(5)类⽅法⾥⾯不能使⽤“this”关键字,因为没有实例存在,“this”不知道引⽤哪个实例。