2016-04-03 11 views
0

Değişkenim program, execute() adlı soyut bir yöntem kullanarak yürütmek istediğim ByteCode alt sınıf nesnelerini içeren bir nesnedir. getNextCode(), bu listede sonraki ByteCode nesnesini alır.
Soruma göre, neden yalnızca örnekte başvuruda bulunmak ve ikinci kod kutusunun yaptığı gibi yürütme yöntemini çağırmak yerine execute() yöntemini çağırmak için ByteCode'un yeni bir örneğini oluşturmak isterdim? Bir fark var mı? Yeni bir örnek oluşturmak için herhangi bir nedenle daha güvenli midir? Burada dinamik bağlama süreciyle ilgili bir şey var mı?Neden varolanını kullanmak yerine bir işlev çağrısı yapmak için yeni bir nesne başvurusu oluşturmalıyım?

vurgulayarak iki ifade kodun Bu parçada

program.getNextCode(pc).execute(this); 

ByteCode code = program.getNextCode(pc); 
code.execute(this); 


public void executeProgram() { 
      runStack = new RunTimeStack(); 
      returnAddrs = new Stack(); 
      isRunning = true; 
      pc = 0; 

      while (isRunning) { 
      ByteCode code = program.getNextCode(pc); 
      code.execute(this); 


public void executeProgram(){ 

     runStack = new RunTimeStack(); 
     returnAddrs = new Stack(); 
     isRunning = true; 
     pc = 0; 

     while(isRunning){ 
     program.getNextCode(pc).execute(this); 
+2

Başa dönün kuralı: Eğer hiçbir yerde 'yeni' görmüyorsanız, ** yeni ** örnekleri oluşturulmaz; referanslar sadece yeniden atanır. Bir adlandırılmış değişken atamak ve daha sonra bir zincirde bu basitçe dereferansı kullanmak isteyip istemediğinize ilişkin bir okunabilirlik meselesidir - genel olarak konuşursak, uzun dere zincirleri önerilmez. –

+0

Üzgünüm, başlığımı düzelteceğim. Ben java'ya yeni geldim ama şimdi – localplutonium

cevap

1

:

ByteCode code = program.getNextCode(pc); 
01 Yeni ByteCode örneğini oluşturarak değildir

, sadece örneğini o program.getNextCode(pc) döner başvuran vardır.

+0

ifadesinde neler olup bittiğini anlayamıyorum, bu yüzden iki ifadeyi esas olarak aynı olmaz mı? – localplutonium

+0

@localplutonium özdeş, evet. Derleyici ile yapıldıktan sonra, büyük ihtimalle aynıdır. –

+0

@localplutonium haklı. Belki de bazen kod okumayı geliştirmek için bu tür şeyler yapmak istersiniz. –