Java 当创建一个类的多个实例时,会生成多少个方法副本?

Java 当创建一个类的多个实例时,会生成多少个方法副本?,java,class,methods,Java,Class,Methods,例如,我生成一个如下所示的类: public class Test { public void sayHello (String name) { System.out.println("Hello, " + name); } } Test t1 = new Test(); Test t2 = new Test(); public class Person { private String name; private int age; pub

例如,我生成一个如下所示的类:

public class Test {
  public void sayHello (String name) {
    System.out.println("Hello, " + name);
  }
}
Test t1 = new Test();
Test t2 = new Test();
public class Person {
    
    private String name;
    private int age;

    public Person ( String name, int age ) {
        
        this.name = name;
        this.age = age;
    }

    public String toString() {
        return "Hello " + name + ", you have " + age + " years!";
    }
}
当我创建多个这样的实例时:

public class Test {
  public void sayHello (String name) {
    System.out.println("Hello, " + name);
  }
}
Test t1 = new Test();
Test t2 = new Test();
public class Person {
    
    private String name;
    private int age;

    public Person ( String name, int age ) {
        
        this.name = name;
        this.age = age;
    }

    public String toString() {
        return "Hello " + name + ", you have " + age + " years!";
    }
}

那么,对象t1和t2是否共享相同的方法
sayHello
,或者它们都有自己的
sayHello
方法?

方法属于一个类的所有对象,不管您实例化了多少个对象。一个类的所有方法的代码都放在内存中的一个共享位置,该类的所有实例都引用每个方法的相同代码


这种共享是可能的,因为方法代码不会在实例之间更改。

方法属于一个类的所有对象,不管您实例化了多少个对象。一个类的所有方法的代码都放在内存中的一个共享位置,该类的所有实例都引用每个方法的相同代码


这种共享是可能的,因为方法代码不会在实例之间更改。

在实际情况中,如果您想共享相同的方法
sayHello
,可以将其声明为静态方法

public static void sayHello (String name) {
    System.out.println("Hello, " + name);
}
然后
Test.sayHello()
(推荐),
t1.sayHello()
t2.sayHello()
将具有相同的效果

否则,如果
sayHello
是实例方法(即不带
static
关键字的普通方法)。您可以使用关键字
this
来引用实例

比如说,

public void sayHello (String name) {
    System.out.println("Hello, " + name);
    System.out.println(this);
}
如果分别调用
t1.sayHello()
t2.sayHello()


所以回到你的例子,如果你的实例方法不包括使用<代码>这个< /C>,你应该考虑把它声明为静态的(这样你就不必在调用它之前创建一个测试对象)。在实际情况下,如果你想共享相同的方法<代码> SayHyely/Cuff>,你可以声明它是静态方法。

public static void sayHello (String name) {
    System.out.println("Hello, " + name);
}
然后
Test.sayHello()
(推荐),
t1.sayHello()
t2.sayHello()
将具有相同的效果

否则,如果
sayHello
是实例方法(即不带
static
关键字的普通方法)。您可以使用关键字
this
来引用实例

比如说,

public void sayHello (String name) {
    System.out.println("Hello, " + name);
    System.out.println(this);
}
如果分别调用
t1.sayHello()
t2.sayHello()


所以回到你的例子中,如果你的实例方法不包括使用<代码>这个< /C>,你应该考虑将它声明为静态的(这样你就不必在调用它之前创建一个测试对象)。

< P>它们都有自己的SayHelp方法。证明这一点的最好方法是用这样一个例子:

public class Test {
  public void sayHello (String name) {
    System.out.println("Hello, " + name);
  }
}
Test t1 = new Test();
Test t2 = new Test();
public class Person {
    
    private String name;
    private int age;

    public Person ( String name, int age ) {
        
        this.name = name;
        this.age = age;
    }

    public String toString() {
        return "Hello " + name + ", you have " + age + " years!";
    }
}
你还有另外一门课:

class Myclass {
    public static void main ( String [] args ) {

        Person object1 = new Person( 'Edward', 19 );
        Person object2 = new Person( 'Fredd', 21 );

        System.out.println(object1);
        System.out.println(object1);
    }
}
输出为:

你好,爱德华,你已经19岁了

你好,弗雷德,你已经21岁了


这意味着每个对象都不依赖于其他对象。

每个对象都有自己的sayHello方法。证明这一点的最好方法是用这样一个例子:

public class Test {
  public void sayHello (String name) {
    System.out.println("Hello, " + name);
  }
}
Test t1 = new Test();
Test t2 = new Test();
public class Person {
    
    private String name;
    private int age;

    public Person ( String name, int age ) {
        
        this.name = name;
        this.age = age;
    }

    public String toString() {
        return "Hello " + name + ", you have " + age + " years!";
    }
}
你还有另外一门课:

class Myclass {
    public static void main ( String [] args ) {

        Person object1 = new Person( 'Edward', 19 );
        Person object2 = new Person( 'Fredd', 21 );

        System.out.println(object1);
        System.out.println(object1);
    }
}
输出为:

你好,爱德华,你已经19岁了

你好,弗雷德,你已经21岁了

这意味着每个对象都不依赖于其他对象