When should be program block dynamic or static ? members of static program block , members of automatic program blocks?

Class objects are always dynamically constructed. Class objects are constructed by the new() method and exist as long as at least one class variable has a handle to it. Class objects do not have storage lifetimes associated with a scope, but class variables that holds the handles may.

Automatic storage lifetimes are associated with entering and exiting procedural blocks such as functions, tasks, and named blocks. The default for variables declared in a procedural block outside of a class is to have a static lifetime. That also means the arguments and function return variable are also have static lifetimes by default.

Procedural blocks inside of classes (methods) can only have automatic lifetimes. This matches C/C++ semantics. Static methods, on the other hand, just mean the method is global to the class type and not specific to a particular class object; it has nothing to do with the storage lifetime of the variables declared inside that method.

Because of legacy Verilog which originally had no concept of automatic lifetimes, SystemVerilog had to keep the default lifetime static, but added an option to make all procedural blocks declared within a module/program/interface automatic. So when you declare a program as automatic, it only effects the defaults for variables declared within procedural blocks. Variables declared outside of a procedural block as well as outside a class always have a static lifetime.

By the way, I do not recommend using program blocks - just use modules. See Are Program Blocks Necessary? - Verification Horizons