2015-04-02 54 views
1

例如,我生成这样一个类:在创建一个类的多个实例时会生成多少个方法副本?

public class Test { 
    public void sayHello (String name) { 
    System.out.println("Hello, " + name); 
    } 
} 

当我创建多个实例是这样的:

Test t1 = new Test(); 
Test t2 = new Test(); 

所以做的对象t1和t2共享相同的方法sayHello,或者他们只是都有自己的sayHello方法?

回答

2

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

这样的共享是可能的,因为方法代码不会因实例而改变。

1

在实际情况下,如果您想共享相同的方法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()您会发现区别。所以回到你的案例,如果你的实例方法不包括使用this,你应该考虑将它声明为静态的(这样你就不必在调用它之前创建一个Test对象)。

2

他们每个人都有自己的sayHello方法。为了证明这一点的最好办法是这样的例子:

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年!

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