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);
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. –
Üzgünüm, başlığımı düzelteceğim. Ben java'ya yeni geldim ama şimdi – localplutonium