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

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

案例代码如下:

Java 面向对象进阶 03 static 注意事项、重新认识main方法(黑马)_第2张图片非静态的方法虚拟机会自带一个关键字,如下:

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

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

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

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

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

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

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

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

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

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

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

但是在静态方法中添加this关键字会报错:
Java 面向对象进阶 03 static 注意事项、重新认识main方法(黑马)_第9张图片

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

内存分析:

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

内存分析图1、

Java 面向对象进阶 03 static 注意事项、重新认识main方法(黑马)_第14张图片Java 面向对象进阶 03 static 注意事项、重新认识main方法(黑马)_第15张图片

Java 面向对象进阶 03 static 注意事项、重新认识main方法(黑马)_第16张图片  实例变量和对象有关;

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

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

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

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

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

内存分析图2、

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

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

内存分析图3、

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

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

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

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

重新认识main方法:

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

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

数组长度默认为0

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

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

对该数组添加元素步骤:

1、

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

2、

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

运行结果:

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

你可能感兴趣的:(黑马Java,java,开发语言)