关于静态方法与静态属性的访问问题

在java中,static关键字代表的含义为"静态的",只要在方法或者属性前面加上了static关键字,这个方法或属性就属于类了,如果没有static关键字,方法或属性是属于这个类的对象。我们称加上static关键字的属性和方法为静态属性和静态方法,不加static关键字的属性和方法我们称为为普通属性和普通方法。普通属性和普通方法可以随着对象的多次创建而被重复使用,而静态属性和静态变量是唯一的,只能被大家所共用。**有一个关键的一点是:静态的既可以通过类名来访问,也可以通过引用名来访问,而普通的只能通过引用(创建对象)来访问。**下面先给大家总结一下静态方法和静态属性的访问情况:
1、静态方法是否可以直接使用当前类的静态属性或静态方法?可以
2、静态方法是否可以直接使用当前类的普通属性或普通方法?不可以
3、普通方法是否可以直接使用当前类的静态属性或静态方法?可以
4、普通方法是否可以直接使用当前类的普通属性或普通方法?可以
知其然也要知其所以然,有必要解释一下四个问题的答案是怎么得出的。
在这里插入图片描述
上图显示的是静态方法访问普通属性和静态属性,很显然,在访问普通属性的时候是报错的,但是却可以访问静态属性。原因在于普通属性必须通过创建对象来访问,而mainTest方法是静态的,是通过类名.方法名来访问的,所以没有创建对象。在没有创建对象的情况下,当然是无法访问到普通属性。此时要想访问普通属性a,我们可以在mainTest方法里创建一个对象,然后就可以访问a的值了。如下图:
在这里插入图片描述
而静态属性和静态方法都是属于类的,因此只要通过类名就可以访问,如下图:
在这里插入图片描述
接下来看普通方法访问普通属性及静态属性的情况:
在这里插入图片描述
这张图我们可以很明显的看到,普通方法可以直接访问静态属性和普通属性。原因在于普通方法在执行的时候必须事先创建所在类的对象,通过引用去访问。既然对象已经创建,那么自然普通属性是可以直接访问的,而静态属性在第一段已经说过,既可以通过类名来访问,也可以通过引用来访问。如果不创建对象,直接用类名去访问是无法访问的,如下图:
在这里插入图片描述
而创建了对象,我们就可以同时访问静态属性和普通属性,如下图:
在这里插入图片描述
所以最后的总结就是:为什么普通方法既可以直接访问普通属性也可以直接访问静态属性,因为普通方法在执行前必须创建对象,既然创建了对象,当然可以访问两种类型的属性;而静态方法在执行时不需要创建对象,在不创建对象的情况下,只能访问静态属性,而普通属性就没法访问到了。

猜你喜欢

转载自blog.csdn.net/weixin_44734925/article/details/88820674