La littérature n'est pas claire à ce sujet. Je pense que fortement typé n'est pas oui/non, il y a différents degrés de fort typage.
Un langage de programmation a une spécification de la façon dont il exécute les programmes. Parfois, le mode d'exécution de certains programmes n'est pas clair. Par exemple, les programmes qui essaient de soustraire une chaîne de caractères d'un nombre. Ou les programmes qui divisent par zéro. Il existe plusieurs façons de traiter ces conditions. Certains langages ont des règles pour traiter ces erreurs (par exemple, ils lèvent une exception). D'autres langages n'ont tout simplement pas de règles pour gérer ces situations. Ces langages ont généralement des systèmes de types pour empêcher la compilation de programmes qui conduisent à un comportement non spécifié. Il existe aussi des langages qui ont un comportement non spécifié et qui n'ont pas de système de types pour empêcher ces erreurs au moment de la compilation (si vous écrivez un programme qui a un comportement non spécifié, il peut lancer les missiles).
Donc :
Les langages qui spécifient ce qui se passe à l'exécution dans chaque cas (comme l'ajout d'un nombre à une chaîne de caractères) sont dits typés dynamiquement. Les langages qui empêchent l'exécution de programmes contenant des erreurs au moment de la compilation sont typés statiquement. Les langages qui ne spécifient pas ce qui se passe et qui n'ont pas non plus de système de types pour prévenir les erreurs sont dits faiblement typés.
Alors, Java est-il statiquement typé ? Oui, car son système de types interdit de soustraire une chaîne de caractères d'un nombre. Non, car il permet de diviser par zéro. Vous pourriez empêcher la division par zéro au moment de la compilation avec un système de types. Par exemple, en créant un type de nombre qui ne peut pas être zéro (par exemple NonZeroInt), et en autorisant uniquement la division par des nombres qui ont ce type.
Le C est-il fortement typé ou faiblement typé ? C est fortement typé parce que le système de type interdit certaines erreurs de type. Mais il est faiblement typé dans d'autres cas où ce qui se passe n'est pas défini (et le système de types ne vous protège pas).