Why are - ArrayIndexOutOfBoundsException - ClassCastException - NullPointerException NOT classified as Programmatically thrown exception. You can argue for it if you really want to. I don't seem to understand a clear distinction.
I think, there isn't a hard-core logic why an exception is defined checked or unchecked. For some exceptions the reason is clear-cut but for some others its quite obscure(then, Sun's is the final word and people try to explain that way).
She still doesn't approve of my superhero lifestyle. Or this shameless plug: