In Java, method local variables live on the Stack as long as the method is being executed, hence for Method Local Inner Classes to access the method local variables, the compiler creates copies of these variables into the Heap, that's why these variables should be final or effectively final: so that the copies stored in the Heap are holding the actual valid values.
So I know Javac creates synthetic fields (fields that do not exist in the source code but are created by the compiler) inside the local inner classes to do so, and the question is how does that actually work, is it like creating a field inside the local inner class with the same as the method local variable which holds the same value as that variable so that inner class accesses that newly created one or is it something else, also what exactly does it mean for an element to be synthetic in general, apart from synthetic fields of method local inner classes? (I have read JLS, now hoping to find something more clear ?)