A strong-typed programming language is one in which:
- All variables (or data types) are known at compile time
- There is strict enforcement of typing rules (a String can't be used where an Integer would be expected)
- All exceptions to typing rules results in a compile time error
A "weak-typed" programming language is simply one which is not strong-typed.