Прошу прощения - может я и не совсем "по адресу" со своим Apex-вопросом, но уж очень здорово и доходчиво тут объясняются Java-сложности для новичков. А Apex, грубо говоря - разновидность Java'ы, сдобренная специализированными классами. Есть маленький рабочий Apex-код. Помогите понять в нём 2 момента: 1) как (почему) срабатывают строки, расположенные ниже команды return - ведь она не обрамлена if-оператором? 2) как срабатывает new-команда создания некоторого класса, если она вызывается ВНУТРИ декларации этого же самого класса? Прилагаю код и картинки для наглядности.
global class SM016_convertLeadsBatch implements Database.Batchable<sObject>,Schedulable
	{global Database.QueryLocator start(Database.BatchableContext BC)
		{//готовим запрос, который ищет неотконвертированные лиды по аккаунтам-кастомерам
		 string sQuery = 'select id from lead where isconverted = false AND Found_Account__r.Customer__c = \'Yes\'';
		 return Database.getQueryLocator(sQuery);
		}

	 global void execute(SchedulableContext c)
		{//метод интерфейса Schedulable который запускает выполняет джоб по расписанию. в данном случае по расписанию мы выполняем Database.Batchable SM016_convertLeadsBatch
		 database.executeBatch(new SM016_convertLeadsBatch(),1);
		}

	 global void execute(Database.BatchableContext BC, List<sobject> lRec)
		{set<id> sid = new set<id>();
		 for(sobject obj:lRec)
			{lead acc = (lead)obj;
			 sid.add(acc.id); // собираем id-шники найденых записей лидов
			}
		 SM001_LeadConvert.convertLeads(sid);//конвертируем лиды
		}

	 global void finish(Database.BatchableContext BC)
		{}
}