为什么仍然可以访问实例级方法?

sha*_*aun -1 java oop object

只是好奇而困惑

我有点好奇它是如何发生的?
getter和setter是实例级方法,除非对象创建完成,否则它们不在内存中.

在代码片段中,我使用setter来初始化对象状态,构造函数如何获取对应用setter的对象的引用?
主要的困惑是对象创建完成的确切点是什么?

public class Solution {

    private String name;
    private int age;
    private float weight;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public float getWeight() {
        return weight;
    }

    public void setWeight(float weight) {
        this.weight = weight;
    }

    Solution() {
        setName("Sachin");
        setAge(21);
        setWeight(76);
    }

    public static void main(String[] args) {
        Solution objectReference = new Solution();
        System.out.println(objectReference);
    }

    @Override
    public String toString() {
        return "name= " + name + "\n age= " + age + "\n weight= " + weight;
    }
}
Run Code Online (Sandbox Code Playgroud)

The*_*ind 10

getter和setter是实例级方法,除非对象创建完成,否则它们不在内存中. - 谁告诉你这个?在加载类时加载方法.所以,setXgetX方法将已经在JVM的方法区可当你建设(实例)正在发生的事情.

您可以通过获取测试此classSolution创建任何实例,然后让通过其所有的方法之前,反射和调用它们(你可能会得到一个异常,但你可以调用它们:P)

  • @shaun - 是的.对象创建与类加载不同.方法作为类加载机制的一部分加载.所有方法必须在使用前加载 (2认同)