I could just make a response only for your first question.
Static variables have two different interpretations.
As a simple variable which does not belong to any classes, it means that this variable "lives" during the whole execution, but it is accessible only int the block code it is declared.
The other way is a static variable which is a class attribute, in this case it means that this attribute is a class member, it does not belong to objects.