Strict enforcement of type rules with no exceptions. Incorrect type usage can be detected either at run time or at compile time. Strong typing catches more type errors than weak typing, resulting in fewer hard errors. In a strongly typed language, conversion between types requires the use of explicit conversion functions ("casts") as opposed to implicit type coercion.
Strong or weak typing is independent of the choice between static typing and dynamic typing. Among strongly typed languages, Ada, Java, Haskell and ML are statically typed, whereas Python and Ruby are dynamically typed.