2017-10-11 98 views
-2

在Java分配不同的輸入參數,調用對象一次,並在不同的情況下

假設我有一個名爲對象類「模塊」 和另一個名爲「學生」類可以接受的「模塊」 如何輸入參數我可以創建一個對象一次但當時只是每次給它分配不同的值(以效率和節約內存的利息)

這是在哪裏創建我的低效的代碼示例多個對象

public class StudentTest { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) 
    { 
     // TODO Auto-generated method stub 

Student s1 = new Student ("Joe", "Bloggs", 19, new Module("com1028", "come1028", 70, 120)); 
Student s2 = new Student("Stella", "Kazamia", 24, new Module("com1026", "come1032", 40, 60)); 
System.out.println(s1); 
System.out.println(s2); 
    } 

} 

如何創建只有1個學生,只有1個模塊,但爲他們分配不同的輸入參數爲各自的個人。

+2

你的代碼幾乎沒有效率...... 如果有多個學生,則有多個Student類的實例是有意義的。如果您想更改學生的信息,只需更新Student實例內的變量即可。 – explv

+2

*「我怎樣才能調用一個對象......」*你不「叫」對象。你什麼意思?創建? –

+1

你試圖保存多少納秒? :D –

回答

0

我怎麼能說只有1名學生,只有1對象,但爲它們分配不同的輸入參數進行相應的個人

這完全取決於Student(也可能Module)的實施。基本上:您將其屬性設置爲新值,通常通過設置者  —(如果他們提供)。

例如,假設Student看起來是這樣的:

public class Student { 
    private String firstName; 
    private String lastName; 
    private int age; 
    private Module module; 

    public Student(String firstName, String lastName, int age, Module module) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.age = age; 
     this.module = new Module(module); // Defensive copy 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
    public String getFirstName() { 
     return this.firstName; 
    } 
    // ...and so on for lastName and age... 

    public void setModule(Module module) { 
     this.module = new Module(module); // Defensive copy 
    } 
    public Module getModule() { 
     return new Module(this.module); // Defensive copy 
    } 
} 

注意防守副本,因爲你已經說Module提供setter方法(所以它是沒有意義的Student你把它用實例)。

在這種情況下,你可能會避免產生第二Student,像這樣:

Student s = new Student ("Joe", "Bloggs", 19, new Module("com1028", "come1028", 70, 120)); 
System.out.println(s); 
s.setFirstName("Stella"); 
s.setLastName("Kazamia"); 
s.setAge(24); 
s.setModule(new Module("com1026", "come1032", 40, 60)); 
System.out.println(s); 

...但你仍然必須創建一個新的Module傳遞給setter(和setter創建它的副本保留)。

如果你想避免防守副本,你會希望Module不變,使Student可以愉快地讓你通過它的實例。不過,在更新s實例時,您仍然需要創建一個新的Module

我不是說重複使用s實例是一個好主意。 JVM非常擅長垃圾收集,尤其擅長在方法中對引用創建的對象的引用進行優化,但不會在方法終止後生效(例如,如果使用方法lot )。

相反,我只想做簡單的事(你在你的問題有)和如果代碼原來是一個內存壓力問題的根源,看看這是爲什麼然後,當你有這些信息,並處理它。

例如:不要過早微觀優化。 :-)

+0

組成,它們是否可以在學生類中初始化模塊對象。從那裏,讓它接受模塊參數作爲學生對象 – user36606

+0

@ user36606的一部分:當然,你可以這樣做。 –

+0

所以每次我初始化一個新學生時,是否會創建一個新的模塊對象,或者只是從學生類 – user36606

相關問題