Java SE 7 Released

    Сегодня, после множества переносов, официально состоялся релиз Java SE 7.
    В него вошли:
    Project Coin
    • The Fork/Join Framework
    • The New File System API (NIO.2)
    • InvokeDynamic
    Скачать можно здесь.

    Средняя зарплата в IT

    110 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 8 431 анкеты, за 2-ое пол. 2020 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 93

      +22
      Поздравляю нас всех с этим событием. Никак не ожидал, что пройдет так мало времени между выпуском релиз-кандидата и релиза!
        +1
        Все даты выхода висели на сайте openjdk уже несколько месяцев.
          +4
          Наблюдая за людьми, вогоны снова включили свою трансляцию.
          — Не имеет смысла вести себя так, будто вы удивлены. Все чертежи,
          планы и распоряжения о сносе висели на доске объявлений в местном отделении
          по планированию на Альфе Центавра в течение пятидесяти земных лет.
            +1
            Сайт open jdk ведь не на альфе центавра находится, да и сообщалось в разных источниках не раз. Если конечно не следить, и не интересоваться — тогда да.
        +7
        Внеочередной праздник! Ура товарищи!
          +8
          Круто. Качать @ писАть.
            +1
            А пользователи Mac OS X в пролёте :( Netbeans стоит, бандл подсунуть могу, а сам JDK 7 нету, может кто знает как можно адаптировать? в macports еще нету.

            p.s. OS X Lion стоит.
              +1
              Я на льва open jdk 7 поставил, все ок
              +8
              Пойду выпью кофейку.
                +5
                Можно даже за это выпить. Молодцы!
                  0
                  Наш ответ Чемберлену!
                    +5
                    Как и обещали. 28 июля.
                    • НЛО прилетело и опубликовало эту надпись здесь
                        +3
                        И без аннотированных типов.
                      +2
                      советую также подписаться на java magazine. мне на почту пришел свежий номер в .pdf :)
                      • НЛО прилетело и опубликовало эту надпись здесь
                          +2
                          попробуйте по ссылке
                          • НЛО прилетело и опубликовало эту надпись здесь
                              0
                              Спасибо!
                          +2
                          Это правда? Как-то не верится прямо…
                            0
                            Я не разрабатываю на java и смотрю на это как конь на новые ворота… я думал они еще года 2 разрабатывать будут.
                              +2
                              через год уже java 8 обещают
                                +2
                                Успеют ли?
                                  +2
                                  а чего там успевать? все давно написано, просто политический кризис в совете не дает ходу фичам.
                                    +3
                                    мне к тому же кажется, было бы неправильным выпускать сразу большой набор обновлений в языке, которые включают 7 и 8 версии. За год разработчики как раз привыкнут к новому в java 7 и будет легче переходить на 8 версию
                                      +3
                                      ну, вот так с 2005го привыкали.
                              +6
                              Всё-таки без лямбд. Печаль=\
                                +6
                                Лямбды есть в JRuby, Scala, Clojure, Mirah, Jython — выбирайте по вкусу!
                                  +1
                                  Я знаю, но у эти языки либо плохо распространены у нас в стране, либо используются не в том секторе, что мне интересен. Долгое время увлекался Python, сейчас свои собственные проекты пишу на Ruby.

                                  Надежда оставалась до последнего. Теперь буду ждать Java 8.
                                    +4
                                    Мало дождаться релиза Java 8. Надо, чтоб эта Java пошла в продакшн, а это может растянуться еще на пару лет после релиза.
                                    +4
                                    Груви забыли
                                      +3
                                      Я нечаянно, пардон-пардон!
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                    +2
                                    Это прекрасно! Так когда выходить Java SE 8 со столь желанными Lambda Expressions? :)
                                      +8
                                      используйте Scala
                                        +2
                                        Обещают в конце 2012
                                          0
                                          Конец света тоже обещают в конце 2012. Как бы даты не совпали…
                                            +1
                                            Так а вы еще по поняли от чего конец света будет? ;)
                                        +1
                                        Странно, а здесь не обновили. Не успели ещё.
                                          +2
                                          Как приятно видеть, что любимый язык развивается!
                                            +3
                                            А что вы называете развитием? 5 кусочков синтаксического сахара?
                                              +3
                                              А что бы Вы назвали развитием?
                                            +1
                                            Вы читали что входит в этот Project Coin? Один синтаксический сахар.
                                              +3
                                              Да, но тот же multi-catch очень удобная штука, равно как и использование строк в switch.
                                                +3
                                                Может и так, но ничего радикально нового добавлено не было. Не понимаю всеобщего восторга по этому поводу.

                                                Впрочем, мне все равно не скоро пришлось бы вкусить прелестей новой версии — энтрепрайз штука довольно инертная, много очень больших проектов в моей компании до сих пор разрабатываются на платформе 1.4.
                                                  +1
                                                  а как же продвинутый try-with-resources? Теперь же мона обойтись без многоэтажных кэтчей!
                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                      +2
                                                      зачем, если работает?
                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                        +1
                                                        Немного неправильно выразился — у многих заказчиков стоит 8-ой веблоджик и апгрейдиться они совсем не хотят.
                                                        0
                                                        Радикально новое, это буквы задом-наперед переставлять?
                                                      +2
                                                      А вы читали, для чего этот проект? Для синтаксического сахара!
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                        0
                                                        А мне кто-нибудь может про invokedynamic объяснить? Что-то я не понял, что это и зачем нужно.
                                                          +1
                                                          java.sun.com/developer/technicalArticles/DynTypeLang/index.html
                                                          With the addition of support for JSR 292 in JDK 7, dynamically typed languages should run faster in the JVM than they do today. A key part of this support is the addition of a new Java bytecode, invokedynamic, for method invocation, and an accompanying linkage mechanism that involves a new construct called a method handle. These features enable implementers of compilers for dynamically typed languages, that is, the people who develop compilers for languages such as JRuby and Jython, to generate bytecode that runs extremely fast in the JVM.
                                                            0
                                                            Есть хорошее видео об, где на пальцах пытаются рассказть что это и зачем в обще оно там.
                                                            (см. там «A Renaissance VM: One Platform, Many Languages» John R. Rose, Da Vinci Machine Project Lead)
                                                              0
                                                              Спасибо. Правильная ссылка, видимо, такая
                                                            0
                                                            сорри, не туда.
                                                            0
                                                            А мне кто-нибудь может про invokedynamic объяснить? Что-то я не понял, что это и зачем нужно.
                                                              +2
                                                              Если коротко, то JVM заточена под статически типизированную Java, что создает некоторые проблемы для динамически типизируемых языков. InvokeDynamic помогает лучше подружиться динамически типизируемым языкам с JVM. А вообще подробные разъяснения по теме первые же строчки поисковой выдачи, например здесь
                                                                +1
                                                                Просто при декомпиляции того же груви (который может быть и динамически типизован) мы видим тип Object. Видимо, я плохо понимаю, что такое байт-код.
                                                                  +2
                                                                  Просто считайте, что компилятор Groovy для Java7 будет выдавать более эффективно работающий байт код.
                                                              –1
                                                              Скажите, а делегаты будут вообще?
                                                                +1
                                                                Только что проделал так

                                                                С:\Users\Timur>java -version
                                                                java version «1.7.0»
                                                                Java(TM) SE Runtime Environment (build 1.7.0-b147)
                                                                Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode, sharing)

                                                                Я правильно понимаю что это build 147 который был доступен ранее?
                                                                  0
                                                                  Я тоже так подумал. Значит RC хорошо сделали :)
                                                                  0
                                                                  Правда, до возможности использовать новый JRE придется подождать еще 1 или 2 релиза.
                                                                    0
                                                                    А когда сделают поддержку JDK 7 в WebLogic?
                                                                      +1
                                                                      УРА УРА УРА!
                                                                      Сегодня нужно залиться кофем по полную!
                                                                      Быстрее б начал поддерживать приятые плюшки JDK 7 Android
                                                                        +8
                                                                        О как интересно.
                                                                        Мне давно хотелось в java использовать string в switch
                                                                        Исходник:

                                                                        public class Test {

                                                                        public static void main(String[] args) {
                                                                        String test = "string0";
                                                                        switch(test){
                                                                        case "string0":
                                                                        System.out.println("It's works!");
                                                                        break;
                                                                        }

                                                                        }

                                                                        }


                                                                        Компилируем седьмой жабой — компилится, работает!

                                                                        Смотрим декомпилером Test.class:

                                                                        import java.io.PrintStream;

                                                                        public class Test
                                                                        {
                                                                        public static void main(String[] paramArrayOfString)
                                                                        {
                                                                        String str1 = "string0";
                                                                        String str2 = str1; int i = -1; switch (str2.hashCode()) { case -1881759169:
                                                                        if (!str2.equals("string0")) break; i = 0; } switch (i) {
                                                                        case 0:
                                                                        System.out.println("It's works!");
                                                                        }
                                                                        }
                                                                        }


                                                                        Забавно они эту фичу реализовали.
                                                                          0
                                                                          Вот жеш ёперный бабай! Я конечно понимаю, что я чего-то не понимаю, но неужеле нельзя было просто switch по str2.hashCode(), или по битам сделать?
                                                                            +3
                                                                            Просто по hashCode, видимо, стрёмно — а ВДРУГ найдецца еще строка с таким же hashCode?

                                                                            Но вообще забавно. Надо будет посмотреть, сколько будут «стоить» эти новые синтаксическо-сахарные фичи.
                                                                              0
                                                                              Просто по hashCode, видимо, стрёмно — а ВДРУГ найдецца еще строка с таким же hashCode?
                                                                              Что значит «видимо», что значит «вдруг»? Так нельзя делать принципиально алгоритмически, даже странно, что надо о таком говорить. И так не делается никогда. В том числе при реализации любых хеш-таблиц, в том же HashMap ищется сначала по хеш-коду, а потом обязательно делается equals, и почему — должно быть очевидно любому программисту. Тем более, что вероятность коллизий хешкода строки просто огромна.
                                                                                +1
                                                                                Да это все понятно, своими «видимо» и «ВДРУГ» я пытался сарказм изобразить — не получилось.
                                                                                Разумеется, возможны коллизии.
                                                                                  +3
                                                                                  Ну да, я просто перепугался что-то слишком :) Не «возможны», а обязательно будут. За полминуты пример подобрал:
                                                                                  System.out.println("6R".hashCode());
                                                                                  System.out.println("5q".hashCode());
                                                                                  Вывод:
                                                                                  1756
                                                                                  1756
                                                                                  Вот офигенный бы «свич по хешкоду» получился :)
                                                                                    +2
                                                                                    О! Спасибо за пример!
                                                                                    Теперь можно посмотреть на Test2 — малость поинтереснее.

                                                                                    Исходник:
                                                                                    public class Test2 {
                                                                                    public static void main(String[] args) {
                                                                                    String test = "6R";
                                                                                    switch(test){
                                                                                    case "6R":
                                                                                    System.out.println("Ok");
                                                                                    break;
                                                                                    case "5q":
                                                                                    System.out.println("Fail");
                                                                                    break;
                                                                                    }
                                                                                    }
                                                                                    }


                                                                                    Результат декомпиляции:
                                                                                    import java.io.PrintStream;

                                                                                    public class Test2
                                                                                    {
                                                                                    public static void main(String[] paramArrayOfString)
                                                                                    {
                                                                                    String str1 = "6R";
                                                                                    String str2 = str1; int i = -1; switch (str2.hashCode()) { case 1756:
                                                                                    if (str2.equals("5q")) { i = 1; } else { if (!str2.equals("6R")) break; i = 0; } }
                                                                                    switch (i) {
                                                                                    case 0:
                                                                                    System.out.println("Ok");
                                                                                    break;
                                                                                    case 1:
                                                                                    System.out.println("Fail");
                                                                                    }
                                                                                    }
                                                                                    }
                                                                                      +2
                                                                                      Ну так вот, я про что и говорю. По-моему всё логично, я не знаю чего тут такого и чего недоумевают все. Понятно, что содержимое case-блоков второго switch можно было рассовать по этим веткам первого свича, заместо присваивания временной переменной индекса и последующего свича. Но почему-то вот было сделано именно так, возможно, есть какая-то причина и для этого*. В любом случае без первого свича с if-ветками внутри обойтись нельзя, тут уже всё ясно.

                                                                                      *Подумал, что и на это я могу предположить ответ. Всё сделано для сложного свича, типа
                                                                                      switch(test){
                                                                                      case "6R":
                                                                                      case "blabla":
                                                                                      System.out.println("Ok");
                                                                                      break;
                                                                                      case "5q":
                                                                                      ...
                                                                                      Ну и попробуйте его реализовать, распихивая это по веткам первого свича. Это невозможно ведь, не правда ли?
                                                                                        +2
                                                                                        Ну да, меня больше удивила переменная с временным индексом — я ожидал «рассовывания» по веткам первого свитча.

                                                                                        Хотя действительно — в случае сложного свитча (как у вас в примере) «протестного чувства» практически нет :-)

                                                                                        import java.io.PrintStream;

                                                                                        public class Test3
                                                                                        {
                                                                                        public static void main(String[] paramArrayOfString)
                                                                                        {
                                                                                        String str1 = "6R";
                                                                                        String str2 = str1; int i = -1; switch (str2.hashCode()) { case 1756:
                                                                                        if (str2.equals("5q")) { i = 2; } else { if (!str2.equals("6R")) break; i = 0; } break;
                                                                                        case -1386582880:
                                                                                        if (!str2.equals("blabla")) break; i = 1; } switch (i) {
                                                                                        case 0:
                                                                                        case 1:
                                                                                        System.out.println("Ok");
                                                                                        break;
                                                                                        case 2:
                                                                                        System.out.println("Fail");
                                                                                        }
                                                                                        }
                                                                                        }
                                                                                          +3
                                                                                          Вот и разгадана загадка дня ;)
                                                                                        0
                                                                                        Я вот только не пойму, для чего вот это делается:
                                                                                        String str2 = str1;
                                                                              0
                                                                              А может декомпилер так неправильно декомпилирует?

                                                                              Кстати, у вас неправильно написано: It's works
                                                                                0
                                                                                кстати, да, тоже была мысль, может декомпилер портачит?
                                                                                  +3
                                                                                  Вряд ли декомпилятор работает неправильно. Он может предложить плохочитаемый код или отказаться работать, если встретит неизвестную инструкцию. Но раз все декомпилировалось, можно с уверенностью утверждать, что характер представления swich по строковому параметру аналогичен полученному коду.
                                                                                  +1
                                                                                  Может быть, конечно, но вроде бы оснований не доверять ему нет — код вполне осмыслен, и раньше он («он» — в смысле «декомпилер») меня не подводил.

                                                                                  Впрочем, посмотрел для очистки совести и другим, более «низкоуровневым» — и, насколько я понял, там та же «пляска» с хешем и сравнением строки: image

                                                                                  С английским — да, грешен :-(
                                                                                    +2
                                                                                    Да, похоже на правду. Грустно.
                                                                                    Ладно я ещё могу понять проверку на идентичность: str2.equals(«string0») — мало ли что могло произойти :)
                                                                                    Но два switch по hashCode и по int выглядит по меньшей мере странно.
                                                                                      0
                                                                                      Зато это должно быть дешевле, чем замена на if(str.equals(case1)){...}else if(str.equals(case2))…
                                                                                        +1
                                                                                        Собственно, на Java One задавали вопрос, будет ли эта конструкция реализована, как if'ы с equals? Ответ был таков: «Нет. Она будет на хешах. Для скорости.»
                                                                                          0
                                                                                          Ну и не обманули.
                                                                                +3
                                                                                Ура! Наконец-то. Всех поздравляю с релизом и всем наливаю плюсов… На сколько хватило на столько расставил плюсов всем отписавшимся в этой тем ;) Сегодня праздник. Гулять так гулять! :)
                                                                                  +3
                                                                                  Отличная новость!

                                                                                  Мы ждали этого события 4 года, 7 месяцев и 17 дней.
                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                    0
                                                                                    На продакшн ставить дураков нет надеюсь, а netbeans из под него запустил, ну что сказать, работает…
                                                                                      0
                                                                                      Во всех жалобах с Lucene я увидел, что там используется Server VM на 64 бит.

                                                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                    Самое читаемое