Основы технологии Java • Java— объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems и официально выпущенный 23 мая 1995 года. • Так называют не только сам язык, но и платформу для создания приложений уровня предприятий на основе данного языка. • Класс языка: объектно-ориентированный, структурный, императивный • Появился в: 1995 г. • Автор: Sun Microsystems • Последняя версия: Java Standard Edition 6 (1.6.12) • Типизация данных: строгая полиморфная, статическая • Основные реализации: многочисленные • Предки: Objective-C, C++, Smalltalk, Eiffel • Потомки: Groovy, C#, J#, VJ#, PHP Основные особенности • Изначально новый язык программирования назывался Oak (русск. Дуб) и разрабатывался Джеймсом Гослингом для бытовой электроники, но впоследствии был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения. • Программы на Java транслируются в байт-код, выполняемый виртуальной java-машиной (JVM). Основные особенности • Достоинства: – байтовый код, в отличие от текста, обрабатывается значительно быстрее – полная независимости байт-кода от ОС и оборудования – гибкая система безопасности • Недостатки: – байт-кода виртуальной машиной может снижать производительность программ и алгоритмов • Решения: – JIT (Just-In-Time compilation), позволяющей переводить байт-код в машинный код во время исполнения программы с возможностью сохранения версий класса в машинном коде – широкое использование native-кода в стандартных библиотеках – аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM) История версий • Java 1.0 • Разработка Java началась в 1990 году, первая официальная версия — Java 1.0, — была выпущена только в 1995 году. • Java 2.0 • К 1998 году была разработана обновлённая спецификация JDK 1.2, вышедшая под наименованием Java 2. Собственно языковых изменений в данной версии не появилось. Платформа получила следующие дополнения: Набор средств для создания визуального интерфейса пользователя Swing. Коллекции. Поддержка файлов Policy и цифровых сертификатов пользователя. Java 2D. Поддержка технологии drag-and-drop. Полная поддержка Unicode, включая поддержку ввода на японском, китайском и корейском языках. Поддержка воспроизведения аудио-файлов нескольких популярных форматов. Полная поддержка технологии CORBA. JIT-компилятор, улучшенная производительность. История версий. Java 5 • Спецификация Java 5 была выпущена в сентябре 2004 года. В данной версии разработчики внесли в язык целый ряд принципиальных дополнений: Перечислимые типы (enum). Ранее отсутствовавшие в Java типы оформлены по аналогии с C++, но при этом имеют ряд дополнительных возможностей. – – – • • Перечислимый тип является полноценным классом Java, то есть может иметь конструктор, поля, методы, в том числе скрытые и абстрактные. Перечисление может реализовывать интерфейсы. Для перечислений имеются встроенные методы, дающие возможность получения значений типа по имени, символьных значений, соответствующих именам, преобразования между номером и значением, проверки типа на то, что он является перечислимым. Аннотации — возможность добавления в текст программы метаданных, не влияющих на выполнение кода, но допускающих использование для получения различных сведений о коде и его исполнении. Одновременно выпущен инструментарий для использования аннотированного кода. Одно из применений аннотаций — упрощение создания тестовых модулей для Java-кода. Средства обобщённого программирования (generics) — механизм, аналогичный шаблонам в C++ или C#, дающий возможность создавать классы и методы с полями и параметрами произвольного типа. С использованием данного механизма реализованы новые версии коллекций стандартной библиотеки Java. Классификация платформ Java • J2EE или Java EE (начиная с v1.5) — Java Enterprise Editon, для создания программного обеспечения уровня предприятия; • J2SE или Java SE (начиная с v1.5) — Java Standard Editon, для создания пользовательских приложений, в первую очередь — для настольных систем; • J2ME, Java ME или Java Micro Edition, для использования в устройствах, ограниченных по вычислительной мощности, в том числе мобильных телефонах, PDA, встроенных системах Самыми популярными считаются серверные технологии семейства J2EE. Последним релизом является версия 1.6 Применения платформы Java • Следующие успешные проекты реализованы с привлечением Java (J2EE) технологий: Amazon, eBay, Flickr, Google (Gmail), Yandex, LinkedIn. • Следующие компании в основном фокусируются на Java (J2EE) технологиях, а не на .NET, хотя имеют дело также и с последними: SAP, IBM, Oracle. Основные возможности • • • • • • • • • автоматическое управление памятью расширенные возможности обработки исключительных ситуаций; богатый набор средств фильтрации ввода/вывода; набор стандартных коллекций, таких как массив, список, стек и т. п.; наличие простых средств создания сетевых приложений (в том числе с использованием протокола RMI); наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы; встроенные в язык средства создания многопоточных приложений; унифицированный доступ к базам данных на основе JDBC и SQLJ. поддержка шаблонов (начиная с версии 1.5) Пример программы Примитивные типы Объектные переменные, объекты, ссылки и указатели • В языке Java имеются только динамически создаваемые объекты. Причем переменные объектного типа и объекты в Java — совершенно разные сущности. Переменные объектного типа являются ссылками, то есть неявными указателями на динамически создаваемые объекты. Это подчёркивается синтаксисом описания переменных. Так, в Java нельзя писать: double a[10][20]; Foo b(30); а нужно: double[][] a = new double[10][20]; Foo b = new Foo(30); Объектные переменные, объекты, ссылки и указатели • • • • При присваиваниях, передаче в подпрограммы и сравнениях объектные переменные ведут себя как указатели, то есть присваиваются, копируются и сравниваются адреса объектов. А при доступе с помощью объектной переменной к полям данных или методам объекта не требуется никаких специальных операций разыменовывания — этот доступ осуществляется так, как если бы объектная переменная была самим объектом. Объектными являются переменные любого типа, кроме простых числовых типов. Явных указателей в Java нет. В отличие от указателей C, C++ и других языков программирования, ссылки в Java в высокой степени безопасны благодаря жёстким ограничениям на их использование, в частности: Нельзя преобразовывать объект типа int или любого другого примитивного типа в указатель или ссылку и наоборот. Над ссылками запрещено выполнять операции ++, −−, +, − или любые другие арифметические операции. Объектные переменные, объекты, ссылки и указатели • • • Преобразование типов между ссылками жёстко регламентировано. За исключением ссылок на массивы, разрешено преобразовывать ссылки только между наследуемым типом и его наследником, причём преобразование наследуемого типа в наследующий должно быть явно задано и во время выполнения производится проверка его осмысленности. Преобразования ссылок на массивы разрешены лишь тогда, когда разрешены преобразования их базовых типов, а также нет конфликтов размерности. В Java нет операций взятия адреса (&) или взятия объекта по адресу (*). Звёздочка в Java означает умножение, и только. Амперсанд (&) означает всего лишь «побитовое и» (двойной амперсанд — «логическое и»). Благодаря таким специально введенным ограничениям в Java невозможно прямое манипулирование памятью на уровне физических адресов (хотя ссылки, не указывающие ни на что, есть: значение такой ссылки обозначается null). Средства разработки ПО • • • • • JDK — помимо набора библиотек для платформ Java SE и Java EE содержит компилятор командной строки javac и набор утилит, также работающих в режиме командной строки.В Java нет операций взятия адреса (&) или взятия объекта по адресу (*). Звёздочка в Java означает умножение, и только. Амперсанд (&) означает всего лишь «побитовое и» (двойной амперсанд — «логическое и»). NetBeans IDE — бесплатная интегрированная среда разработки для всех платформ Java — Java ME, Java SE и Java EE. Пропагандируется Sun Microsystems, разработчиком Java, как базовое средство для разработки ПО на языке Java и других языках (C, C++, Ruby, Fortran и др.). Eclipse — бесплатная интегрированная среда разработки для Java SE и Java EE. Ведутся работы по поддержке в Eclipse платформы Java ME. Пропагандируется IBM, одним из важнейших разработчиков корпоративного ПО, как базовое средство для разработки ПО на языке Java и других языках (C, C++, Ruby, Fortran и др.) IntelliJ IDEA — коммерческая среда разработки для платформ Java SE, Java EE и Java ME. Oracle JDeveloper import java.io.*; import java.net.*; public class EchoServer { static ServerSocket server; static DataInputStream dis; static PrintStream ps; final static byte[] EOL={(byte)'\r',(byte)'\n'}; public static void main(String[] args) { } } public static void main(String[] args) { try { System.out.println("!!!!!!!!!!!!!!"); server=new ServerSocket(5000); while(true) { Socket client=server.accept(); System.out.println("Client comming..."); dis=new DataInputStream(client.getInputStream()); ps=new PrintStream(client.getOutputStream()); ps.print("Welcome!"); ps.write(EOL); ps.flush(); String line; do { line=dis.readLine(); if(line!=null) { ps.print("Echo: "+line); ps.write(EOL); } } while (!line.trim().equals("bye")); ps.print("See ya!"); ps.write(EOL); client.close(); } }catch(IOException e) {System.out.println("Error in main()");} } List of JVM languages • • • • • • • • AspectJ, an aspect-oriented extension of Java Clojure, a functional Lisp dialect Groovy, a scripting language JavaFX Script, a scripting language targeting the Rich Internet Application domain JRuby, an implementation of Ruby Jython, an implementation of Python Rhino, an implementation of JavaScript Scala, an object-oriented and functional programming language • • • • • • • • • • • • • • • • • • • • • Ada JGNAT AWK Jawk C C to Java Virtual Machine compilers Cobol Veryant isCobol ColdFusion Adobe ColdFusion / Railo / Open BlueDragon Common Lisp Armed Bear Common Lisp[4] / CLforJava / Jatha (Common LISP) Component Pascal Gardens Point Component Pascal Erlang Erjang Forth myForth JavaScript Rhino LOGO jLogo / XLogo Lua Kahlua / Luaj / Jill Oberon-2 Canterbury Oberon-2 for JVM Objective Caml (OCaml) OCaml-Java Pascal Canterbury Pascal for JVM PHP IBM WebSphere sMash PHP / Caucho Quercus[14] Python Jython Rexx IBM NetRexx Ruby JRuby Scheme Bigloo / Kawa / SISC / JScheme Tcl Jacl / JTcl