Они компилируются и запускаются без MalformedURLException
:
new URL("http://example.com/dir1/dir2/page1.html&k>v%k1=>v^!");
new URL("http:////\\example\\.com/dir1/\\@dir2/@&##page1.html&k>v%k1=>v^!");
API для URL(String spec)
записи конструктора
MalformedURLException- если протокол не указан , или неизвестный протокол , или spec is null .
Таким образом, он проверяет толькоаргумент для not-null и, если он не null - еще одна проверка правильности / существующего протокола (схемы).
Конструкторы URI различны - они выдают java.net.URISyntaxException
во время выполнения в обоих случаях, обнаруживая недопустимые символы.
1) Почему MalformedURLException так сильно ограничивается только проверкой протокола?Это вводит в заблуждение относительно его названия "Неправильный URL" ...
2) Я всегда предпочитаю использовать URI, а не URL, и оставлен ли URL только по причинам устаревшего / совместимости?