Основы технологии Java

Download Report

Transcript Основы технологии Java

Основы технологии 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