Can Java be accurately described as statically and dynamically typed? Java seems to be categorized as a statically-typed language [1], but I'm wondering if it would be accurate to describe it as generally statically-typed but having some dynamic typing because of the run-time type checks performed when downcasts are performed.
Yes, that would be accurate.  Also, array writes involve a runtime type check, to deal with problems associated with covariant array types.