A very simple definition of statically typed language would be languages which has typed variables. Like -
String str = "abc";Here str is of type String. And if we assign a value to it which is not a String as in
String str = "abc"; str = 1; //would not compilethe compiler would ask us not to.
But for a dynamically typed language, variables doesn't have a fixed type. For e.g.
str = "abc"; str = 1;is fine for a dynamically typed language.
Now lets look at Strongly vs Weakly typed languages. For weakly typed languages, types are not important at all. A simple point of view would be for weakly typed languages we can mix and match types. For e.g.