No, because start() method must return either Database.QueryLocator or Iterable<sObject>. If we do not write anything in start(), it will give error as "Missing return statement required return type: System.Iterable<SObject>"
Nope you cannot initialize your data in execute method. You have to override the start method either by returning and empty list or by querying the records and returning the database,queryLocator instance
If we do not write anything in start(), it will give error as "Missing return statement required return type: System.Iterable<SObject>"
You can use any SObject -- doesn't have to be an account.