java 面向对象-----static关键字

static:表示静态,是Java的一个修饰符,可以修饰成员方法,成员变量

静态变量:被static修饰的成员变量

特点:

        1.被该类所有对象共享

        2.不属于对象,属于类

        3.随着类的加载而加载,优先对象存在

调用方式

        1.类名调用[推荐]

        2.对象名调用

静态方法:被static修饰的成员方法

特点:

        1.多用在测试类和工具类中

        2.Javabean类中很少会用

调用方式:

        1.类名调用[推荐]

        2.对象名调用

静态和非静态方法的有什么区别?

        1.静态的属于类,成员的属于对象

        2.非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法.

        3.静态方法没有this关键字

咋一听好像很绕,我们从两个角度来进行理解:

1.代码方面理解

        ①静态方法不能访问非静态变量和方法,静态方法中没有this关键字。

结果分析:

        从代码可以看出,我们把name设置为非静态变量,AnimalName设置为静态变量。定义一个静态方法去输出name和AnimalName,可以看到name代码处报红。

        运行之后,看到控制台提示:无法从静态上下文中引用非静态变量 name和无法从惊天上下文运用非静态变量this。

解释了静态方法不能访问非静态的成员,可以看到这里的this也是非静态,也解释为什么静态方法中没有this关键字。

        ②非静态方法可以访问静态和非静态的成员属性和方法。

结果分析:

        把method声明为非静态的,可以访问静态变量AnimalName和静态变量name,也可以看到this调用了静态变量AnimalName。this代表的调用者的地址,即创建的animal对象。

        结果说明:非静态方法可以访问静态和非静态的成员属性和方法

2.内存方面理解

        看完了代码,大家应该理解非静态和静态方法的区别了,然后我们来看一下内存中它们是怎么存储的。

        可以看到,三个对象是存储在非静态区,静态属性是存储在静态存储区的,当对象需要调用静态属性时,可以到静态存储区去找。

        静态存储区时创建的时候就加载进去了,静态存储区的内容是被该类所有对象所共享的,而对象的属性是它们所独有的。

        静态内存区的属性可以通过类名.静态属性调用。也就解释了静态的属于类,成员的属于对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值