* Четири нововъведения от Java 7
Публикувано на 21 ноември 2011 в раздел ПИК3 Java.
В един от последните примери, които пуснах в сайта, получих уместен коментар, в който се каза, че "Eclipse иска int или enum, a ние подаваме String" при използване на оператор "switch". Объркването се получава поради това, че подаването на String към оператор switch е едно от нововъведенията в Java 7!
Естествено нововъведенията са много повече, но на този етап ще акцентирам върху четири от основните:
1. String като параметър на "switch":
Вече е възможно да правите:
String str=...; ... switch(str){ case "...": ... }
Мисля, че не е нужно да го коментирам подробно. Еквивалентно е на поредица от "if-else-if-else" команди, при които във всеки "if" се извиква оператор "equals" на обекта от тип String.
2. Инстанции на обекти с тип по подразбиране:
Досега пишехме (а аз продължавам да пиша по навик) следното:
LinkedList<String> list = new LinkedList<String>();
Вече няма нужда да подавате типа на обектите в списъците от дясната страна. Тоест горното ще е еквивалентно на:
LinkedList<String> list = new LinkedList<>();
3. Няколко изключения в един catch блок:
Когато в един try блок могат да се генерират различни изключения ние пишехме по един catch блок за всяко, например:
try{ ... } catch(ArrayOutOfBoundsException e){ ... } catch(IOException e){ ... }
А сега можем да правим следното:
try{ FileReader f = new FileReader("file.txt"); ... } catch(ArrayOutOfBoundsException | IOException e){ ... }
4. Заделяне на ресурси за try блок:
На последно тук, но според мен първо по значение е заделянето на ресурси за try блок, които автоматично се освобождават при неговото затваряне. Разгледайте например това:
FileReader in = null; try{ in = new FileReader("file.txt"); ... } catch(IOException e){ ... } finally{ try{ if(in!=null) in.close() } catch(IOException e){ ... } }
Това, което се правеше във finally блока изглеждаше много "паразитно" и не без основание. В новия си синтаксис в Java 7 можем да напишем много по-компактен код:
try(FileReader in = new FileReader("File.txt")){ ... } catch(IOException e){ ... }
Така заделеният ресурс ще бъде затворен автоматично след излизане от try блока, независимо дали е генерирано изключение или не.
Приятно програмиране.
Супер...много удовлетворително обяснение :)
Ще можеш да се явиш през септември.
Искам да Ви попитам колко официални дати за изпит е имало по пик 3 през годината?Или по друг начин казано,ако съм се явил на контролното,което беше за освобождаване от изпита(проведено по време на упражненията),на редовното контролно и на поправката през зимната поправителна сесия имам ли право да се явя на изпит по време на ликвидационната сесия в края на септември?
Благодаря за бързия отговор.Весело лято
Искам да допълня и още една новост - разделянето на числата с подчертавка (_), т.е. можем да пишем 1_234_567_890 вместо 1234567890. Личено за мен първият вариант е доста по-четим.(Наистина ако спазваме конвенция подобни лайна ще ги има само на едно място- където инициалзираме константите, но все пак нововъденеето ме кефи). Жалко че не всички framework-ци поддържат java 7, та досега само по един от проектите по които съм работил съм имал щастето да програмирам на java7. Обратният преход (6->7) е доста досаден.