Is the rule that "whenever you call a method that throws a checked exception, you must provide catching code" ? Yes. Or, if a calling method doesn�t want to catch a checked exception, it must declare this exception in its own throws clause. Because now a calling method itself will throw this exception (it is called exception propagation)
Also, last night I formulated that "runtime exceptions are classes or subclasses of RuntimeException or Error, while all others are checked exceptions". Is this safe to keep assuming? It seems that you use a little wrong terms

There is no division between "runtime" and "checked" exceptions, all exceptions and errors are thrown at run-time! The division is between "checked" and "unchecked" exceptions and, I believe, the difference exists on compilation stage only. It is the compiler, who will check if certain exceptions (called checked) are properly dealt with. It happened that checked exceptions are descendants of the class named "Exception" and unchecked � of the class "RuntimeException", but these names are rather unfortunate and misleading. Objects or both classes are exceptions and objects of both classes are run-time exceptions!
To make it clear:
Unchecked exceptions: subclasses of Error and RuntimeException.
Checked exceptions: subclasses of Throwable but not subclasses of Error and RuntimeException. Subclasses of the Exception class fit this definition and are checked.