When we call a language “safe”, that formally means that there’s a proof that no well-formed program in the language can do something undefined.
Java is completely safe by that definition. Now, you can have the seat-belt even tighter than that for various types of <domain> safe, but we are moving the goal-posts of the definition.
The moment you allow things that don't work well with the prover, people will use them, and the whole ecosystem becomes unsafe. And by extension, your code becomes unsafe, if the compiler can't reason about what happens when your code calls theirs.
Plus, unless you have just the right linter set up, you can still accidentally mess up and do something unsafe if the compiler lets you.