Java 面向对象进阶 03 static 注意事项、重新认识main方法(黑马)

案例代码如下:

非静态的方法虚拟机会自带一个关键字,如下:

但是不能手动出来,它的类型就是当前类;

通过输出this,得到当前s1,s2 的地址;

所以在输出时会有隐藏的this,所以this所指向的s1 的名字,年龄,和老师年龄。

由于方法里面没有与成员变量重名,所以可以不写this;

如果添加show2 方法,那么在程序运行的时候,this.show2(); 就代表,s1调用show2,和s2 调用show2;

但是在静态方法中添加this关键字会报错:

静态方法中,只能访问静态;静态方法中没有this关键字

Java的非静态方法会自带this关键字,而静态方法没有this关键字是因为它们用于不同的场景。

非静态方法是对象级别的方法,它是通过具体的对象来调用的。由于非静态方法是针对具体对象的行为,因此在方法内部可以使用this关键字来引用当前调用该方法的对象。this关键字代表当前对象的引用,可以用来访问该对象的成员变量和其他方法。

静态方法是类级别的方法,它是通过类名直接调用的。静态方法不依赖于具体的对象,因此在方法内部无法使用this关键字来引用对象,因为在静态方法中无法确定具体是哪个对象在调用该方法。静态方法只能访问静态成员变量和其他静态方法。

非静态方法是针对具体对象的行为,使用this关键字来引用当前对象;而静态方法是类级别的行为,无法使用this关键字来引用对象。

静态方法可以调用静态变量和静态方法。静态变量和静态方法都属于类级别的,可以在静态方法中直接调用,不需要创建类的实例。

静态方法还可以调用非静态方法,但需要通过创建类的实例来调用非静态方法。

不能直接调用,因为非静态方法中就自带this方法,所以调用不了

静态方法不能调用非静态变量,因为非静态变量可以对应很多对象,所以静态方法调用的时候不明确调用的哪个变量,所以不能调用非静态变量;

非静态方法可以访问所有:

非静态方法可以访问所有是指在一个非静态方法中,可以直接访问该类中的所有成员变量和其他非静态方法,而无需通过对象或类名进行访问。这是因为非静态方法是通过对象调用的,每个对象都有自己的一份成员变量和方法,所以可以直接访问。

静态方法则不具备这个特性,它不能直接访问非静态的成员变量和方法,需要通过对象或类名进行调用。

内存分析:

内存分析图1、

  实例变量和对象有关;

在Java中,对象是具体存在的实体,它是根据类定义创建出来的。对象可以具有状态(即实例变量)和行为(即方法)。

实例变量是对象的状态信息,它代表对象的特征或属性。每个对象都有自己的一组实例变量,它们可以具有不同的值。实例变量可以是基本数据类型(如int、float)或引用类型(如String、数组等)。

实例变量的值在对象被创建时分配,并可以在对象的整个生命周期内被访问和修改。每个对象可以独立地拥有自己的实例变量,它们不同对象之间的实例变量是相互独立的。

对象和实例变量之间的关系是:对象是由类创建出来的具体实体,而实例变量是对象的一部分,用于存储对象的状态信息。每个对象都有自己独立的实例变量,不同对象之间的实例变量是相互独立的。

这个时候还没有创建对象,所以不能调用对象里面的实例变量;

内存分析图2、

静态方法如果调用了非静态的成员变量方法,那么这时候并不清楚对象是哪个,所以会报错:

内存分析图3、

重新认识main方法:

数组长度默认为0

对该数组添加元素步骤:

1、

2、

运行结果:

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值