案例代码如下:
非静态的方法虚拟机会自带一个关键字,如下:
但是不能手动出来,它的类型就是当前类;
通过输出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、
运行结果: