java非静态方法调用非静态方法的问题

有没有大佬知道同一个类里面非静态方法可以直接调用非静态方法的原因是什么。

对比 .java 和编译后的 .class 文件

// .java
public class Demo {
    public void function() { function_1(); }
    public void function_1() {}
}

// 使用idea 打开编译后的class文件
public class Demo {
    public void function() { this.function_1(); }
    public void function_1() {}
}

java 编译后会添加 this 关键字指向对象本身

既然都是非静态的方法,我说一下他两属于谁的问题:非静态方法是属于对象的,也就是说,只能通过new Test().a(),这种方式调用,同理我a方法也能调用b方法。

在面向对象的工程中,类好比工程的图纸,一个类里可以包含多个属性和方法。
创建某个类的对象时,实际上就相当于照着图纸去生产出一个具体的实物。
在类的定义范畴,静态是权限修饰符的一种,你可以把静态理解为:用静态修饰的属性或方法,实质上是归属于类而并非归属于某个具体的对象。
举个例子:
当你在类中定义了两个方法:(如下代码块)

public class demo {
    public void method_01(){
        System.out.println("方法一");
    }
    public static void method_02() {
        System.out.println("方法二");
    }
}

当你用demo类去创建对象时,对象既可以调用方法一,也可以调用方法二,而方法二用static修饰,所以用demo类只能调用方法二。比如你在某个汽车品牌订制一台汽车,座椅,内饰颜色,配置等等就好比非静态属性或方法,你可以和别人的不一样;但是无论你怎么定制,你的汽车一定有四个轮子,这四个轮子就好比静态属性或方法。
也就是说,在人类的逻辑当中,“一般”具有的特性,“特殊”也具有,但“特殊”具有的特性,“一般”不一定具有。在一个类中,非静态方法只能由特定对象去调用,在对象初始化完成时,对象一定具备了这个类所包含的一切属性和方法,所以在一个类中,非静态方法调用另一个非静态方法是没有问题的。
静态可以调用静态
静态不可以调用非静态
非静态可以调用静态
非静态可以调用非静态

在面向对象的工程中,类好比工程的图纸,一个类里可以包含多个属性和方法。
创建某个类的对象时,实际上就相当于照着图纸去生产出一个具体的实物。
在类的定义范畴,静态是权限修饰符的一种,你可以把静态理解为:用静态修饰的属性或方法,实质上是归属于类而并非归属于某个具体的对象。
举个例子:
当你在类中定义了两个方法:(如下代码块)

public class demo {
    public void method_01(){
        System.out.println("方法一");
    }
    public static void method_02() {
        System.out.println("方法二");
    }
}

当你用demo类去创建对象时,对象既可以调用方法一,也可以调用方法二,而方法二用static修饰,所以用demo类只能调用方法二。比如你在某个汽车品牌订制一台汽车,座椅,内饰颜色,配置等等就好比非静态属性或方法,你可以和别人的不一样;但是无论你怎么定制,你的汽车一定有四个轮子,这四个轮子就好比静态属性或方法。
也就是说,在人类的逻辑当中,“一般”具有的特性,“特殊”也具有,但“特殊”具有的特性,“一般”不一定具有。在一个类中,非静态方法只能由特定对象去调用,在对象初始化完成时,对象一定具备了这个类所包含的一切属性和方法,所以在一个类中,非静态方法调用另一个非静态方法是没有问题的。
静态可以调用静态
静态不可以调用非静态
非静态可以调用静态
非静态可以调用非静态