我对它是如何发生有点好奇吗? 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;
}
}
答案 0 :(得分:10)
getter和setter是实例级方法,除非对象创建完成,否则不在内存中。 - 谁告诉你这个?在加载类时加载方法。因此,当您(构造实例)的构造发生时,setX
和getX
方法已经可用于JVM的方法区域。
您可以在创建任何实例之前获取class
Solution
,然后通过 reflection 获取所有方法并调用它们(您可能会遇到异常)来测试,但你可以调用它们:P)
答案 1 :(得分:0)
方法由Java字节代码组成。对于每个类的实例,它都是相同的。无需为每个对象创建单独的字节代码副本。创建新对象时,不需要为方法代码分配内存。堆上的对象由一块内存组成,该内存块足够大以包含对象的非静态成员变量(以及JVM需要跟踪对象的一些内容)。
对于方法中使用的局部变量,在调用方法时使用堆栈。